public async Task AddMessageAsync(AggregateCommunicationComposeRequest message) { var storageAccount = CloudStorageAccount.Parse(_storageConnectionString); var client = storageAccount.CreateCloudQueueClient(); var queue = client.GetQueueReference(QueueName); await queue.CreateIfNotExistsAsync(); var cloudMessage = new CloudQueueMessage(JsonConvert.SerializeObject(message, Formatting.Indented)); await queue.AddMessageAsync(cloudMessage); }
public async Task GivenAggregateCommunicationComposeRequest_AndNoMatchingCommunicationMessages_ShouldNotQueueDispatchOfMessage() { var msgIds = new List <Guid> { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }; var from = DateTime.UtcNow.AddDays(-1); var to = DateTime.UtcNow; var req = new AggregateCommunicationComposeRequest("UserId", msgIds, new AggregateCommunicationRequest(Guid.NewGuid(), CommunicationConstants.RequestType.ApplicationSubmitted, DeliveryFrequency.Daily, DateTime.UtcNow, from, to)); _mockRepository.Setup(x => x.GetManyAsync(msgIds)) .ReturnsAsync(Enumerable.Empty <CommunicationMessage>()); await _sut.ProcessAggregateCommunicationComposeRequestAsync(req); _mockDispatchQueuePublisher.Verify(x => x.AddMessageAsync(It.IsAny <CommunicationMessageIdentifier>()), Times.Never); }
public async Task ProcessAggregateCommunicationComposeRequestAsync(AggregateCommunicationComposeRequest request) { var originallyScheduledCommunicationMessages = await _repository.GetManyAsync(request.MessageIds); var aggregatedMessage = await _aggregateProcessor.CreateAggregateMessageAsync(request.AggregateCommunicationRequest, originallyScheduledCommunicationMessages); if (aggregatedMessage != null) { await _repository.InsertAsync(aggregatedMessage); await MarkOriginallyScheduledMessagesAsSentAsync(request.MessageIds, aggregatedMessage.Id); await QueueImmediateDispatchAsync(aggregatedMessage); } else { var msg = $@"After aggregating {request.MessageIds.Count()} {request.AggregateCommunicationRequest.Frequency.ToString()} - {request.AggregateCommunicationRequest.RequestType} notifications for {request.UserId}, there was nothing to send."; _logger.LogInformation(msg); } }
public async Task GivenAggregateCommunicationComposeRequest_ShouldQueueDispatchOfOneMessage() { var msgIds = new List <Guid> { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }; var from = DateTime.UtcNow.AddDays(-1); var to = DateTime.UtcNow; var req = new AggregateCommunicationComposeRequest("UserId", msgIds, new AggregateCommunicationRequest(Guid.NewGuid(), CommunicationConstants.RequestType.ApplicationSubmitted, DeliveryFrequency.Daily, DateTime.UtcNow, from, to)); var messages = Enumerable.Repeat(new CommunicationMessage(), 10); _mockRepository.Setup(x => x.GetManyAsync(msgIds)).ReturnsAsync(messages); var aggregateMessage = new CommunicationMessage { Id = Guid.NewGuid() }; _mockAggregateProcessor.Setup(x => x.CreateAggregateMessageAsync(req.AggregateCommunicationRequest, messages)) .ReturnsAsync(aggregateMessage); await _sut.ProcessAggregateCommunicationComposeRequestAsync(req); _mockRepository.Verify(x => x.InsertAsync(aggregateMessage), Times.Once); _mockRepository.Verify(x => x.UpdateScheduledMessagesAsSentAsync(msgIds, aggregateMessage.Id), Times.AtMostOnce); _mockDispatchQueuePublisher.Verify(x => x.AddMessageAsync(new CommunicationMessageIdentifier(aggregateMessage.Id)), Times.AtMostOnce); }