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); }
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); }
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); }
private bool CertificatePrintStatusUpdateMessageEquals(CertificatePrintStatusUpdateMessage first, CertificatePrintStatusUpdateMessage second) { return(JsonConvert.SerializeObject(first).Equals(JsonConvert.SerializeObject(second))); }