/// <inheritdoc />
        public override async Task <JObject> GetData(List <ApiRequest> requests, RequestContext context)
        {
            var endpoint = this.GetEndpoint();

            if (endpoint == null)
            {
                return(null);
            }

            var mutations = requests.OfType <MutationApiRequest>().ToList();

            if (mutations.Count > 0)
            {
                var result = new JObject();
                foreach (var mutation in mutations)
                {
                    mutation.Context = context;

                    var midResult = await endpoint.Ask <SurrogatableJObject>(mutation, this.timeout);

                    result.Merge((JObject)midResult);
                }

                return(result);
            }

            var query = new QueryApiRequest {
                Context = context, Fields = requests
            };

            return(await endpoint.Ask <SurrogatableJObject>(query, this.timeout));
        }
        /// <summary>
        /// Handles query requests
        /// </summary>
        /// <param name="request">The query request</param>
        private void HandleQuery(QueryApiRequest request)
        {
            var system = Context.System;

            this.apiProvider.ResolveQuery(
                request.Fields,
                request.Context,
                exception => system.Log.Error(exception, "{Type}: query resolve exception", this.GetType().Name))
            .PipeTo(
                this.Sender,
                this.Self,
                json => (SurrogatableJObject)json,
                e => this.HandleResolveException(e, system));
        }
        public async Task QueryHandleTest()
        {
            this.ExpectNoMsg();
            var actor =
                this.ActorOfAsTestActorRef <ApiHandlerActor>(Props.Create(() => new ApiHandlerActor(new TestProvider(null))));

            var context     = new RequestContext();
            var queryFields = new List <ApiRequest> {
                new ApiRequest {
                    FieldName = "asyncScalarField"
                }
            };
            var query = new QueryApiRequest {
                Context = context, Fields = queryFields
            };

            var result = (JObject)await actor.Ask <SurrogatableJObject>(query, TimeSpan.FromSeconds(1));

            Assert.NotNull(result);
            Assert.NotNull(result.Property("asyncScalarField"));
            Assert.Equal("AsyncScalarField", result.Property("asyncScalarField").ToObject <string>());
        }