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());
    }
Esempio n. 3
0
 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);
    }