diff options
Diffstat (limited to 'tests/Test/FragmentSpec.hs')
| -rw-r--r-- | tests/Test/FragmentSpec.hs | 75 |
1 files changed, 71 insertions, 4 deletions
diff --git a/tests/Test/FragmentSpec.hs b/tests/Test/FragmentSpec.hs index 7b2bb92..69f1344 100644 --- a/tests/Test/FragmentSpec.hs +++ b/tests/Test/FragmentSpec.hs @@ -10,7 +10,13 @@ import Data.List.NonEmpty (NonEmpty(..)) import Data.Text (Text) import Language.GraphQL import qualified Language.GraphQL.Schema as Schema -import Test.Hspec (Spec, describe, it, shouldBe, shouldNotSatisfy) +import Test.Hspec ( Spec + , describe + , it + , shouldBe + , shouldSatisfy + , shouldNotSatisfy + ) import Text.RawString.QQ (r) size :: Schema.Resolver IO @@ -37,6 +43,10 @@ inlineQuery = [r|{ } }|] +hasErrors :: Value -> Bool +hasErrors (Object object') = HashMap.member "errors" object' +hasErrors _ = True + spec :: Spec spec = describe "Inline fragment executor" $ do it "chooses the first selection if the type matches" $ do @@ -92,6 +102,63 @@ spec = describe "Inline fragment executor" $ do actual <- graphql (size :| []) query actual `shouldNotSatisfy` hasErrors - where - hasErrors (Object object') = HashMap.member "errors" object' - hasErrors _ = True + + it "evaluates nested fragments" $ do + let query = [r| + { + ...circumferenceFragment + } + + fragment circumferenceFragment on Hat { + circumference + } + + fragment hatFragment on Hat { + ...circumferenceFragment + } + |] + + actual <- graphql (circumference :| []) query + let expected = object + [ "data" .= object + [ "circumference" .= (60 :: Int) + ] + ] + in actual `shouldBe` expected + + it "evaluates fragments defined in any order" $ do + let query = [r| + { + ...circumferenceFragment + } + + fragment circumferenceFragment on Hat { + ...hatFragment + } + + fragment hatFragment on Hat { + circumference + } + |] + + actual <- graphql (circumference :| []) query + let expected = object + [ "data" .= object + [ "circumference" .= (60 :: Int) + ] + ] + in actual `shouldBe` expected + + it "rejects recursive" $ do + let query = [r| + { + ...circumferenceFragment + } + + fragment circumferenceFragment on Hat { + ...circumferenceFragment + } + |] + + actual <- graphql (circumference :| []) query + actual `shouldSatisfy` hasErrors |
