コード例 #1
0
 public FieldMiddlewareBuilderTests()
 {
     _builder = new FieldMiddlewareBuilder();
     _context = new ResolveFieldContext
     {
         FieldName = "Name",
         FieldAst  = new Field(default, new NameNode("Name")),
コード例 #2
0
        public MountainSchema(IDependencyResolver resolver) : base(resolver)
        {
            Query        = resolver.Resolve <MountainQuery>();
            Mutation     = resolver.Resolve <MountainMutation>();
            Subscription = resolver.Resolve <MountainSubscription>();

            RegisterDirective(new LowercaseDirective());
            RegisterDirective(new OrderbyDirective());

            var builder = new FieldMiddlewareBuilder();

            builder.Use <LowercaseFieldsMiddleware>();
            builder.ApplyTo(this);

            builder.Use(next =>
            {
                return(context =>
                {
                    return next(context).ContinueWith(x =>
                    {
                        var c = context;
                        var result = x.Result;

                        result = OrderbyQuery.OrderIfNecessary(context, result);

                        return result;
                    });
                });
            });
            builder.ApplyTo(this);

            //builder.Use<CustomGraphQlExecutor<MountainSchema>>();
            //builder.ApplyTo(this);
        }
コード例 #3
0
        public async Task test()
        {
            // create a middleware that increments a variable when every field is resolved
            var middleware = new FieldMiddlewareBuilder();
            int count      = 0;

            middleware.Use(d => context =>
            {
                Interlocked.Increment(ref count);
                return(d(context));
            });

            // prep a test execution using that middleware
            StarWarsTestBase starWarsTest  = null;
            Func <Task>      testExecution = async() =>
            {
                var result = await starWarsTest.Executer.ExecuteAsync(new ExecutionOptions
                {
                    Query  = "IntrospectionQuery".ReadGraphQLRequest(),
                    Schema = starWarsTest.Schema,
                });

                result.Errors.ShouldBeNull();
            };

            // run a single execution and record the number of times the resolver executed
            starWarsTest = new StarWarsTestBase();
            starWarsTest.Schema.FieldMiddleware = middleware;
            await testExecution();

            var correctCount = count;

            // test initializing the schema first, followed by 3 simultaneous executions
            starWarsTest = new StarWarsTestBase();
            starWarsTest.Schema.FieldMiddleware = middleware;
            await testExecution();

            count = 0;
            var t1 = Task.Run(testExecution);
            var t2 = Task.Run(testExecution);
            var t3 = Task.Run(testExecution);
            await Task.WhenAll(t1, t2, t3);

            count.ShouldBe(correctCount * 3, "Failed synchronized initialization");

            // test three simultaneous executions on an uninitialized schema
            count        = 0;
            starWarsTest = new StarWarsTestBase();
            starWarsTest.Schema.FieldMiddleware = middleware;
            t1 = Task.Run(testExecution);
            t2 = Task.Run(testExecution);
            t3 = Task.Run(testExecution);
            await Task.WhenAll(t1, t2, t3);

            count.ShouldBe(correctCount * 3, "Failed multithreaded initialization");
        }
コード例 #4
0
 public FieldMiddlewareBuilderTests()
 {
     _builder = new FieldMiddlewareBuilder();
     _context = new ResolveFieldContext
     {
         FieldName = "Name",
         FieldAst = new Field(null, new NameNode("Name")),
         Source = new Person { Name = "Quinn" },
         Errors = new ExecutionErrors(),
         Metrics = new Metrics().Start(null)
     };
 }
コード例 #5
0
        public FieldMiddlewareBuilderTests()
        {
            _builder           = new FieldMiddlewareBuilder();
            _context           = new ResolveFieldContext();
            _context.FieldName = "Name";
            _context.FieldAst  = new Field(null, new NameNode("Name"));
            _context.Source    = new Person
            {
                Name = "Quinn"
            };

            _context.Metrics = new Metrics();
        }
コード例 #6
0
 public ExecutionContext(GraphQlRequest request, IExecutionDataDictionary data, CancellationToken cancellationToken)
 {
     Request                    = request;
     Result                     = null;
     FieldMiddleware            = new FieldMiddlewareBuilder();
     ValidationRules            = new List <IValidationRule>();
     ExecutionData              = data;
     CancellationToken          = cancellationToken;
     UserContext                = new Dictionary <string, object>();
     Listeners                  = new List <IDocumentExecutionListener>();
     ComplexityConfiguration    = new ComplexityConfiguration();
     EnableMetrics              = false;
     ExposeExceptions           = false;
     MaxParallelExecutionCount  = null;
     ThrowOnUnhandledException  = false;
     UnhandledExceptionDelegate = null;
 }
コード例 #7
0
 public FieldMiddlewareBuilderTests()
 {
     _builder = new FieldMiddlewareBuilder();
     _context = new ResolveFieldContext
     {
         FieldDefinition = new FieldType {
             Name = "Name"
         },
         FieldAst = new GraphQLField {
             Name = new GraphQLName("Name")
         },
         Source = new Person {
             Name = "Quinn"
         },
         Errors  = new ExecutionErrors(),
         Schema  = new Schema(),
         Metrics = new Metrics().Start(null)
     };
 }
コード例 #8
0
 public static FieldMiddlewareDelegate Build(this FieldMiddlewareBuilder builder) => builder.Build(null, null);
コード例 #9
0
    public static FieldMiddlewareDelegate BuildResolve(this FieldMiddlewareBuilder builder)
    {
        var transform = builder.Build();

        return(transform != null?transform(null) : null);
    }