summaryrefslogtreecommitdiff
path: root/tests/Language/GraphQL/ValidateSpec.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-09-11 08:03:49 +0200
committerEugen Wissner <belka@caraus.de>2020-09-11 08:03:49 +0200
commit08998dbd935e65aab10ff53c249cb214af2522f2 (patch)
treef5b502ce73ede2500dd0a508145b317e5f81b7fe /tests/Language/GraphQL/ValidateSpec.hs
parentc2c57b636392ae67a118ce5be04ad8f4b1304ed5 (diff)
downloadgraphql-08998dbd935e65aab10ff53c249cb214af2522f2.tar.gz
Validate fragments don't form cycles
Diffstat (limited to 'tests/Language/GraphQL/ValidateSpec.hs')
-rw-r--r--tests/Language/GraphQL/ValidateSpec.hs34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/Language/GraphQL/ValidateSpec.hs b/tests/Language/GraphQL/ValidateSpec.hs
index 10b6688..c6d8487 100644
--- a/tests/Language/GraphQL/ValidateSpec.hs
+++ b/tests/Language/GraphQL/ValidateSpec.hs
@@ -393,3 +393,37 @@ spec =
, path = []
}
in validate queryString `shouldBe` Seq.singleton expected
+
+ it "rejects spreads that form cycles" $
+ let queryString = [r|
+ {
+ dog {
+ ...nameFragment
+ }
+ }
+ fragment nameFragment on Dog {
+ name
+ ...barkVolumeFragment
+ }
+ fragment barkVolumeFragment on Dog {
+ barkVolume
+ ...nameFragment
+ }
+ |]
+ error1 = Error
+ { message =
+ "Cannot spread fragment \"barkVolumeFragment\" within \
+ \itself (via barkVolumeFragment -> nameFragment -> \
+ \barkVolumeFragment)."
+ , locations = [AST.Location 11 15]
+ , path = []
+ }
+ error2 = Error
+ { message =
+ "Cannot spread fragment \"nameFragment\" within itself \
+ \(via nameFragment -> barkVolumeFragment -> \
+ \nameFragment)."
+ , locations = [AST.Location 7 15]
+ , path = []
+ }
+ in validate queryString `shouldBe` Seq.fromList [error1, error2]