From 08998dbd935e65aab10ff53c249cb214af2522f2 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 11 Sep 2020 08:03:49 +0200 Subject: Validate fragments don't form cycles --- tests/Language/GraphQL/ValidateSpec.hs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'tests/Language/GraphQL/ValidateSpec.hs') 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] -- cgit v1.2.3