コード例 #1
0
        public async void Next_emits_OnData_when_data_is_available()
        {
            var response = new QueryResponse()
            {
                HasMore = true
            };

            response.Results.AddRange(new[]
            {
                new QueryResultBytes()
                {
                    ResultBytes = new KV()
                    {
                        Key       = "key1",
                        Namespace = "namespace1",
                        Value     = "foo".ToByteString()
                    }
                    .ToByteString()
                },
                new QueryResultBytes()
                {
                    ResultBytes = new KV()
                    {
                        Key       = "key2",
                        Namespace = "namespace2",
                        Value     = "bar".ToByteString()
                    }
                    .ToByteString()
                }
            });

            QueryResult <KV> queryResult = null;

            var iterator = new StateQueryIterator(null, null, null, response);

            iterator.Data += result => queryResult = result;

            var iteratorResult = await iterator.Next();

            iteratorResult.Should().NotBeNull();
            queryResult.Should().NotBeNull();
            iteratorResult.Should().BeSameAs(queryResult);

            queryResult.Value.Key.Should().Be("key1");
            queryResult.Value.Namespace.Should().Be("namespace1");
            queryResult.Value.Value.ToStringUtf8().Should().Be("foo");

            iteratorResult = await iterator.Next();

            iteratorResult.Should().NotBeNull();
            queryResult.Should().NotBeNull();
            iteratorResult.Should().BeSameAs(queryResult);

            queryResult.Value.Key.Should().Be("key2");
            queryResult.Value.Namespace.Should().Be("namespace2");
            queryResult.Value.Value.ToStringUtf8().Should().Be("bar");
        }
コード例 #2
0
        Next_calls_handlers_HandleQueryNextState_when_results_are_processed_but_more_results_are_available()
        {
            var response = new QueryResponse();

            response.Results.Add(new QueryResultBytes()
            {
                ResultBytes =
                    new KV()
                {
                    Key       = "key",
                    Namespace = "namespace",
                    Value     = "value".ToByteString()
                }.ToByteString()
            });

            var handlerMock = new Mock <IHandler>();

            handlerMock.Setup(m => m.HandleQueryStateNext("Id", "ChannelId", "TxId"))
            .ReturnsAsync(response);

            var iterator = new StateQueryIterator(handlerMock.Object, "ChannelId", "TxId",
                                                  new QueryResponse()
            {
                HasMore = true, Id = "Id"
            });

            var result = await iterator.Next();

            handlerMock.VerifyAll();
            result.Value.Key.Should().Be("key");
            result.Value.Namespace.Should().Be("namespace");
            result.Value.Value.ToStringUtf8().Should().Be("value");
        }
コード例 #3
0
        public async void Next_emits_OnEnd_when_no_more_result_sets_are_available()
        {
            var eventDispatched = false;

            var iterator = new StateQueryIterator(null, null, null, new QueryResponse()
            {
                HasMore = false
            });

            iterator.End += () => eventDispatched = true;

            var result = await iterator.Next();

            eventDispatched.Should().BeTrue();
            result.Done.Should().BeTrue();
        }