public async Task ReturnsReceivedPendingUpdates() { var mockClient = new MockTelegramBotClient("foo-bar", "123"); var receiver = new BlockingUpdateReceiver(mockClient); Assert.Equal(2, mockClient.MessageGroupsLeft); Assert.Equal(0, receiver.PendingUpdates); await foreach (var update in receiver.YieldUpdatesAsync()) { Assert.Equal("foo", update.Message.Text); break; } Assert.Equal(1, mockClient.MessageGroupsLeft); Assert.Equal(1, receiver.PendingUpdates); await foreach (var update in receiver.YieldUpdatesAsync()) { Assert.Equal("bar", update.Message.Text); break; } Assert.Equal(1, mockClient.MessageGroupsLeft); Assert.Equal(0, receiver.PendingUpdates); await foreach (var update in receiver.YieldUpdatesAsync()) { Assert.Equal("123", update.Message.Text); break; } Assert.Equal(0, mockClient.MessageGroupsLeft); Assert.Equal(0, receiver.PendingUpdates); }
public void CallingGetEnumeratorTwiceThrows() { var mockClient = new MockTelegramBotClient(); var receiver = new BlockingUpdateReceiver(mockClient); _ = receiver.GetAsyncEnumerator(); Assert.Throws <InvalidOperationException>(() => receiver.GetAsyncEnumerator()); }
public Enumerator(BlockingUpdateReceiver receiver, CancellationToken cancellationToken) { _receiver = receiver; _cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, default); _token = _cts.Token; _messageOffset = receiver._receiverOptions?.Offset ?? 0; _limit = receiver._receiverOptions?.Limit ?? default; _allowedUpdates = receiver._receiverOptions?.AllowedUpdates; }
public async Task MoveNextThrowsIfEnumeratorIsDisposed() { var mockClient = new MockTelegramBotClient("foo"); var receiver = new BlockingUpdateReceiver(mockClient); var enumerator = receiver.GetAsyncEnumerator(); await enumerator.MoveNextAsync(); await enumerator.DisposeAsync(); await Assert.ThrowsAnyAsync <OperationCanceledException>( async() => await enumerator.MoveNextAsync() ); }
public async Task ThrowsOnMoveNextIfCancelled() { var mockClient = new MockTelegramBotClient("foo", "bar"); var receiver = new BlockingUpdateReceiver(mockClient); var cts = new CancellationTokenSource(); await using var enumerator = receiver.GetAsyncEnumerator(cts.Token); Assert.True(await enumerator.MoveNextAsync()); Assert.Equal("foo", enumerator.Current.Message !.Text); mockClient.Options.RequestDelay = 1000; cts.CancelAfter(200); await Assert.ThrowsAnyAsync <OperationCanceledException>(async() => await enumerator.MoveNextAsync()); }
public async Task BlocksWhileProcessingAsync() { var mockClient = new MockTelegramBotClient("test", "break", "test"); var receiver = new BlockingUpdateReceiver(mockClient); Assert.Equal(3, mockClient.MessageGroupsLeft); await foreach (var update in receiver.YieldUpdatesAsync()) { if (update.Message.Text == "break") { break; } } Assert.Equal(1, mockClient.MessageGroupsLeft); }
public async Task DoesntReceiveWhileProcessing() { var mockClient = new MockTelegramBotClient("foo", "bar"); var receiver = new BlockingUpdateReceiver(mockClient); Assert.Equal(2, mockClient.MessageGroupsLeft); await foreach (Update update in receiver) { Assert.Equal("foo", update.Message !.Text); await Task.Delay(100); Assert.Equal(1, mockClient.MessageGroupsLeft); break; } Assert.Equal(1, mockClient.MessageGroupsLeft); }
public async Task ExceptionIsNotCaughtIfThereIsNoErrorHandler() { var mockClient = new MockTelegramBotClient { Options = { ExceptionToThrow = new("Oops") } }; var receiver = new BlockingUpdateReceiver(mockClient); await using var enumerator = receiver.GetAsyncEnumerator(); Exception ex = await Assert.ThrowsAsync <Exception>(async() => await enumerator.MoveNextAsync()); Assert.Same(mockClient.Options.ExceptionToThrow, ex); }
public async Task ReceivesOnlyOnMoveNextAsync() { var mockClient = new MockTelegramBotClient("foo", "bar"); var receiver = new BlockingUpdateReceiver(mockClient); Assert.Equal(2, mockClient.MessageGroupsLeft); await using var enumerator = receiver.GetAsyncEnumerator(); Assert.Equal(2, mockClient.MessageGroupsLeft); Assert.True(await enumerator.MoveNextAsync()); Assert.Equal("foo", enumerator.Current.Message !.Text); Assert.Equal(1, mockClient.MessageGroupsLeft); Assert.True(await enumerator.MoveNextAsync()); Assert.Equal("bar", enumerator.Current.Message !.Text); Assert.Equal(0, mockClient.MessageGroupsLeft); }