private void VerifyAllMocks <T>(T message, Audit.Api.Client.Models.Audit auditMessage)
        {
            Mock.Get(_mockLogger).VerifyAll();
            Mock.Get(_mockServiceBusMessagingService)
            .Verify(sbs => sbs.SendAsBinaryXmlMessageAsync(ItIs.EquivalentTo(message), It.Is <IDictionary <string, string> >(m => m["messageType"] == typeof(T).FullName)), Times.Once);

            Mock.Get(_mockAuditService)
            .Verify(a => a.AuditAsync(ItIs.EquivalentTo(auditMessage)), Times.Once);
        }
        public async Task NotifyContractIsReadyToSignTestAsync()
        {
            // Arrange
            _dummyContract.Status = ContractStatus.PublishedToProvider;
            var expectedMessage = new SFS.ContractReadyToSignEmailMessage {
                ContractNumber = _dummyContract.ContractNumber, Ukprn = _dummyContract.Ukprn, VersionNumber = _dummyContract.ContractVersion
            };
            var expectedAuditMessage = new Audit.Api.Client.Models.Audit
            {
                Action   = Audit.Api.Client.Enumerations.ActionType.ContractNotificationForwarded,
                Message  = $"A contract notification has been forwarded to the [MessageProcessor] by [{nameof(ContractStatusChangePublisher.NotifyContractIsReadyToSignAsync)}] for contract [{_dummyContract.ContractNumber}] Version [{_dummyContract.ContractVersion}] with the status of [{_dummyContract.Status}]",
                Severity = 0,
                Ukprn    = _dummyContract.Ukprn,
                User     = "******"
            };

            var publisher = new ContractStatusChangePublisher(_mockServiceBusMessagingService, _mockAuditService, _mockLogger);

            // Act
            await publisher.NotifyContractIsReadyToSignAsync(_dummyContract);

            // Assert
            VerifyAllMocks(expectedMessage, expectedAuditMessage);
        }