public static IEnumerable <object[]> AccountEventsWithNonStarChefSourceSystem()
        {
            var acb = AccountCreated.CreateBuilder();

            acb.SetExternalId("1").SetSource(SourceSystem.ADACO);
            yield return(new object[] { acb.Build(), new AccountCreatedValidator(Mock.Of <IDatabaseCommands>()) });

            var aub = AccountUpdated.CreateBuilder();

            aub.SetExternalId("1").SetSource(SourceSystem.ADACO);
            yield return(new object[] { aub.Build(), new AccountUpdatedValidator(Mock.Of <IDatabaseCommands>()) });

            var ascb = AccountStatusChanged.CreateBuilder();

            ascb.SetExternalId("1").SetStatus(AccountStatus.ACTIVE).SetSource(SourceSystem.ADACO);
            yield return(new object[] { ascb.Build(), new AccountStatusChangedValidator(Mock.Of <IDatabaseCommands>()) });

            var acfb = AccountCreateFailed.CreateBuilder();

            acfb.SetInternalId("1").SetReason(AccountCreateFailedReason.INVALID_CREATE_DATA).SetSource(SourceSystem.ADACO);
            yield return(new object[] { acfb.Build(), new AccountCreateFailedValidator(Mock.Of <IDatabaseCommands>()) });

            var aufb = AccountUpdateFailed.CreateBuilder();

            aufb.SetExternalId("1").SetCommandId("1").SetReason(AccountUpdateFailedReason.INVALID_UPDATE_DATA).SetSource(SourceSystem.ADACO);
            yield return(new object[] { aufb.Build(), new AccountUpdateFailedValidator(Mock.Of <IDatabaseCommands>()) });

            var ascfb = AccountStatusChangeFailed.CreateBuilder();

            ascfb.SetExternalId("1").SetSource(SourceSystem.ADACO);
            yield return(new object[] { ascfb.Build(), new AccountStatusChangeFailedValidator(Mock.Of <IDatabaseCommands>()) });
        }
        public void Should_not_have_log_for_non_starchef_events()
        {
            // arrange
            var builder = AccountUpdateFailed.CreateBuilder();

            builder
            .SetCommandId("1")
            .SetExternalId("1")
            .SetReason(AccountUpdateFailedReason.INVALID_UPDATE_DATA)
            .SetSource(SourceSystem.ADACO);
            var payload = builder.Build();

            var dbCommands = new Mock <IDatabaseCommands>();
            var validator  = new Mock <IEventValidator>(MockBehavior.Strict);

            validator.Setup(m => m.IsAllowedEvent(payload)).Returns(false);

            var messagingLogger = new Mock <IMessagingLogger>();
            var logChecker      = new LogChecker(typeof(AccountUpdateFailedEventHandler), Level.All);
            var handler         = new AccountUpdateFailedEventHandler(dbCommands.Object, validator.Object, messagingLogger.Object, logChecker.GetLogger());

            // act
            var result = handler.HandleAsync(payload, "1").Result;

            var messageList = logChecker.LoggingEvents;

            logChecker.Dispose();

            // assert
            Assert.Empty(messageList);

            Assert.Null(ThreadContext.Properties[AccountUpdateFailedEventHandler.EXTERNAL_ID]);
        }
        public void Should_return_true_for_valid_model()
        {
            var builder = AccountUpdateFailed.CreateBuilder();

            builder
            .SetExternalId("1")
            .SetCommandId("1")
            .SetReason(AccountUpdateFailedReason.INVALID_UPDATE_DATA);
            var accountCreated = builder.Build();

            var validator = new AccountUpdateFailedValidator(Mock.Of <IDatabaseCommands>());
            var actual    = validator.IsValidPayload(accountCreated);

            Assert.True(actual);
        }
        public void Should_correctly_convert_AccountUpdateFailed_to_json()
        {
            var builder = AccountUpdateFailed.CreateBuilder();

            builder
            .SetCommandId("1")
            .SetExternalId("1")
            .SetReason(AccountUpdateFailedReason.INVALID_UPDATE_DATA)
            .SetSource(SourceSystem.STARCHEF);
            var payload = builder.Build();

            var          actual   = MessageEventsExtensions.ToJson(payload);
            const string expected = @"{""CommandId"":""1"",""Reason"":""INVALID_UPDATE_DATA"",""ExternalId"":""1"",""Source"":""STARCHEF""}";

            Assert.Equal(expected, actual);
        }
        public void Should_updated_valid_data_and_log_to_messaging_events()
        {
            var builder = AccountUpdateFailed.CreateBuilder();

            builder
            .SetCommandId("1")
            .SetExternalId("1")
            .SetReason(AccountUpdateFailedReason.INVALID_UPDATE_DATA)
            .SetSource(SourceSystem.STARCHEF);
            var payload = builder.Build();

            var dbCommands      = new Mock <IDatabaseCommands>();
            var validator       = new AccountUpdateFailedValidator(dbCommands.Object);
            var messagingLogger = new Mock <IMessagingLogger>();
            var handler         = new AccountUpdateFailedEventHandler(dbCommands.Object, validator, messagingLogger.Object);

            var result = handler.HandleAsync(payload, "1").Result;

            // assertions
            Assert.Equal(MessageHandlerResult.Success, result);
            messagingLogger.Verify(m => m.ReceivedFailedMessage(It.IsAny <FailedTransferObject>(), It.IsAny <string>()), Times.Once);
        }
        public void All_logs_should_have_correct_external_id_invalid_payload()
        {
            // arrange
            var builder = AccountUpdateFailed.CreateBuilder();

            builder
            .SetCommandId("1")
            .SetExternalId("1")
            .SetReason(AccountUpdateFailedReason.INVALID_UPDATE_DATA)
            .SetSource(SourceSystem.STARCHEF);
            var payload = builder.Build();

            var dbCommands = new Mock <IDatabaseCommands>();
            var validator  = new Mock <IEventValidator>(MockBehavior.Strict);

            validator.Setup(m => m.IsAllowedEvent(payload)).Returns(true);

            validator.Setup(m => m.IsValidPayload(It.IsAny <object>())).Returns(false);
            validator.Setup(m => m.GetErrors()).Returns(string.Empty);
            var messagingLogger = new Mock <IMessagingLogger>();
            var logChecker      = new LogChecker(typeof(AccountUpdateFailedEventHandler), Level.All);
            var handler         = new AccountUpdateFailedEventHandler(dbCommands.Object, validator.Object, messagingLogger.Object, logChecker.GetLogger());

            // act
            var result = handler.HandleAsync(payload, "1").Result;

            var messageList = logChecker.LoggingEvents;

            logChecker.Dispose();

            // assert
            Assert.All(messageList, item =>
            {
                Assert.Equal("1", item.Properties[AccountUpdateFailedEventHandler.EXTERNAL_ID]);
            });

            Assert.Null(ThreadContext.Properties[AccountUpdateFailedEventHandler.EXTERNAL_ID]);
        }