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"))); }
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"))); }
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);
public ReadOnlyQueryResult(IReadOnlyQueryResult queryResult) { _queryResult = queryResult ?? throw new ArgumentNullException(nameof(queryResult)); }
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 })