public async Task ShouldNotRequeueWhenCommandMarkedAsCancelled() { // Arrange const string testId = "1234"; ScheduledMessage message = new SimpleSchedulableCommand().CreateScheduledMessage(testId); _cancelledCommandRepository.TryRemoveCancelFlag(testId).Returns(true); // Act bool didReschedule = await _testSubject.Reschedule(message); // Assert Assert.False(didReschedule); await _queueClient.DidNotReceiveWithAnyArgs().SendAsync(new Message()); }
public async Task <bool> Reschedule(ScheduledMessage message) { bool isMarkedAsCancelled = await _cancelledCommandRepository.TryRemoveCancelFlag(message.Id); if (isMarkedAsCancelled) { return(false); } if (message.Recurrence == ScheduledMessageRecurrenceEnum.DoesNotRecur) { return(false); } DateTime newScheduledAtUtc = _dateCalculator.NextScheduledAtUtc(message.ScheduledAtUtc, message.Recurrence); ScheduledMessage newMessage = new ScheduledMessage { Id = message.Id, LastExecutedAtUtc = DateTime.UtcNow, LastScheduledAtUtc = message.ScheduledAtUtc, Recurrence = message.Recurrence, ScheduledAtUtc = newScheduledAtUtc, WrappedCommandFullTypeName = message.WrappedCommandFullTypeName, WrappedCommandJson = message.WrappedCommandJson }; IQueueClient queueClient = _queueClientProvider.QueueClient; string json = JsonConvert.SerializeObject(newMessage); Message queueMessage = new Message(Encoding.UTF8.GetBytes(json)); queueMessage.MessageId = newMessage.Id; queueMessage.ScheduledEnqueueTimeUtc = newScheduledAtUtc; await queueClient.SendAsync(queueMessage); // this should be the very last thing we do return(true); }