public async Task CollectionQueueChannel_NewerReturns()
        {
            // Arrange
            var channel = new CollectionTestQueueChannel(new [] { "a", "b" }, TimeSpan.FromSeconds(3));
            var ct      = new CancellationTokenSource();

            ct.CancelAfter(TimeSpan.FromSeconds(5));
            await channel.Start(ct.Token);

            // Act
            var item = await channel.GetNextItem(TimeSpan.FromSeconds(1));

            ct.Cancel();

            // Assert
            Assert.Null(item);
        }
        public async Task CollectionQueueChannel_AfterWindow_TakenMostPrioritized()
        {
            // Arrange
            var channel = new CollectionTestQueueChannel(new [] { "a", "b" }, TimeSpan.FromSeconds(3));

            channel
            .AddItemWithDelay("a", TimeSpan.FromSeconds(3), "a_123")
            .AddItemWithDelay("b", TimeSpan.FromSeconds(1), "b_123");

            var ct = new CancellationTokenSource();

            ct.CancelAfter(TimeSpan.FromSeconds(6));
            await channel.Start(ct.Token);

            // Act
            var item = await channel.GetNextItem(TimeSpan.FromSeconds(2));

            // Assert
            Assert.Equal("b_123", item.Value);
        }
        public async Task CollectionQueueChannel_WithOneItem_AfterInterval_ReturnsWithDelay()
        {
            // Arrange
            var channel = new CollectionTestQueueChannel(new [] { "a", "b" }, TimeSpan.FromSeconds(3));

            channel
            .AddItemWithDelay("a", TimeSpan.FromSeconds(5), "a_123")
            .AddEmptyResult("b");

            var ct = new CancellationTokenSource();

            ct.CancelAfter(TimeSpan.FromSeconds(6));
            await channel.Start(ct.Token);

            // Act
            var item = await channel.GetNextItem(TimeSpan.FromSeconds(1));

            ct.Cancel();

            // Assert
            Assert.Equal("a_123", item.Value);
            Assert.Equal(2, channel.GetLongPolls("a"));
        }