Exemple #1
0
        public async Task Execute(CancellationToken cancellationToken)
        {
            if (_isExecuted)
            {
                throw new GraphQLBatchAlreadyExecutedException();
            }

            _isExecuted = true;

            // Update fields so they don't conflict
            UpdateAlias();

            // Update arguments so they don't conflict
            UpdateArguments();

            // Get all fields
            var fields = _fields.SelectMany(e => e.Value).ToList();

            // Generate query
            _executedQuery = _queryGenerator.GenerateQuery(_graphQLOperationType, fields,
                                                           _arguments.SelectMany(e => e.Value).ToArray());

            // Execute query
            var serverResult = await _executor.ExecuteQuery(query : _executedQuery, url : _url, method : _httpMethod, authorizationToken : _authorizationToken, authorizationMethod : _authorizationMethod, headers : _headers, cancellationToken : cancellationToken).ConfigureAwait(false);

            // Deserilize result
            _result = _graphQLDeserialization.DeserializeResult <JObject>(serverResult.Response, fields);

            // Set headers
            _result.Headers = serverResult.Headers;
        }
Exemple #2
0
        private void OperationSource_RecievePayload(object sender, PayloadEventArgs e)
        {
            if (_isStopped)
            {
                return;
            }

            // Get GraphQLResult
            var result = e.Payload.ToObject <GraphQLDataResult <JObject> >();

            // Add final result
            var finalResult = new GraphQLDataResult <T>()
            {
                Errors = result.Errors
            };

            // Deserilize data
            if (result.Data != null)
            {
                var data = deserialization.DeserializeResult <T>(result.Data, selectionSet);
                finalResult.Data = data;
            }

            // Send event
            if (result.ContainsErrors)
            {
                ErrorRecieved?.Invoke(this, new GraphQLDataReceivedEventArg <T>(finalResult));
            }
            else
            {
                DataRecieved?.Invoke(this, new GraphQLDataReceivedEventArg <T>(finalResult));
            }
        }
        public void GraphQLDataResult_Should_Return_False_On_Data_And_Errors()
        {
            // Arrange
            var result = new GraphQLDataResult <string>();

            // Act / Assert
            Assert.False(result.ContainsData);
            Assert.False(result.ContainsErrors);
        }
 private void LogMessage(GraphQLDataResult <JObject> result)
 {
     try
     {
         Logger?.LogError(result.Data.ToString());
     }
     catch
     {
         // Ignored
     }
 }
        public void GraphQLDataResult_Should_Return_True_On_Data_When_Contains_Data()
        {
            // Arrange
            var result = new GraphQLDataResult <string>
            {
                Data = ""
            };

            // Act / Assert
            Assert.True(result.ContainsData);
            Assert.False(result.ContainsErrors);
        }
        public async Task <IEnumerable <T> > ExecuteCollectionAsync <T>(Expression query)
        {
            // Get QueryModel
            QueryModel queryModel = GetParsedQuery(query);

            GraphQLQueryVisitor visitor = new GraphQLQueryVisitor();

            visitor.VisitQueryModel(queryModel);

            GraphQLDataResult <IDictionary <string, IEnumerable <T> > > result =
                await _queryExecutor.ExecuteQuery <IDictionary <string, IEnumerable <T> > >(
                    JsonConvert.SerializeObject(new { query = _queryBuilder.GetQuery(visitor.GetGraphQLQueryOptions()) }));

            return(result?.Data?.Values?.SelectMany(enumerable => enumerable) ?? Enumerable.Empty <T>());
        }
        public void GraphQLDataResult_Should_Return_True_On_Errors_When_Contains_Errors()
        {
            // Arrange
            var result = new GraphQLDataResult <string>
            {
                Errors = new List <GraphQLDataError>
                {
                    new GraphQLDataError()
                }
            };

            // Act / Assert
            Assert.True(result.ContainsErrors);
            Assert.False(result.ContainsData);
        }
        private void OperationSource_RecievePayload(object sender, PayloadEventArgs e)
        {
            if (_isStopped)
            {
                return;
            }

            // Get GraphQLResult
            var result = e.Payload.ToObject <GraphQLDataResult <JObject> >();

            // Add final result
            var finalResult = new GraphQLDataResult <T>()
            {
                Errors = result.Errors
            };

            // Deserilize data
            if (result.Data != null)
            {
                try
                {
                    var data = deserialization.DeserializeResult <T>(result.Data, selectionSet);
                    finalResult.Data = data;
                }
                catch (Exception ex)
                {
                    Logger?.LogError(new EventId(2), ex, "Exception deserilizing message");

                    LogMessage(result);
                    // Ignored
                }
            }

            // Send event
            if (result.ContainsErrors)
            {
                ErrorRecieved?.Invoke(this, new GraphQLDataReceivedEventArg <T>(finalResult));
            }
            else
            {
                DataRecieved?.Invoke(this, new GraphQLDataReceivedEventArg <T>(finalResult));
            }
        }
        public async Task Execute()
        {
            if (_isExecuted)
            {
                throw new GraphQLBatchAlreadyExecutedException();
            }

            _isExecuted = true;

            // Update fields so they don't conflict
            UpdateAlias();

            // Update arguments so they don't conflict
            UpdateArguments();

            // Generate query
            _executedQuery = _queryGenerator.GetQuery(_fields.SelectMany(e => e.Value),
                                                      _arguments.SelectMany(e => e.Value).ToArray());

            // Execute query
            _result =
                await _executor.ExecuteQuery <JObject>(_executedQuery, _url, _httpMethod, _authorizationToken, _authorizationMethod).ConfigureAwait(false);
        }
 /// <summary>
 /// Initilizes a new instance of the <see cref="GraphQLDataReceivedEventArg"/>
 /// </summary>
 /// <param name="data">The received data</param>
 public GraphQLDataReceivedEventArg(GraphQLDataResult <T> data)
 {
     ReceivedData = data;
 }