diff options
| author | Eugen Wissner <belka@caraus.de> | 2019-12-06 22:52:24 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2019-12-06 22:52:24 +0100 |
| commit | 3c1a5c800f382db0ae0c7a74ba3a5a1fdc4c23cb (patch) | |
| tree | 8413676ca83e352a0dec021a1247bdae299d9d34 /tests/Test | |
| parent | fc9ad9c4a1e2e79a6b93d2599ca8fa6770caf631 (diff) | |
| download | graphql-3c1a5c800f382db0ae0c7a74ba3a5a1fdc4c23cb.tar.gz | |
Support directives (skip and include)
Fixes #24.
Diffstat (limited to 'tests/Test')
| -rw-r--r-- | tests/Test/DirectiveSpec.hs | 84 |
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 |
