public async Task ShouldCallCancelAndReturnNoRecords() { var actions = new Queue <Action>(); var builder = new StatementResultCursorBuilder(CreateSummaryBuilder(), CreateTaskQueue(actions), MoreFunction(), CancelFunction(), null); actions.Enqueue(() => builder.RunCompleted(0, new[] { "a" }, null)); actions.Enqueue(() => builder.PullCompleted(false, null)); var cursor = builder.CreateCursor(); var keys = await cursor.KeysAsync(); keys.Should().BeEquivalentTo("a"); cursor.Discard(); var list = await cursor.ToListAsync(r => r[0].As <int>()); list.Should().BeEmpty(); moreCallCount.Should().Be(0); cancelCallCount.Should().Be(1); }
public async Task ShouldInvokeResourceHandlerWhenCompleted() { var actions = new Queue <Action>(); var resourceHandler = new Mock <IResultResourceHandler>(); var builder = new StatementResultCursorBuilder(CreateSummaryBuilder(), CreateTaskQueue(actions), null, null, resourceHandler.Object); actions.Enqueue(() => builder.RunCompleted(0, new[] { "a" }, null)); actions.Enqueue(() => builder.PushRecord(new object[] { 1 })); actions.Enqueue(() => builder.PushRecord(new object[] { 2 })); actions.Enqueue(() => builder.PushRecord(new object[] { 3 })); actions.Enqueue(() => builder.PullCompleted(false, null)); var cursor = builder.CreateCursor(); var hasNext = await cursor.FetchAsync(); hasNext.Should().BeTrue(); resourceHandler.Verify(x => x.OnResultConsumedAsync(), Times.Never); hasNext = await cursor.FetchAsync(); hasNext.Should().BeTrue(); resourceHandler.Verify(x => x.OnResultConsumedAsync(), Times.Never); hasNext = await cursor.FetchAsync(); hasNext.Should().BeTrue(); resourceHandler.Verify(x => x.OnResultConsumedAsync(), Times.Never); hasNext = await cursor.FetchAsync(); hasNext.Should().BeFalse(); resourceHandler.Verify(x => x.OnResultConsumedAsync(), Times.Once); }