public async Task DispatchMultipleQueriesWithVariables()
        {
            // arrange
            IReadOnlyQueryRequest mergedRequest = null;
            int count = 0;

            var result = new QueryResult();

            result.Data["__0__a"] = "a";
            result.Data["__1__a"] = "b";
            result.Data["__1__b"] = "c";

            var executor = new Mock <IQueryExecutor>();

            executor.Setup(t => t.ExecuteAsync(
                               It.IsAny <IReadOnlyQueryRequest>(),
                               It.IsAny <CancellationToken>()))
            .Returns(new Func <IReadOnlyQueryRequest,
                               CancellationToken, Task <IExecutionResult> >((r, ct) =>
            {
                count++;
                mergedRequest = r;
                return(Task.FromResult <IExecutionResult>(result));
            }));

            var request_a = new QueryRequest(
                "query a($a: String) { a(b: $a) }")
            {
                VariableValues = new Dictionary <string, object>
                {
                    { "a", "foo" }
                }
            };

            var request_b = new QueryRequest(
                "query b { a b }");

            var client = new RemoteQueryClient(
                new EmptyServiceProvider(),
                executor.Object);

            // act
            Task <IExecutionResult> task_a = client.ExecuteAsync(request_a);
            Task <IExecutionResult> task_b = client.ExecuteAsync(request_b);
            await client.DispatchAsync(CancellationToken.None);

            // assert
            await task_a;
            await task_b;

            Assert.Equal(1, count);
            mergedRequest.MatchSnapshot();
        }
        public void BuildRequest_OnlyQueryIsSet_RequestHasOnlyQuery()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndOperation_RequestIsCreated()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .SetOperation("bar")
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndInitialValue_RequestIsCreated()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .SetInitialValue(new { a = "123" })
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndTryAddProperties_PropertyIsSet()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .TryAddProperty("one", "bar")
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndTryAddVariable_VariableIsSet()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .TryAddVariableValue("one", "bar")
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_OnlyQueryDocIsSet_RequestHasOnlyQuery()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse("{ foo }");

            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery(query)
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndSetNewProperty_RequestIsCreated()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .SetProperty("one", "bar")
                .Create();

            // assert
            // one should be bar
            request.MatchSnapshot();
        }
예제 #9
0
        public void BuildRequest_QueryAndTryAddExtension_ExtensionIsNotSet()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .AddExtension("one", "foo")
                .TryAddExtension("one", "bar")
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndAddVariables_RequestIsCreated()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .AddVariableValue("one", "foo")
                .AddVariableValue("two", "bar")
                .Create();

            // assert
            request.MatchSnapshot();
        }
예제 #11
0
        public void BuildRequest_QueryAndOperation_RequestIsCreated()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse("query bar { foo }");

            // act
            IReadOnlyQueryRequest request =
                RemoteQueryRequestBuilder.New()
                .SetQuery(query)
                .SetOperation("bar")
                .Create();

            // assert
            request.MatchSnapshot();
        }
예제 #12
0
        public void BuildRequest_QueryAndInitialValue_RequestIsCreated()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse("{ foo }");

            // act
            IReadOnlyQueryRequest request =
                RemoteQueryRequestBuilder.New()
                .SetQuery(query)
                .SetInitialValue(new { a = "123" })
                .Create();

            // assert
            request.MatchSnapshot();
        }
예제 #13
0
        public void BuildRequest_QueryAndAddVariables_RequestIsCreated()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse("{ foo }");

            // act
            IReadOnlyQueryRequest request =
                RemoteQueryRequestBuilder.New()
                .SetQuery(query)
                .AddVariableValue("one", "foo")
                .AddVariableValue("two", "bar")
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndServices_RequestIsCreated()
        {
            // arrange
            var service = new { a = "123" };

            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .SetServices(new DictionaryServiceProvider(
                                 service.GetType(), service))
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndResetProperties_RequestIsCreated()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .AddProperty("one", "foo")
                .AddProperty("two", "bar")
                .SetProperties(null)
                .Create();

            // assert
            // no property should be in the request
            request.MatchSnapshot();
        }
예제 #16
0
        public void BuildRequest_QueryAndServices_RequestIsCreated()
        {
            // arrange
            DocumentNode query   = Parser.Default.Parse("{ foo }");
            var          service = new { a = "123" };

            // act
            IReadOnlyQueryRequest request =
                RemoteQueryRequestBuilder.New()
                .SetQuery(query)
                .SetServices(new DictionaryServiceProvider(
                                 service.GetType(), service))
                .Create();

            // assert
            request.MatchSnapshot();
        }
        public void BuildRequest_QueryAndSetVariables_RequestIsCreated()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .AddVariableValue("one", "foo")
                .AddVariableValue("two", "bar")
                .SetVariableValues(new Dictionary <string, object>
            {
                { "three", "baz" }
            })
                .Create();

            // assert
            // only three should be in the request
            request.MatchSnapshot();
        }
예제 #18
0
        public void BuildRequest_QueryAndSetExtensions_RequestIsCreated_1()
        {
            // arrange
            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .AddExtension("one", "foo")
                .AddExtension("two", "bar")
                .SetExtensions(new Dictionary <string, object>
            {
                { "three", "baz" }
            })
                .Create();

            // assert
            // only three should exist
            request.MatchSnapshot();
        }
        public void BuildRequest_SetAll_RequestIsCreated()
        {
            // arrange
            var service = new { a = "123" };

            // act
            IReadOnlyQueryRequest request =
                QueryRequestBuilder.New()
                .SetQuery("{ foo }")
                .SetOperation("bar")
                .SetInitialValue(new { a = "456" })
                .AddProperty("one", "foo")
                .AddVariableValue("two", "bar")
                .SetServices(new DictionaryServiceProvider(
                                 service.GetType(), service))
                .Create();

            // assert
            request.MatchSnapshot();
        }
예제 #20
0
        public void BuildRequest_QueryAndSetProperties_RequestIsCreated()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse("{ foo }");

            // act
            IReadOnlyQueryRequest request =
                RemoteQueryRequestBuilder.New()
                .SetQuery(query)
                .AddProperty("one", "foo")
                .AddProperty("two", "bar")
                .SetProperties(new Dictionary <string, object>
            {
                { "three", "baz" }
            })
                .Create();

            // assert
            // only three should be in the request
            request.MatchSnapshot();
        }