Ejemplo n.º 1
0
 public AccountState Event(AccountStatusChanged occurred)
 {
     return(new AccountState(this.AccountNumber, this.CurrentBalance,
                             occurred.AccountStatus, this.Obligations,
                             SimulatedFields,
                             AuditLog.Add(new StateLog("AccountStatusChanged", occurred.UniqueGuid(), occurred.OccurredOn()))));
 }
        public void Should_not_have_log_for_non_starchef_events()
        {
            // arrange
            var builder = AccountStatusChanged.CreateBuilder();

            builder
            .SetSource(SourceSystem.ADACO)
            .SetExternalId(Guid.Empty.ToString())
            .SetStatus(AccountStatus.ACTIVE);
            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(AccountStatusChangedEventHandler), Level.All);
            var handler         = new AccountStatusChangedEventHandler(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[AccountStatusChangedEventHandler.EXTERNAL_ID]);
        }
Ejemplo n.º 3
0
 private AccountState ApplyEvent(AccountStatusChanged occurred)
 {
     return(new AccountState(
                AccountNumber,
                CurrentBalance,
                occurred.AccountStatus,
                Obligations,
                SimulatedFields,
                AuditLog.Add(new StateLog("AccountStatusChanged", occurred.Message, occurred.UniqueGuid(),
                                          occurred.OccurredOn())),
                OpeningBalance,
                Inventroy,
                UserName,
                LastPaymentAmount,
                LastPaymentDate));
 }
        public void Should_log_listener_exceptions_and_have_correct_external_id()
        {
            // arrange
            var builder = AccountStatusChanged.CreateBuilder();

            builder
            .SetSource(SourceSystem.STARCHEF)
            .SetExternalId(Guid.Empty.ToString())
            .SetStatus(AccountStatus.ACTIVE);
            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(true);
            var messagingLogger = new Mock <IMessagingLogger>();

            messagingLogger.Setup(d => d.MessageProcessedSuccessfully(It.IsAny <object>(), It.IsAny <string>())).Throws(new ListenerException());
            var logChecker = new LogChecker(typeof(AccountStatusChangedEventHandler), Level.All);
            var handler    = new AccountStatusChangedEventHandler(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(item.Properties[AccountStatusChangedEventHandler.EXTERNAL_ID], Guid.Empty.ToString());
            });

            Assert.NotNull(
                messageList.Where(
                    item =>
                    item.ExceptionObject != null &&
                    item.ExceptionObject.GetType() == typeof(ListenerException)).FirstOrDefault()
                );

            Assert.Null(ThreadContext.Properties[AccountStatusChangedEventHandler.EXTERNAL_ID]);
        }
        public void All_logs_should_have_correct_external_id_invalid_payload()
        {
            // arrange
            var builder = AccountStatusChanged.CreateBuilder();

            builder
            .SetSource(SourceSystem.STARCHEF)
            .SetExternalId(Guid.Empty.ToString())
            .SetStatus(AccountStatus.ACTIVE);
            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(AccountStatusChangedEventHandler), Level.All);
            var handler         = new AccountStatusChangedEventHandler(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(item.Properties[AccountStatusChangedEventHandler.EXTERNAL_ID], Guid.Empty.ToString());
            });

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