{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main (main) where
import Data.Aeson
import Data.ByteString.Lazy as BSL
import Data.Either
import Data.FileEmbed
import Data.Proxy
import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Chat.Flowdock.REST
main :: IO ()
main = defaultMain tests
tests :: TestTree
tests = testGroup "Tests" [exampleJsons]
exampleJsons :: TestTree
exampleJsons = testGroup "Example JSONs"
[ p "List of organisations" $(embedStringFile "fixtures/organisations.json") (Proxy :: Proxy [Organisation])
, p "Organisation" $(embedStringFile "fixtures/organisation.json") (Proxy :: Proxy Organisation)
, p "List of users " $(embedStringFile "fixtures/users.json") (Proxy :: Proxy [User])
, p "List of org users" $(embedStringFile "fixtures/organisation-users.json") (Proxy :: Proxy [User])
, p "List of flows" $(embedStringFile "fixtures/flows.json") (Proxy :: Proxy [Flow])
]
where p :: forall a. FromJSON a => String -> ByteString -> Proxy a -> TestTree
p name bs _ = QC.testProperty name $ once $ isRight (eitherDecode bs :: Either String a)