Esempio n. 1
0
        public async Task Run([QueueTrigger(QueueNames.CertificatePrintStatusUpdate)] CertificatePrintStatusUpdateMessage message,
                              [Queue(QueueNames.CertificatePrintStatusUpdateErrors)] ICollector <CertificatePrintStatusUpdateErrorMessage> storageQueue,
                              ILogger log)
        {
            try
            {
                log.LogDebug($"CertificatePrintStatusUpdate has started for {message.ToJson()}");

                var validationErrorMessages = await _command.Execute(message);

                validationErrorMessages?.ForEach(p => storageQueue.Add(p));

                if ((validationErrorMessages?.Count ?? 0) > 0)
                {
                    log.LogInformation($"CertificatePrintStatusUpdate has completed for {message.ToJson()} with {validationErrorMessages.Count} error(s)");
                }
                else
                {
                    log.LogDebug($"CertificatePrintStatusUpdate has completed for {message.ToJson()}");
                }
            }
            catch (Exception ex)
            {
                log.LogError(ex, $"CertificatePrintStatusUpdate has failed for {message.ToJson()}");
                throw;
            }
        }
        public async Task ThenItShouldExecuteCommand()
        {
            var message = new CertificatePrintStatusUpdateMessage();

            // Act - TimerSchedule is not used so null allowed
            await _sut.Run(message, _mockCollector.Object, _mockLogger.Object);

            // Assert
            _mockCommand.Verify(p => p.Execute(message), Times.Once());
        }
        public async Task <List <CertificatePrintStatusUpdateErrorMessage> > Execute(CertificatePrintStatusUpdateMessage message)
        {
            var validationErrorMessages = new List <CertificatePrintStatusUpdateErrorMessage>();

            try
            {
                _logger.LogDebug($"PrintStatusUpdateCommand - Started for message {message.ToJson()}");

                var validationResponse = await _certificateService.ProcessCertificatesPrintStatusUpdate(message);

                if (validationResponse.Errors.Any())
                {
                    var errorMessages = validationResponse.Errors.
                                        Where(p => p.ValidationStatusCode != ValidationStatusCode.Warning).
                                        Select(s => s.ErrorMessage);

                    if (errorMessages.Any())
                    {
                        validationErrorMessages.Add(new CertificatePrintStatusUpdateErrorMessage
                        {
                            CertificatePrintStatusUpdate = message,
                            ErrorMessages = errorMessages.ToList()
                        });
                    }

                    var warningMessages = validationResponse.Errors.
                                          Where(p => p.ValidationStatusCode == ValidationStatusCode.Warning).
                                          Select(s => s.ErrorMessage);

                    foreach (var warningMessage in warningMessages)
                    {
                        _logger.LogWarning($"PrintStatusUpdateCommand - Processed message {message.ToJson()} with warning: {warningMessage}");
                    }

                    _logger.LogInformation($"PrintStatusUpdateCommand - Completed for message {message.ToJson()} with {errorMessages.Count()} error(s) and {warningMessages.Count()} warning(s)");
                }
                else
                {
                    _logger.LogDebug($"PrintStatusUpdateCommand - Completed for message {message.ToJson()}");
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"PrintStatusUpdateCommand - Failed for message {message.ToJson()}");
                throw;
            }

            return(validationErrorMessages);
        }
Esempio n. 4
0
        private List <CertificatePrintStatusUpdateMessage> BuildCertificatePrintStatusUpdateMessages(int batchNumber, List <Certificate> certificates, string status, DateTime statusAt)
        {
            var messages = new List <CertificatePrintStatusUpdateMessage>();

            certificates.ForEach(p =>
            {
                var message = new CertificatePrintStatusUpdateMessage
                {
                    CertificateReference = p.CertificateReference,
                    BatchNumber          = batchNumber,
                    Status          = status,
                    StatusAt        = statusAt,
                    ReasonForChange = null
                };

                messages.Add(message);
            });

            return(messages);
        }
Esempio n. 5
0
        public void Arrange()
        {
            _mockLogger             = new Mock <ILogger <Domain.Print.PrintStatusUpdateCommand> >();
            _mockCertificateService = new Mock <ICertificateService>();

            _certificatePrintStatusUpdateMessage = new CertificatePrintStatusUpdateMessage
            {
                BatchNumber          = 1,
                CertificateReference = "00010111",
                ReasonForChange      = "",
                Status   = CertificateStatus.Delivered,
                StatusAt = DateTime.UtcNow
            };

            _mockCertificateService
            .Setup(m => m.ProcessCertificatesPrintStatusUpdate(
                       It.Is <CertificatePrintStatusUpdateMessage>(
                           p => CertificatePrintStatusUpdateMessageEquals(p, _certificatePrintStatusUpdateMessage))))
            .ReturnsAsync(new ValidationResponse(new ValidationErrorDetail()));

            _sut = new Domain.Print.PrintStatusUpdateCommand(
                _mockLogger.Object,
                _mockCertificateService.Object);
        }
Esempio n. 6
0
 private bool CertificatePrintStatusUpdateMessageEquals(CertificatePrintStatusUpdateMessage first, CertificatePrintStatusUpdateMessage second)
 {
     return(JsonConvert.SerializeObject(first).Equals(JsonConvert.SerializeObject(second)));
 }