public async Task CallsCallbackAndDeletesFromDeadLetterQueue() { var logger = A.Fake <ILogger>(); var eventStoreRepository = A.Fake <IMessageQueueRepository>(); A.CallTo(() => eventStoreRepository.GetDeadLetterListLength <TestMessage>()).Returns(3); var message1 = JsonConvert.SerializeObject(new TestMessage { Id = "0" }); var message2 = JsonConvert.SerializeObject(new TestMessage { Id = "1" }); var message3 = JsonConvert.SerializeObject(new TestMessage { Id = "2" }); A.CallTo(() => eventStoreRepository.GetUnprocessedMessage <TestMessage>(0)).ReturnsNextFromSequence(message1, message2, message3); var retryData = new RetryData { LastRetryTime = DateTimeOffset.UtcNow.AddHours(-1) }; A.CallTo(() => eventStoreRepository.GetRetryData(A <TestMessage> ._)).Returns(retryData); var subscriber = A.Fake <IEventSubscriber>(); var retryClass = new TestRetryClass(subscriber, eventStoreRepository); await retryClass.RetryAsync().ConfigureAwait(false); Assert.IsTrue(retryClass.CallBack1Called); Assert.IsTrue(retryClass.CallBack2Called); Assert.IsTrue(retryClass.CallBack3Called); A.CallTo(() => eventStoreRepository.DeleteFromDeadLetterQueue <TestMessage>(A <RedisValue> ._, A <TestMessage> ._)) .MustHaveHappened(Repeated.Exactly.Times(3)); }
public async Task DoesNotCallCallbackIfRetryCounterIsGreaterThanThreshold() { var logger = A.Fake <ILogger>(); var eventStoreRepository = A.Fake <IMessageQueueRepository>(); A.CallTo(() => eventStoreRepository.GetDeadLetterListLength <TestMessage>()).Returns(1); var message = new TestMessage { Id = "0" }; A.CallTo(() => eventStoreRepository.GetUnprocessedMessage <TestMessage>(0)).Returns(JsonConvert.SerializeObject(message)); var retryData = new RetryData { LastRetryTime = DateTimeOffset.UtcNow.AddHours(-1), RetryCount = 6 }; A.CallTo(() => eventStoreRepository.GetRetryData(A <TestMessage> ._)).Returns(retryData); var subscriber = A.Fake <IEventSubscriber>(); var retryClass = new TestRetryClass(subscriber, logger, eventStoreRepository); await retryClass.RetryAsync().ConfigureAwait(false); Assert.IsFalse(retryClass.CallBack1Called); }