packages feed

arch-web-0.3.2: test/Main.hs

module Main (main) where

import Control.Exception (SomeException, catch)
import Network.HTTP.Client (Manager)
import Network.HTTP.Client.TLS (newTlsManager)
import Test.HUnit
import Web.ArchLinux

main :: IO ()
main = do
  manager <- newTlsManager
  runTestTTAndExit $ tests manager

tests :: Manager -> Test
tests manager =
  TestList
    [ createTest "getPackageDetails" manager $ getPackageDetails Core X86_64 "linux",
      createTest "getPackageFiles" manager $ getPackageFiles Core X86_64 "linux",
      createTest "searchPackage" manager $ searchPackage emptySearchOptions {_nameOrDescription = Just "linux"},
      createTest "searchAur" manager $ searchAur ByNameOrDesc "haskell",
      createTest "getAurInfo" manager $ getAurInfo ["arch-hs-git"]
    ]

createTest :: (HasBaseUrl k) => String -> Manager -> APIClient k a -> Test
createTest tag manager action = TestLabel tag . TestCase $ do
  -- Retry up to 3 times in case of network errors or rate limiting
  result <- retry 3 $ runAPIClient manager action
  case result of
    Right _ -> pure ()
    Left err -> assertFailure $ show err

retry :: Int -> IO a -> IO a
retry 0 action = action
retry n action = action `catch` \(_ :: SomeException) -> retry (n - 1) action