public void ReturnsMaxValue_WhenSet()
        {
            var sut = new SqsReceiveDelayCalculator(new SqsPollingQueueReaderOptions
            {
                InitialDelay = TimeSpan.FromSeconds(10),
                MaxDelay     = TimeSpan.FromSeconds(5)
            });

            sut.CalculateSecondsToDelay(Array.Empty <Message>());

            var result = sut.CalculateSecondsToDelay(Array.Empty <Message>());

            result.TotalSeconds.Should().Be(5);
        }
        public void ReturnsInitialDelayForAllCalls_WhenNotUsingExponentialBackOff()
        {
            var sut = new SqsReceiveDelayCalculator(new SqsPollingQueueReaderOptions
            {
                InitialDelay          = TimeSpan.FromSeconds(10),
                UseExponentialBackoff = false
            });

            sut.CalculateSecondsToDelay(Array.Empty <Message>());
            sut.CalculateSecondsToDelay(Array.Empty <Message>());

            var result = sut.CalculateSecondsToDelay(Array.Empty <Message>());

            result.TotalSeconds.Should().Be(10);
        }
        public void ReturnsZeroTimeSpan_WhenMoreThanOneMessage()
        {
            var sut = new SqsReceiveDelayCalculator(new SqsPollingQueueReaderOptions
            {
                InitialDelay = TimeSpan.FromSeconds(2)
            });

            var result = sut.CalculateSecondsToDelay(new Message[] { new Message() });

            result.TotalSeconds.Should().Be(0);
        }
        public void ReturnsExpectedDelay_WhenUsingExponentialBackOff(int numberOfEmptyPolls, int expected)
        {
            var sut = new SqsReceiveDelayCalculator(new SqsPollingQueueReaderOptions
            {
                InitialDelay = TimeSpan.FromSeconds(2)
            });

            TimeSpan result = TimeSpan.FromSeconds(-1);

            for (int i = 0; i < numberOfEmptyPolls; i++)
            {
                result = sut.CalculateSecondsToDelay(Array.Empty <Message>());
            }

            result.TotalSeconds.Should().Be(expected);
        }