예제 #1
0
        public void MaxDepth3_QueryWith3LevelsWithInlineFragm_Valid()
        {
            // arrange
            Schema       schema = ValidationUtils.CreateSchema();
            DocumentNode query  = Parser.Default.Parse(@"
                query {
                    level1_1 {
                        ... on Level2 {
                            level2_1 {
                                ... on Level3 {
                                    level3_1
                                }
                            }
                        }
                    }
                }
            ");

            var options = new Mock <IValidateQueryOptionsAccessor>(
                MockBehavior.Strict);

            options.Setup(t => t.MaxExecutionDepth).Returns(3);

            var rule = new MaxDepthRule(options.Object);

            // act
            QueryValidationResult result = rule.Validate(schema, query);

            // assert
            Assert.False(result.HasErrors);
        }
예제 #2
0
        public void MaxDepth3_QueryWith4LevelsViaFraments_MaxDepthReached()
        {
            // arrange
            Schema       schema = ValidationUtils.CreateSchema();
            DocumentNode query  = Parser.Default.Parse(@"
                query {
                    level1_1 {
                        ... level2
                    }
                }

                fragment level2 on Level2
                {
                    level2_1 {
                        ... level3
                    }
                }

                fragment level3 on Level3
                {
                    level3_1 {
                        ... level4
                    }
                }

                fragment level4 on Level4
                {
                    level4
                }
            ");

            var options = new Mock <IValidateQueryOptionsAccessor>(
                MockBehavior.Strict);

            options.Setup(t => t.MaxExecutionDepth).Returns(3);

            var rule = new MaxDepthRule(options.Object);

            // act
            QueryValidationResult result = rule.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The query exceded the maximum allowed execution " +
                                  "depth of 3.", t.Message));
        }
예제 #3
0
        public void MaxDepth3_QueryWith4Levels_MaxDepthReached()
        {
            // arrange
            Schema       schema = ValidationUtils.CreateSchema();
            DocumentNode query  = Utf8GraphQLParser.Parse(@"
                query {
                    level1_1 {
                        level2_1 {
                            level3_1 {
                                level4
                            }
                        }
                    }
                    level1_2
                    level1_2
                    {
                        level2_2
                        level2_3
                        {
                            level3_2
                        }
                    }
                }
            ");

            var options = new Mock <IValidateQueryOptionsAccessor>(
                MockBehavior.Strict);

            options.Setup(t => t.MaxExecutionDepth).Returns(3);

            var rule = new MaxDepthRule(options.Object);

            // act
            QueryValidationResult result = rule.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t =>
            {
                Assert.Equal(
                    "The query exceded the maximum allowed execution " +
                    "depth of 3.", t.Message);
                Assert.Equal(1, t.Locations.Count);
            });
        }
예제 #4
0
        public void NoMaxDepth_QueryWith4Levels_Valid()
        {
            // arrange
            Schema       schema = ValidationUtils.CreateSchema();
            DocumentNode query  = Parser.Default.Parse(@"
                query {
                    level1_1 {
                        level2_1 {
                            level3_1 {
                                level4
                            }
                        }
                    }
                    level1_2
                    level1_2
                    {
                        level2_2
                        level2_3
                        {
                            level3_2
                        }
                    }
                }
            ");

            var options = new Mock <IValidateQueryOptionsAccessor>(
                MockBehavior.Strict);

            options.Setup(t => t.MaxExecutionDepth)
            .Returns((int?)null);

            var rule = new MaxDepthRule(options.Object);

            // act
            QueryValidationResult result = rule.Validate(schema, query);

            // assert
            Assert.False(result.HasErrors);
        }