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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }