diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/Language/GraphQL/SchemaSpec.hs | 31 | ||||
| -rw-r--r-- | tests/Test/DirectiveSpec.hs | 2 | ||||
| -rw-r--r-- | tests/Test/FragmentSpec.hs | 24 | ||||
| -rw-r--r-- | tests/Test/QuerySpec.hs | 40 |
4 files changed, 96 insertions, 1 deletions
diff --git a/tests/Language/GraphQL/SchemaSpec.hs b/tests/Language/GraphQL/SchemaSpec.hs new file mode 100644 index 0000000..6804150 --- /dev/null +++ b/tests/Language/GraphQL/SchemaSpec.hs @@ -0,0 +1,31 @@ +{-# LANGUAGE OverloadedStrings #-} +module Language.GraphQL.SchemaSpec + ( spec + ) where + +import qualified Data.Aeson as Aeson +import qualified Data.Aeson.Types as Aeson +import qualified Data.Sequence as Sequence +import Data.Text (Text) +import Language.GraphQL.AST.Core +import Language.GraphQL.Error +import Language.GraphQL.Schema +import Test.Hspec (Spec, describe, it, shouldBe) + +spec :: Spec +spec = + describe "resolve" $ + it "ignores invalid __typename" $ do + let resolver = object "__typename" $ pure + [ scalar "field" $ pure ("T" :: Text) + ] + schema = resolversToMap [resolver] + fields = Sequence.singleton + $ SelectionFragment + $ Fragment "T" Sequence.empty + expected = Aeson.object + [ ("data" , Aeson.emptyObject) + ] + + actual <- runCollectErrs (resolve schema fields) + actual `shouldBe` expected diff --git a/tests/Test/DirectiveSpec.hs b/tests/Test/DirectiveSpec.hs index 3b9da19..b4cf364 100644 --- a/tests/Test/DirectiveSpec.hs +++ b/tests/Test/DirectiveSpec.hs @@ -4,7 +4,7 @@ module Test.DirectiveSpec ( spec ) where -import Data.Aeson (Value, object, (.=)) +import Data.Aeson (Value(..), object, (.=)) import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap import Data.List.NonEmpty (NonEmpty(..)) diff --git a/tests/Test/FragmentSpec.hs b/tests/Test/FragmentSpec.hs index 74293a9..99c0715 100644 --- a/tests/Test/FragmentSpec.hs +++ b/tests/Test/FragmentSpec.hs @@ -189,3 +189,27 @@ spec = do ] actual <- graphql (HashMap.singleton "Query" $ garment "Hat" :| []) query actual `shouldBe` expected + + it "test1" $ do + let query = [r| + { + garment { + circumference + } + } + |] + expected = object + [ "data" .= object + [ "garment" .= object + [ "circumference" .= (60 :: Int) + ] + ] + ] + actual <- graphql schema query + actual `shouldBe` expected + where + schema = HashMap.singleton "Query" $ garment' :| [] + garment' = Schema.object "garment" $ return + [ circumference' + ] + circumference' = Schema.scalar "circumference" $ pure (60 :: Int) diff --git a/tests/Test/QuerySpec.hs b/tests/Test/QuerySpec.hs new file mode 100644 index 0000000..95608b0 --- /dev/null +++ b/tests/Test/QuerySpec.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} +module Test.QuerySpec + ( spec + ) where + +import Data.Aeson ((.=), object) +import qualified Data.HashMap.Strict as HashMap +import Data.List.NonEmpty (NonEmpty(..)) +import Language.GraphQL +import qualified Language.GraphQL.Schema as Schema +import Test.Hspec (Spec, describe, it, shouldBe) +import Text.RawString.QQ (r) + +spec :: Spec +spec = + describe "Query executor" $ + it "returns objects from the root resolvers" $ do + let query = [r| + { + garment { + circumference + } + } + |] + expected = object + [ "data" .= object + [ "garment" .= object + [ "circumference" .= (60 :: Int) + ] + ] + ] + actual <- graphql schema query + actual `shouldBe` expected + where + schema = HashMap.singleton "Query" $ garment' :| [] + garment' = Schema.object "garment" $ return + [ circumference' + ] + circumference' = Schema.scalar "circumference" $ pure (60 :: Int) |
