Exemple #1
0
        public async Task <GraphQLResponse <T> > SendQueryAsync <T>(string query)
        {
            var request = new GraphQLHttpRequest
            {
                Query = query
            };
            GraphQLResponse <T> result = null;
            var countIteration         = 10;

            for (int i = 0; i <= countIteration; i++)
            {
                try
                {
                    result = await this.SendQueryAsync <T>(request);

                    break;
                }
                catch (Exception)
                {
                    if (i == countIteration)
                    {
                        throw;
                    }
                }
            }
            return(result);
        }
        public async Task <string> Get()
        {
            var graphQLClient = new GraphQLHttpClient("http://*****:*****@"query{
                              materials{
                                id
                                name
                                description
                                gwp_z
                                concrete_scm_details{
                                  fly_ash
                                }
                                pct80_gwp_per_category_declared_unit
                                manufacturer{
                                  name
                                  alt_names
                                  location{
                                    country
                                    postalCode
                                  }
                                }
                                plant{
                                  name
                                  alt_names
                                  location{
                                    localName
                                  }
                                  owned_by{
                                    name
                                    location{
                                      country
                                    }
                                  }
                                }
                              }
                            }
                        "
            };

            var response = await graphQLClient.SendQueryAsync(request, () => new { materials = new List <Material>() });

            List <Material> materials = response.Data.materials;

            for (int i = 0; i < materials.Count; i++)
            {
                DebugOutput("Amount of materials: " + i);
            }

            if (response.Errors != null && response.Errors.Any())
            {
                throw new ApplicationException(response.Errors[0].Message);
            }

            return(JsonSerializer.Serialize(response, new JsonSerializerOptions {
                WriteIndented = true
            }));
        }
        public static async Task <string> ExecuteOperation(int[] range, int target)
        {
            string returnString;

            try
            {
                var client = new GraphQLHttpClient(new GraphQLHttpClientOptions {
                    EndPoint = new Uri(Constants.BackendConstants.GraphQLApiUrl)
                }, new NewtonsoftJsonSerializer());
                var requestString  = "mutation ($input:OperationInput!){combination(input:$input) { }}";
                var operationInput = new
                { input = new {
                      target = target,
                      range  = range
                  } };
                var request = new GraphQLHttpRequest
                {
                    Query     = requestString,
                    Variables = operationInput
                };
                var response = await client.SendMutationAsync <Dictionary <string, int[]> >(request);

                var resultString = response.Data;

                returnString = String.Join(",", resultString["combination"]);
            }
            catch (Exception)
            {
                returnString = "Erro.";
            }
            return(returnString);
        }
Exemple #4
0
        public async Task <List <TResult> > GetPages <TResponse, TResult>(GraphQLHttpRequest req, Func <TResponse, IEnumerable <TResult> > process)
        {
            PageInfo pageInfo = null;
            var      result   = new List <TResult>();

            do
            {
                if (pageInfo != null)
                {
                    ((QueryParams)req.Variables).After = pageInfo.EndCursor;
                }

                var res = await Policy
                          .WrapAsync(httpRetryPolicies)
                          .ExecuteAsync(() => client.SendQueryAsync <TResponse>(req));

                if (res.Errors?.Count() > 0)
                {
                    return(result);
                }

                result.AddRange(process(res.Data));
                pageInfo = HasPagingInfo(res);
            }while (pageInfo != null && pageInfo.HasNextPage);

            return(result);
        }
Exemple #5
0
        static async Task Main(string[] args)
        {
            var options = new GraphQLHttpClientOptions
            {
                EndPoint = new Uri("http://echo.somee.com/netflixgraph/graphql"),
            };

            var client = new GraphQLHttpClient(options, new NewtonsoftJsonSerializer());

            var query = "{ actionShows { casts } }";

            var request = new GraphQLHttpRequest
            {
                Query = query
            };

            var graphQLResponse = await client.SendQueryAsync <object>(request);


            var stringResult = graphQLResponse.Data.ToString();
            //stringResult = stringResult.Replace($"\"actionShows\":", string.Empty);
            //stringResult = stringResult.Remove(0, 1);
            //stringResult = stringResult.Remove(stringResult.Length - 1, 1);

            var result = JsonConvert.DeserializeObject <Data>(stringResult.ToString());

            for (int i = 0; i < result.ActionShows.Length; i++)
            {
                Console.WriteLine(result.ActionShows[i].Casts);
            }
            Console.Read();
        }
        static async Task Main(string[] args)
        {
            var options = new GraphQLHttpClientOptions
            {
                UseWebSocketForQueriesAndMutations = false,
                EndPoint       = new System.Uri("https://*****:*****@"
                query northwindQuery {
                      customers {
                        customerId, 
                        companyName,
                        contactName
                      }
                }"
            };

            var response = await client.SendQueryAsync <CustomerResponse>(request);

            var x = response.Data.Customers.FirstOrDefault();
        }
        public async void Test1()
        {
            var client = testFixtureBase.CreateWebApplicationFactory();

            var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
            {
                EndPoint = new Uri("http://localhost/graphql")
            }, new NewtonsoftJsonSerializer(), client);

            var request = new GraphQLHttpRequest
            {
                Query = @"{
                          products {
                                            id,
                                            name,
                                            price,
                                            description,
                                            components {
                                            id,
                                            name,
                                            description
                                        }
                                    }
                         }"
            };

            var response = await graphQLClient.SendQueryAsync <ProductQueryResponse>(request);

            var product = response.Data.Products.FirstOrDefault(x => x.Id == 1);

            product.Description.Should().Be("Description 1");
        }
        private async Task <GraphQLHttpResponse <ResponseType> > SendRequest(GraphQLHttpRequest request)
        {
            using var httpRequestMessage  = request.ToHttpRequestMessage(_graphQLHttpClientOptions, _graphQLJsonSerializer);
            using var httpResponseMessage = await _client.SendAsync(httpRequestMessage);

            var contentStream = await httpResponseMessage.Content.ReadAsStreamAsync();

            if (httpResponseMessage.IsSuccessStatusCode)
            {
                var graphQLResponse = await JsonSerializer.DeserializeAsync <GraphQLResponse <ResponseType> >(contentStream, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });

                var graphQLHttpResponse = graphQLResponse.ToGraphQLHttpResponse(httpResponseMessage.Headers, httpResponseMessage.StatusCode);
                if (graphQLHttpResponse.Errors?.Any() ?? false)
                {
                    var errorMessages = string.Join(", ", graphQLHttpResponse.Errors.Select(x => x.Message));
                    throw new HttpRequestException($"Failed to call Tibber API: {errorMessages}");
                }
                return(graphQLHttpResponse);
            }

            string content = null;

            if (contentStream != null)
            {
                using var sr = new StreamReader(contentStream);
                content      = await sr.ReadToEndAsync();
            }

            throw new GraphQLHttpRequestException(httpResponseMessage.StatusCode, httpResponseMessage.Headers, content);
        }
Exemple #9
0
        public async Task <ActionResult> Create(IFormCollection collection)
        {
            string mutation = $@"
                mutation {{
                    createMovie(inputMovie: {{
                        title: ""{collection["title"]}"",
                        price: {collection["price"]}
                    }})
                    {{
                        id
                        title
                        price
                    }}
                }}
            ";

            GraphQLHttpClient  client  = new GraphQLHttpClient(BackEndConstants.GraphQLUrl, new NewtonsoftJsonSerializer());
            GraphQLHttpRequest request = new GraphQLHttpRequest(mutation);


            try
            {
                await client.SendMutationAsync <Movie>(request);

                return(RedirectToAction(nameof(Index)));
            }
            catch (Exception ex)
            {
                return(View());
            }
        }
        public async Task Can_Create_New_Movie()
        {
            var query = new GraphQLHttpRequest
            {
                Query         = Query,
                OperationName = "CreateMovie",
                Variables     = new
                {
                    movie = new
                    {
                        title        = "Blade Runner",
                        description  = "A blade runner must pursue and terminate four replicants who stole a ship in space, and have returned to Earth to find their creator",
                        yearReleased = 1982,
                        genre        = "scifi"
                    }
                }
            };

            var response = await _graphQlHttpClient.SendMutationAsync <MovieResponseType>(query);

            response.Errors.Should().BeNull();

            // Does not work. For unknown reasons Movie is null.
            // It works in the Playground, though.
            // So it must be a client problem.
            // response.Data.Movie.Should().NotBeNull();
        }
Exemple #11
0
        public async Task Can_Update_Movie()
        {
            var query = new GraphQLHttpRequest
            {
                Query         = Query,
                OperationName = "UpdateMovie",
                Variables     = new
                {
                    movie = new
                    {
                        Id           = new Guid("20DB69D0-7760-4C3F-A484-032423E61018"),
                        Title        = "Sabrina",
                        Description  = "An ugly duckling having undergone a remarkable change, still harbors feelings for her crush: a carefree playboy, but not before his business-focused brother has something to say about it.",
                        Genre        = "romance",
                        YearReleased = 1996,
                    }
                }
            };

            var response = await _graphQlHttpClient.SendMutationAsync <MovieResponseType>(query);

            response.Errors.Should().BeNull();

            // Does not work. For unknown reasons Movie is null.
            // It works in the Playground, though.
            // So it must be a client problem.
            // response.Data.Movie.Should().NotBeNull();
        }
        public async Task <T> FetchValuesAsync <T>(
            string query)
        {
            var request  = new GraphQLHttpRequest(query);
            var response = await _httpClient.SendQueryAsync <T>(request);

            return(response.Data);
        }
        public Task <GraphQLResponse <T> > SendQueryAsync <T>(string query, object variables)
        {
            var request = new GraphQLHttpRequest
            {
                Query     = query,
                Variables = variables
            };

            return(_client.SendQueryAsync <T>(request));
        }
        public async Task <Option <IEnumerable <Repository>, AllegroApiException> > GetUserRepositoriesAsync(string username)
        {
            string query = _embeddedResourceService.GetResource("Me.Bartecki.Allegro.Infrastructure.Integrations.RepositoryStores.GitHub.GitHubQuery.graphql");

            try
            {
                bool   isNextPageAvailable = false;
                string nextPageId          = null;

                List <GitHubRepository> repositories = new List <GitHubRepository>();
                do
                {
                    var request = new GraphQLHttpRequest(query,
                                                         new
                    {
                        username     = username,
                        nextCursorId = nextPageId
                    });
                    var response = await _client.SendQueryAsync <RootResponse>(request);

                    if (response.Errors?.Any() == true)
                    {
                        return(GetException(response));
                    }

                    repositories.AddRange(response.Data.User.Repositories.Nodes);

                    //Handle pagination
                    var pageInfo = response.Data.User.Repositories.PageInfo;
                    isNextPageAvailable = pageInfo.HasNextPage;
                    if (isNextPageAvailable)
                    {
                        nextPageId = pageInfo.EndCursor;
                    }
                } while (isNextPageAvailable);

                return(Option.Some <IEnumerable <Repository>, AllegroApiException>(repositories.Select(Convert)));
            }
            catch (GraphQLHttpException httpRequestException) when(
                httpRequestException.HttpResponseMessage.StatusCode == HttpStatusCode.Unauthorized)
            {
                //Rethrow this exception, critical misconfiguration.
                throw;
            }
            catch (GraphQLHttpException httpRequestException)
            {
                var errorCode    = ErrorCodes.RepositorySource_UnableToReach;
                var apiException = new AllegroApiException(
                    errorCode,
                    httpRequestException.Message,
                    httpRequestException);

                return(Option.None <IEnumerable <Repository>, AllegroApiException>(apiException));
            }
        }
Exemple #15
0
        private async Task <List <ArticleData> > GetArticleData(string query)
        {
            var request = new GraphQLHttpRequest
            {
                Query = $"{{searchPages(query: \"{query}\") {{url wikidotInfo {{title rating}} " +
                        $"alternateTitles {{title}} attributions {{user {{name}}}}}}}}",
            };

            var response = await _graphQlClient.SendQueryAsync <ResponseType>(request);

            return(response.Data.SearchPages);
        }
Exemple #16
0
        public async Task Can_Get_All_Genres()
        {
            var query = new GraphQLHttpRequest
            {
                Query = @"{ genres { name }}"
            };

            var response = await _graphQlHttpClient.SendQueryAsync <GenresResponseCollectionType>(query);

            response.Errors.Should().BeNull();
            response.Data.Genres.Count.Should().BePositive();
        }
Exemple #17
0
        public async Task Can_Get_All_Seats()
        {
            var query = new GraphQLHttpRequest
            {
                Query         = Query,
                OperationName = "AllSeats",
            };

            var response = await _graphQlHttpClient.SendQueryAsync <SeatResponseCollectionType>(query);

            response.Errors.Should().BeNull();
            response.Data.Seats.Count.Should().BePositive();
        }
Exemple #18
0
        public async Task Can_Get_Single_Movie_By_Id()
        {
            var query = new GraphQLHttpRequest
            {
                Query         = Query,
                OperationName = "MovieById",
                Variables     = new { id = "20db69d0-7760-4c3f-a484-032423e61018" }
            };

            var response = await _graphQlHttpClient.SendQueryAsync <MovieResponseType>(query);

            response.Errors.Should().BeNull();
            response.Data.Movie.Should().NotBeNull();
        }
Exemple #19
0
        public async void PreprocessHttpRequestMessageIsCalled()
        {
            var callbackTester = new CallbackMonitor <HttpRequestMessage>();
            var graphQLRequest = new GraphQLHttpRequest($"{{ human(id: \"1\") {{ name }} }}")
            {
                PreprocessHttpRequestMessage = callbackTester.Invoke
            };

            var defaultHeaders = StarWarsClient.HttpClient.DefaultRequestHeaders;
            var response       = await StarWarsClient.SendQueryAsync(graphQLRequest, () => new { Human = new { Name = string.Empty } });

            callbackTester.Should().HaveBeenInvokedWithPayload().Which.Headers.Should().BeEquivalentTo(defaultHeaders);
            Assert.Null(response.Errors);
            Assert.Equal("Luke", response.Data.Human.Name);
        }
        public void SubscribeToUpdates()
        {
            var client = new GraphQLHttpClient(httpsLocalhostGraphql, new SystemTextJsonSerializer());

            var query = new GraphQLHttpRequest
            {
                Query = @"subscription { reviewAdded { title productId } }"
            };

            var result = client.CreateSubscriptionStream <ProductReviewSubscriptionResponse>(query);

            //result.Subscribe(response =>
            //{
            //    var review = response.Data;
            //});
        }
        public async Task <ProductModel> GetProduct(int id)
        {
            var client = new GraphQLHttpClient(httpsLocalhostGraphql, new SystemTextJsonSerializer());
            var query  = new GraphQLHttpRequest
            {
                Query     = @" 
                query productQuery($productId: ID!)
                { product(id: $productId) 
                    { id name price 
                    }
                }",
                Variables = new { productId = id }
            };
            var response = await client.SendQueryAsync <ProductResponse>(query);

            return(response.Data.Product);
        }
        public async Task <ProductReviewModel> AddReview(ProductReviewModelInput review)
        {
            var client = new GraphQLHttpClient(httpsLocalhostGraphql, new SystemTextJsonSerializer());
            var query  = new GraphQLHttpRequest
            {
                Query     = @" 
                mutation($review: reviewInput!)
                {
                    createReview(review: $review)
                    {
                        id title
                    }
                }",
                Variables = new { review }
            };
            var response = await client.SendMutationAsync <ProductReviewResponse>(query);

            return(response.Data.CreateReview);
        }
Exemple #23
0
        public async Task <PostModel> GetRandomPost()
        {
            var query = new GraphQLHttpRequest
            {
                Query = @"
                    query getRandomPost
                    {  
                        post: randomPost
                        {    
                            title
                            url
                            shortDesciption
                            imageUrl
                        }
                    }",
            };
            var response = await client.SendQueryAsync <PostContainer>(query);

            return(response.Data.Post);
        }
Exemple #24
0
        public async void PreprocessHttpRequestMessageIsCalled()
        {
            var callbackTester = new CallbackMonitor <HttpRequestMessage>();
            var graphQLRequest = new GraphQLHttpRequest($"{{ human(id: \"1\") {{ name }} }}")
            {
                PreprocessHttpRequestMessage = callbackTester.Invoke
            };

            using (var setup = SetupTest()) {
                var defaultHeaders = setup.Client.HttpClient.DefaultRequestHeaders;
                var response       = await setup.Client.SendQueryAsync(graphQLRequest, () => new { Human = new { Name = string.Empty } })
                                     .ConfigureAwait(false);

                callbackTester.CallbackShouldHaveBeenInvoked(message => {
                    Assert.Equal(defaultHeaders, message.Headers);
                });
                Assert.Null(response.Errors);
                Assert.Equal("Luke", response.Data.Human.Name);
            }
        }
Exemple #25
0
        public async static Task Main(string[] args)
        {
            using var httpClient    = testServer.CreateClient();
            using var graphqlClient = httpClient.AsGraphQLClient($"{testServer.BaseAddress}graphql");
            var graphQLHttpRequest = new GraphQLHttpRequest {
                Query = @"
					{
						repository(owner: ""graphql-dotnet"", name: ""graphql-client"") {
							databaseId,
						    id,
						    name,
						    url
						}
					}"
            };
            var graphQLHttpResponse = await graphqlClient.SendHttpQueryAsync <Schema>(graphQLHttpRequest);

            Console.WriteLine(JsonSerializer.Serialize(graphQLHttpResponse, new JsonSerializerOptions {
                WriteIndented = true
            }));
        }
Exemple #26
0
        public async Task Can_Get_All_Movies_With_Paging_Filter()
        {
            var query = new GraphQLHttpRequest
            {
                Query         = Query,
                OperationName = "AllMovies",
                Variables     = new
                {
                    filter = new { skip = 1, take = 1 }
                }
            };

            var response = await _graphQlHttpClient.SendQueryAsync <MovieResponseCollectionType>(query);

            response.Errors.Should().BeNull();

            var movieList = response.Data.Movies;

            movieList.Should().NotBeNull();
            movieList.Count.Should().BePositive();
        }
        public async Task Can_Not_Create_Movie_With_Future_Release_Date()
        {
            var query = new GraphQLHttpRequest
            {
                Query         = Query,
                OperationName = "CreateMovie",
                Variables     = new
                {
                    movie = new
                    {
                        Title        = "...",
                        Description  = "...",
                        Genre        = "romance",
                        YearReleased = DateTime.UtcNow.Year + 3,
                    }
                }
            };

            var response = await _graphQlHttpClient.SendMutationAsync <MovieResponseType>(query);

            response.Errors.Should().NotBeNull();
        }
Exemple #28
0
        public async Task <PostModel> GetPost(int id)
        {
            var query = new GraphQLHttpRequest
            {
                Query     = @"
                query getPost($pid: ID!)
                {  
                    post(id: $pid)
                    {    
                        title
                        url
                        shortDesciption
                        imageUrl
                    }
                }",
                Variables = new { pid = id }
            };

            var response = await client.SendQueryAsync <PostContainer>(query);

            return(response.Data.Post);
        }
Exemple #29
0
        public async Task Can_Get_All_Movies_With_OrderBy_Filter()
        {
            var query = new GraphQLHttpRequest
            {
                Query         = Query,
                OperationName = "AllMovies",
                Variables     = new
                {
                    filter = new { orderBy = "title" }
                }
            };

            var response = await _graphQlHttpClient.SendQueryAsync <MovieResponseCollectionType>(query);

            response.Errors.Should().BeNull();

            var movieList = response.Data.Movies;

            movieList.Should().NotBeNull();
            movieList.Count.Should().BePositive();
            movieList.Should().BeInDescendingOrder(mov => mov.Title);
        }
Exemple #30
0
        public async Task <Product> Get(int productId)
        {
            var query = new GraphQLHttpRequest
            {
                Query     = @"
                    query product($productId: ID!)
                    {
                        product(id: $productId)
                        {
                            id
                            name
                            description
                        }
                    }
                ",
                Variables = new { productId }
            };

            var response = await _client.SendMutationAsync <ProductContainer>(query);

            return(response.Data.Product);
        }