コード例 #1
0
        public async Task GlobalDataLoader()
        {
            // arrange
            ISchema       schema   = CreateSchema(ExecutionScope.Global);
            QueryExecuter executer = new QueryExecuter(schema, 10);

            // act
            List <IExecutionResult> results = new List <IExecutionResult>();

            results.Add(await executer.ExecuteAsync(new QueryRequest(
                                                        @"{
                    a: withDataLoader(key: ""a"")
                    b: withDataLoader(key: ""b"")
                }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest(
                                                        @"{
                    a: withDataLoader(key: ""a"")
                }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest(
                                                        @"{
                    c: withDataLoader(key: ""c"")
                }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest(
                                                        "{ loads }")));

            // assert
            Assert.Collection(results,
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors));
            Assert.Equal(Snapshot.Current(), Snapshot.New(results));
        }
コード例 #2
0
        public async Task RequestCustomContext()
        {
            // arrange
            ISchema       schema   = CreateSchema(ExecutionScope.Request);
            QueryExecuter executer = new QueryExecuter(schema, 10);

            // act
            List <IExecutionResult> results = new List <IExecutionResult>();

            results.Add(await executer.ExecuteAsync(
                            new QueryRequest("{ a: a b: a }")));
            results.Add(await executer.ExecuteAsync(
                            new QueryRequest("{ a: a b: a }")));
            results.Add(await executer.ExecuteAsync(
                            new QueryRequest("{ a: a b: a }")));
            results.Add(await executer.ExecuteAsync(
                            new QueryRequest("{ a: a b: a }")));

            // assert
            Assert.Collection(results,
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors));
            results.Snapshot();
        }
コード例 #3
0
        public static async Task <IExecutionResult> ExecuteAsync(
            this ISchema schema, QueryRequest request,
            CancellationToken cancellationToken = default)
        {
            QueryExecuter executer = new QueryExecuter(schema, 0);

            return(await executer.ExecuteAsync(request, cancellationToken));
        }
コード例 #4
0
        public async Task GlobalDataLoader()
        {
            // arrange
            ISchema       schema   = CreateSchema(ExecutionScope.Global);
            QueryExecuter executer = new QueryExecuter(schema, 10);

            // act
            List <IExecutionResult> results = new List <IExecutionResult>();

            results.Add(await executer.ExecuteAsync(new QueryRequest(
                                                        @"{
                    a: withDataLoader(key: ""a"")
                    b: withDataLoader(key: ""b"")
                }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest(
                                                        @"{
                    a: withDataLoader(key: ""a"")
                }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest(
                                                        @"{
                    c: withDataLoader(key: ""c"")
                }")));

            // assert
            Assert.Collection(results,
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors));
            results.Snapshot();

            var keyLoads = new HashSet <string>();
            var loads    = (IQueryExecutionResult)await executer
                           .ExecuteAsync(new QueryRequest("{ loads }"));

            foreach (object o in (IEnumerable <object>)loads.Data["loads"])
            {
                string[] keys = o.ToString().Split(',');
                foreach (string key in keys)
                {
                    Assert.True(keyLoads.Add(key));
                }
            }
        }
コード例 #5
0
        public async Task GlobalCustomContext()
        {
            // arrange
            ISchema       schema   = CreateSchema(ExecutionScope.Global);
            QueryExecuter executer = new QueryExecuter(schema, 10);

            // act
            List <IExecutionResult> results = new List <IExecutionResult>();

            results.Add(await executer.ExecuteAsync(new QueryRequest("{ a }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest("{ a }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest("{ a }")));
            results.Add(await executer.ExecuteAsync(new QueryRequest("{ a }")));

            // assert
            Assert.Collection(results,
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors),
                              t => Assert.Null(t.Errors));
            Assert.Equal(Snapshot.Current(), Snapshot.New(results));
        }
コード例 #6
0
        private async Task HandleRequestAsync(
            HttpContext context,
            QueryExecuter queryExecuter,
            CancellationToken cancellationToken)
        {
            QueryRequest request = context.Request.IsGet()
                ? GetRequest.ReadRequest(context)
                : await PostRequest.ReadRequestAsync(context);

            IExecutionResult result = await queryExecuter.ExecuteAsync(
                new Execution.QueryRequest(request.Query, request.OperationName)
            {
                VariableValues = DeserializeVariables(request.Variables),
                Services       = CreateRequestServices(context)
            },
                cancellationToken).ConfigureAwait(false);

            await WriteResponseAsync(context.Response, result)
            .ConfigureAwait(false);
        }
コード例 #7
0
        public async Task <IExecutionResult> GraphQLOrgFieldExample()
        {
            string query = @"
            {
                hero {
                    name
                    # Queries can have comments!
                    friends {
                        name
                    }
                }
            }";

            return(await _queryExecuter.ExecuteAsync(new QueryRequest(query)));
        }