summaryrefslogtreecommitdiff
path: root/tests/Test
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2019-12-06 22:52:24 +0100
committerEugen Wissner <belka@caraus.de>2019-12-06 22:52:24 +0100
commit3c1a5c800f382db0ae0c7a74ba3a5a1fdc4c23cb (patch)
tree8413676ca83e352a0dec021a1247bdae299d9d34 /tests/Test
parentfc9ad9c4a1e2e79a6b93d2599ca8fa6770caf631 (diff)
downloadgraphql-3c1a5c800f382db0ae0c7a74ba3a5a1fdc4c23cb.tar.gz
Support directives (skip and include)
Fixes #24.
Diffstat (limited to 'tests/Test')
-rw-r--r--tests/Test/DirectiveSpec.hs84
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/Test/DirectiveSpec.hs b/tests/Test/DirectiveSpec.hs
new file mode 100644
index 0000000..2224bc5
--- /dev/null
+++ b/tests/Test/DirectiveSpec.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
+module Test.DirectiveSpec
+ ( spec
+ ) where
+
+import Data.Aeson (Value, object, (.=))
+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)
+
+experimentalResolver :: Schema.Resolver IO
+experimentalResolver = Schema.scalar "experimentalField" $ pure (5 :: Int)
+
+emptyObject :: Value
+emptyObject = object
+ [ "data" .= object []
+ ]
+
+spec :: Spec
+spec =
+ describe "Directive executor" $ do
+ it "should be able to @skip fields" $ do
+ let query = [r|
+ {
+ experimentalField @skip(if: true)
+ }
+ |]
+
+ actual <- graphql (experimentalResolver :| []) query
+ actual `shouldBe` emptyObject
+
+ it "should not skip fields if @skip is false" $ do
+ let query = [r|
+ {
+ experimentalField @skip(if: false)
+ }
+ |]
+ expected = object
+ [ "data" .= object
+ [ "experimentalField" .= (5 :: Int)
+ ]
+ ]
+
+ actual <- graphql (experimentalResolver :| []) query
+ actual `shouldBe` expected
+
+ it "should skip fields if @include is false" $ do
+ let query = [r|
+ {
+ experimentalField @include(if: false)
+ }
+ |]
+
+ actual <- graphql (experimentalResolver :| []) query
+ actual `shouldBe` emptyObject
+
+ it "should be able to @skip a fragment spread" $ do
+ let query = [r|
+ {
+ ...experimentalFragment @skip(if: true)
+ }
+
+ fragment experimentalFragment on ExperimentalType {
+ experimentalField
+ }
+ |]
+
+ actual <- graphql (experimentalResolver :| []) query
+ actual `shouldBe` emptyObject
+
+ it "should be able to @skip an inline fragment" $ do
+ let query = [r|
+ {
+ ... on ExperimentalType @skip(if: true) {
+ experimentalField
+ }
+ }
+ |]
+
+ actual <- graphql (experimentalResolver :| []) query
+ actual `shouldBe` emptyObject