예제 #1
0
        public async Task ExecuteExportObjectList()
        {
            // arrange
            var serviceCollection = new ServiceCollection();

            serviceCollection
            .AddSingleton <ISchema>(sp => SchemaBuilder.New()
                                    .AddServices(sp)
                                    .AddExportDirectiveType()
                                    .AddDocumentFromString(
                                        @"
                    type Query {
                        foo(f: [FooInput]) : [Foo]
                    }

                    type Foo {
                        bar: String!
                    }

                    input FooInput {
                        bar: String!
                    }
                    ")
                                    .AddResolver("Query", "foo", c =>
            {
                var list =
                    c.Argument <List <object> >("f");
                if (list == null)
                {
                    return(new List <object>
                    {
                        new Dictionary <string, object>
                        {
                            { "bar", "123" }
                        }
                    });
                }
                else
                {
                    list.Add(new Dictionary <string, object>
                    {
                        { "bar", "456" }
                    });
                    return(list);
                }
            })
                                    .Use(next => context =>
            {
                object o = context.Parent <object>();
                if (o is Dictionary <string, object> d &&
                    d.TryGetValue(
                        context.ResponseName,
                        out object v))
                {
                    context.Result = v;
                }
                return(next(context));
            })
                                    .Create())
            .AddSingleton <IBatchQueryExecutor, BatchQueryExecutor>();

            QueryExecutionBuilder.BuildDefault(serviceCollection);

            IServiceProvider services =
                serviceCollection.BuildServiceProvider();

            var executor = services.GetService <IBatchQueryExecutor>();

            // act
            var batch = new List <IReadOnlyQueryRequest>
            {
                QueryRequestBuilder.New()
                .SetQuery(
                    @"{
                            foo @export(as: ""b"")
                            {
                                bar
                            }
                        }")
                .Create(),
                QueryRequestBuilder.New()
                .SetQuery(
                    @"{
                            foo(f: $b)
                            {
                                bar
                            }
                        }")
                .Create()
            };

            IResponseStream stream =
                await executor.ExecuteAsync(batch, CancellationToken.None);

            var results = new List <IReadOnlyQueryResult>();

            while (!stream.IsCompleted)
            {
                IReadOnlyQueryResult result = await stream.ReadAsync();

                if (result != null)
                {
                    results.Add(result);
                }
            }

            Assert.Collection(results,
                              r => r.MatchSnapshot(new SnapshotNameExtension("1")),
                              r => r.MatchSnapshot(new SnapshotNameExtension("2")));
        }
예제 #2
0
        public async Task Add_Value_To_Variable_List()
        {
            // arrange
            var serviceCollection = new ServiceCollection();

            serviceCollection
            .AddSingleton <ISchema>(sp => SchemaBuilder.New()
                                    .AddServices(sp)
                                    .AddExportDirectiveType()
                                    .AddQueryType(d => d.Name("Query")
                                                  .Field("foo")
                                                  .Argument("bar", a => a.Type <ListType <StringType> >())
                                                  .Type <ListType <StringType> >()
                                                  .Resolver <List <string> >(c =>
            {
                var list = c.Argument <List <string> >("bar");
                list.Add("789");
                return(list);
            }))
                                    .Create())
            .AddSingleton <IBatchQueryExecutor, BatchQueryExecutor>();

            QueryExecutionBuilder.BuildDefault(serviceCollection);

            IServiceProvider services =
                serviceCollection.BuildServiceProvider();

            var executor = services.GetService <IBatchQueryExecutor>();

            // act
            var batch = new List <IReadOnlyQueryRequest>
            {
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query foo1($b: [String]) {
                            foo(bar: $b) @export(as: ""b"")
                        }")
                .AddVariableValue("b", new[] { "123" })
                .Create(),
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query foo2($b: [String]) {
                            foo(bar: $b)
                        }")
                .Create()
            };

            IResponseStream stream =
                await executor.ExecuteAsync(batch, CancellationToken.None);

            var results = new List <IReadOnlyQueryResult>();

            while (!stream.IsCompleted)
            {
                IReadOnlyQueryResult result = await stream.ReadAsync();

                if (result != null)
                {
                    results.Add(result);
                }
            }

            Assert.Collection(results,
                              r => r.MatchSnapshot(new SnapshotNameExtension("1")),
                              r => r.MatchSnapshot(new SnapshotNameExtension("2")));
        }
예제 #3
0
        public async Task ExecuteExportScalar()
        {
            // arrange
            var serviceCollection = new ServiceCollection();

            serviceCollection
            .AddStarWarsRepositories()
            .AddSingleton <IBatchQueryExecutor, BatchQueryExecutor>();

            QueryExecutionBuilder.BuildDefault(serviceCollection);

            serviceCollection.AddSingleton <ISchema>(sp =>
                                                     SchemaBuilder.New()
                                                     .AddStarWarsTypes()
                                                     .AddExportDirectiveType()
                                                     .AddServices(sp)
                                                     .Create());

            IServiceProvider services =
                serviceCollection.BuildServiceProvider();

            var executor = services.GetService <IBatchQueryExecutor>();

            // act
            var batch = new List <IReadOnlyQueryRequest>
            {
                QueryRequestBuilder.New()
                .SetQuery(
                    @"
                        query getHero {
                            hero(episode: EMPIRE) {
                                id @export
                            }
                        }")
                .Create(),
                QueryRequestBuilder.New()
                .SetQuery(
                    @"
                        query getHuman {
                            human(id: $id) {
                                name
                            }
                        }")
                .Create()
            };

            IResponseStream stream =
                await executor.ExecuteAsync(batch, CancellationToken.None);

            var results = new List <IReadOnlyQueryResult>();

            while (!stream.IsCompleted)
            {
                IReadOnlyQueryResult result = await stream.ReadAsync();

                if (result != null)
                {
                    results.Add(result);
                }
            }

            Assert.Collection(results,
                              r => r.MatchSnapshot(new SnapshotNameExtension("1")),
                              r => r.MatchSnapshot(new SnapshotNameExtension("2")));
        }
 public Task SerializeAsync(
     IReadOnlyQueryResult result,
     Stream stream) =>
 SerializeAsync(result, stream, CancellationToken.None);
예제 #5
0
 public ReadOnlyQueryResult(IReadOnlyQueryResult queryResult)
 {
     _queryResult = queryResult
                    ?? throw new ArgumentNullException(nameof(queryResult));
 }
예제 #6
0
    public static IReadOnlyDictionary <string, object?> ToDictionary(
        IReadOnlyQueryResult result)
    {
        var formatted = new OrderedDictionary();

        if (result.Errors is { Count : > 0 })
 private void UpdateContextData(
     IResolverContext context,
     IReadOnlyQueryResult result,
     DelegateDirective delegateDirective)
 {
     if (result.ContextData is { Count : > 0 })