packages feed

servant-combinators-0.0.2: tests/TestLib.hs

module TestLib where

import Control.Concurrent (threadDelay)
import Control.Concurrent.Async (cancel, withAsync)
import Data.ByteString (ByteString)
import Test.QuickCheck.Monadic (PropertyM (..))
import Test.Tasty

import qualified Network.HTTP.Simple as S

testFunctionGeneric :: (Int -> IO a) -> (Int -> TestTree) -> Int -> IO ()
testFunctionGeneric server tests port = do
  withAsync (server port) $ \serverAsync -> do
    -- Sleep five seconds, to ensure the server can come online.
    threadDelay (5 * 100000)
    defaultMain $ tests port
    cancel serverAsync

returnsWith :: Int -> S.Response ByteString -> PropertyM IO Bool
returnsWith expectedResponse resp = do
  pure $ expectedResponse == S.getResponseStatusCode resp

success :: S.Response ByteString -> PropertyM IO Bool
success resp = returnsWith 200 resp

returns400 :: S.Response ByteString -> PropertyM IO Bool
returns400 resp = returnsWith 400 resp