public async Task ValidateMaxComplexityWithMiddlewareWithObjectsAndVar( int count, bool valid) { // arrange var schema = Schema.Create( @" type Query { foo(i: FooInput): String @cost(complexity: 5 multipliers: [""i.index""]) } input FooInput { index : Int } ", c => { c.BindResolver(() => "Hello") .To("Query", "foo"); }); var options = new Mock <IValidateQueryOptionsAccessor>(); options.SetupGet(t => t.MaxOperationComplexity).Returns(20); options.SetupGet(t => t.UseComplexityMultipliers).Returns(true); DocumentNode query = Utf8GraphQLParser.Parse( "query f($i:Int) { foo(i: { index:$i }) }"); OperationDefinitionNode operationNode = query.Definitions .OfType <OperationDefinitionNode>() .FirstOrDefault(); var operation = new Operation ( query, operationNode, new VariableValueBuilder( schema, operationNode) .CreateValues(new Dictionary <string, object> { { "i", count } }), schema.QueryType, null ); IReadOnlyQueryRequest request = QueryRequestBuilder.New() .SetQuery("{ a }") .Create(); var services = new DictionaryServiceProvider( new KeyValuePair <Type, object>( typeof(IErrorHandler), ErrorHandler.Default)); var context = new QueryContext ( schema, services.CreateRequestServiceScope(), request, (f, s) => f.Middleware ) { Document = query, Operation = operation }; var middleware = new MaxComplexityMiddleware( c => Task.CompletedTask, options.Object, null); // act await middleware.InvokeAsync(context); // assert if (valid) { Assert.Null(context.Result); } else { context.Result.MatchSnapshot( new SnapshotNameExtension("complexity", count)); } }
public async Task ValidateMaxComplexityWithMiddleware( int count, bool valid) { // arrange var schema = Schema.Create( @" type Query { foo(i: Int): String @cost(complexity: 5 multipliers: [""i""]) } ", c => { c.BindResolver(() => "Hello") .To("Query", "foo"); }); var options = new Mock <IValidateQueryOptionsAccessor>(); options.SetupGet(t => t.MaxOperationComplexity).Returns(20); options.SetupGet(t => t.UseComplexityMultipliers).Returns(true); DocumentNode query = Parser.Default.Parse( "{ foo(i:" + count + ") }"); OperationDefinitionNode operationNode = query.Definitions .OfType <OperationDefinitionNode>() .FirstOrDefault(); var operation = new Operation ( query, operationNode, new VariableValueBuilder( schema, operationNode) .CreateValues(new Dictionary <string, object>()), schema.QueryType, null ); IReadOnlyQueryRequest request = new QueryRequest("{ a }"); var services = new DictionaryServiceProvider( new KeyValuePair <Type, object>( typeof(IErrorHandler), ErrorHandler.Default)); var context = new QueryContext ( schema, services.CreateRequestServiceScope(), request, fs => fs.Field.Middleware ) { Document = query, Operation = operation, }; var middleware = new MaxComplexityMiddleware( c => Task.CompletedTask, options.Object, null); // act await middleware.InvokeAsync(context); // assert if (valid) { Assert.Null(context.Result); } else { context.Result.Snapshot( "ValidateMaxComplexityWithMiddleware" + count); } }