public async Task ThenAnErrorIsLoggedWhenTheAuditServiceThrowsAnException()
        {
            //Arrange
            var easAuditMessage = new EasAuditMessage
            {
                Description     = "Some stuff",
                RelatedEntities = new List <Entity> {
                    new Entity {
                        Id = "12345", Type = "test"
                    }
                },
                ChangedProperties = new List <PropertyUpdate> {
                    new PropertyUpdate {
                        NewValue = "New", PropertyName = "Name"
                    }
                }
            };

            _auditMessageFactory.Setup(x => x.Build()).Returns(new AuditMessage());
            _auditApiClient.Setup(x => x.Audit(It.IsAny <AuditMessage>())).Throws(new Exception());

            //Act
            await _auditService.SendAuditMessage(easAuditMessage);

            //Assert
            _logger.Verify(x => x.Error(It.IsAny <Exception>(), It.IsAny <string>()));
        }
        public async Task ThenTheServiceIsCalledWithTheBuildAuditMessage()
        {
            //Arrange
            var easAuditMessage = new EasAuditMessage
            {
                Description     = "Some stuff",
                RelatedEntities = new List <Entity> {
                    new Entity {
                        Id = "12345", Type = "test"
                    }
                },
                ChangedProperties = new List <PropertyUpdate> {
                    new PropertyUpdate {
                        NewValue = "New", PropertyName = "Name"
                    }
                }
            };

            _auditMessageFactory.Setup(x => x.Build()).Returns(new AuditMessage());

            //Act
            await _auditService.SendAuditMessage(easAuditMessage);

            //Assert
            _auditApiClient.Verify(x => x.Audit(It.Is <AuditMessage>(c =>
                                                                     c.Description.Equals("Some stuff") &&
                                                                     c.ChangedProperties.SingleOrDefault(y => y.NewValue.Equals("New") && y.PropertyName.Equals("Name")) != null &&
                                                                     c.RelatedEntities.SingleOrDefault(y => y.Id.Equals("12345") && y.Type.Equals("test")) != null
                                                                     )), Times.Once);
        }
        public async Task SendAuditMessage(EasAuditMessage message)
        {
            try
            {
                var auditMessage = _factory.Build();
                auditMessage.Category          = message.Category;
                auditMessage.Description       = message.Description;
                auditMessage.ChangedProperties = message.ChangedProperties;
                auditMessage.RelatedEntities   = message.RelatedEntities;
                auditMessage.AffectedEntity    = message.AffectedEntity;

                await _auditApiClient.Audit(auditMessage);
            }
            catch (Exception exception)
            {
                _logger.Error(exception, "An error occurred when calling the audit service.");
            }
        }