{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoImplicitPrelude #-} module DisableIntrospection ( runNamedDisableIntrospectionTest, runDisableIntrospectionTest, ) where import qualified Data.ByteString.Lazy.Char8 as LBS import Data.Morpheus.App (disableIntrospection, mkApp, runApp) import Data.Morpheus.App.Internal.Resolving (resultOr) import Data.Morpheus.App.NamedResolvers (object, queryResolvers) import Data.Morpheus.Core (parseSchema) import Data.Morpheus.Internal.Ext (toEither) import Data.Morpheus.Types.IO (GQLRequest (..), GQLResponse) import Relude hiding (ByteString) import Test.Morpheus ( FileUrl, file, getAppsBy, testApi, ) import Test.Tasty (TestTree) runNamedDisableIntrospectionTest :: FileUrl -> FileUrl -> TestTree runNamedDisableIntrospectionTest url = testApi api where api :: GQLRequest -> IO GQLResponse api req = do schema <- LBS.readFile (toString (file url "schema.gql")) >>= resultOr (fail . show) pure . parseSchema let resolvers = queryResolvers [("Query", traverse (const $ object [("name", pure "Morpheus")]))] let app = disableIntrospection (mkApp schema resolvers) runApp app req runDisableIntrospectionTest :: FileUrl -> FileUrl -> TestTree runDisableIntrospectionTest url = testApi api where api :: GQLRequest -> IO GQLResponse api req = do app <- getAppsBy (toEither . parseSchema, mkApp) url runApp (disableIntrospection app) req