{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} module API.Common where import Control.Monad.IO.Class import Data.Aeson import qualified Data.ByteString.Lazy.Char8 as BSL import GitLab import GitLab.SystemHooks.GitLabSystemHooks import GitLab.SystemHooks.Types import Test.Tasty import Test.Tasty.HUnit gitlabParseTestOne :: (FromJSON a, Eq a, Show a) => a -> String -> Assertion gitlabParseTestOne expectedHaskellValue filename = do raw <- BSL.readFile filename result <- parseOne raw expectedHaskellValue @=? result gitlabParseTestMany :: (FromJSON a, Eq a, Show a) => [a] -> String -> Assertion gitlabParseTestMany expectedHaskellValue filename = do raw <- BSL.readFile filename result <- parseMany raw expectedHaskellValue @=? result parseOne :: FromJSON a => BSL.ByteString -> IO a parseOne bs = case eitherDecode bs of Left err -> assertFailure err Right xs -> return xs parseMany :: FromJSON a => BSL.ByteString -> IO [a] parseMany bs = case eitherDecode bs of Left err -> assertFailure err Right xs -> return xs