diff options
Diffstat (limited to 'tests/Test/RootOperationSpec.hs')
| -rw-r--r-- | tests/Test/RootOperationSpec.hs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/Test/RootOperationSpec.hs b/tests/Test/RootOperationSpec.hs new file mode 100644 index 0000000..0e534fc --- /dev/null +++ b/tests/Test/RootOperationSpec.hs @@ -0,0 +1,68 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} +module Test.RootOperationSpec + ( spec + ) where + +import Data.Aeson ((.=), object) +import qualified Data.HashMap.Strict as HashMap +import Language.GraphQL +import Test.Hspec (Spec, describe, it, shouldBe) +import Text.RawString.QQ (r) +import Language.GraphQL.Type +import qualified Language.GraphQL.Type.Out as Out + +hatType :: Out.ObjectType IO +hatType = Out.ObjectType "Hat" Nothing [] + $ HashMap.singleton "circumference" + $ Out.Resolver (Out.Field Nothing (Out.NamedScalarType int) mempty) + $ pure $ Int 60 + +schema :: Schema IO +schema = Schema + (Out.ObjectType "Query" Nothing [] hatField) + (Just $ Out.ObjectType "Mutation" Nothing [] incrementField) + where + garment = pure $ Object $ HashMap.fromList + [ ("circumference", Int 60) + ] + incrementField = HashMap.singleton "incrementCircumference" + $ Out.Resolver (Out.Field Nothing (Out.NamedScalarType int) mempty) + $ pure $ Int 61 + hatField = HashMap.singleton "garment" + $ Out.Resolver (Out.Field Nothing (Out.NamedObjectType hatType) mempty) garment + +spec :: Spec +spec = + describe "Root operation type" $ do + it "returns objects from the root resolvers" $ do + let querySource = [r| + { + garment { + circumference + } + } + |] + expected = object + [ "data" .= object + [ "garment" .= object + [ "circumference" .= (60 :: Int) + ] + ] + ] + actual <- graphql schema querySource + actual `shouldBe` expected + + it "chooses Mutation" $ do + let querySource = [r| + mutation { + incrementCircumference + } + |] + expected = object + [ "data" .= object + [ "incrementCircumference" .= (61 :: Int) + ] + ] + actual <- graphql schema querySource + actual `shouldBe` expected |
