{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoImplicitPrelude #-} module Main ( main, ) where import Data.ByteString.Lazy.Internal (ByteString) import Data.Morpheus.Core ( defaultConfig, parseRequest, parseRequestWith, parseSchema, render, ) import Data.Morpheus.Internal.Ext ( toEither, ) import Data.Morpheus.Types.IO (GQLRequest) import Data.Morpheus.Types.Internal.AST (GQLError, Schema, VALID) import Relude (Either, Functor (fmap), IO, NonEmpty, map, (.)) import Test.Morpheus ( FileUrl, cd, deepScan, mainTest, mkUrl, scan, testQuery, testQueryRendering, testQueryValidation, testSchema, ) import Test.Tasty ( TestTree, ) runQueryTest :: FileUrl -> TestTree runQueryTest = testQuery (toEither . parseRequest) runSchemaTest :: FileUrl -> TestTree runSchemaTest = testSchema (toEither . parseSchema) runRenderingTest :: FileUrl -> [FileUrl] -> [TestTree] runRenderingTest url = map (testQueryRendering (parseQuery, toEither . parseSchema) url) runQueryValidationTest :: FileUrl -> [FileUrl] -> [TestTree] runQueryValidationTest url = map (testQueryValidation (parseQuery, toEither . parseSchema) url) parseQuery :: Schema VALID -> GQLRequest -> Either (NonEmpty GQLError) ByteString parseQuery schema = toEither . fmap render . parseRequestWith defaultConfig schema main :: IO () main = mainTest "Core tests" [ scan runQueryTest (cd (mkUrl "query") "parsing"), scan runSchemaTest (mkUrl "schema"), deepScan runQueryValidationTest (cd (mkUrl "query") "validation"), deepScan runRenderingTest (mkUrl "rendering") ]