示例#1
0
        /// <exception cref="NotSupportedMessageException">Raised when message type is not supported</exception>
        public IMessageHandler CreateHandler <T>()
        {
            var configuration   = new AppConfigConfiguration();
            var csProvider      = new ConnectionStringProvider();
            var dbCommands      = new DatabaseCommands(csProvider, configuration);
            var messagingLogger = new MessagingLogger(dbCommands);

            if (typeof(T) == typeof(PriceBandUpdated))
            {
                var validator = new PriceBandUpdatedValidator(dbCommands);
                return(new PriceBandEventHandler(dbCommands, validator, messagingLogger, configuration));
            }

            if (typeof(T) == typeof(AccountCreated))
            {
                var validator = new AccountCreatedValidator(dbCommands);
                var handler   = new AccountCreatedEventHandler(dbCommands, validator, configuration, messagingLogger);
                handler.OnProcessed += SendMessage;
                return(handler);
            }

            if (typeof(T) == typeof(AccountCreateFailed))
            {
                var validator = new AccountCreateFailedValidator(dbCommands);
                return(new AccountCreateFailedEventHandler(dbCommands, validator, messagingLogger));
            }

            if (typeof(T) == typeof(AccountUpdated))
            {
                var validator = new AccountUpdatedValidator(dbCommands);
                return(new AccountUpdatedEventHandler(dbCommands, validator, messagingLogger));
            }

            if (typeof(T) == typeof(AccountUpdateFailed))
            {
                var validator = new AccountUpdateFailedValidator(dbCommands);
                return(new AccountUpdateFailedEventHandler(dbCommands, validator, messagingLogger));
            }
            if (typeof(T) == typeof(AccountStatusChanged))
            {
                var validator = new AccountStatusChangedValidator(dbCommands);
                return(new AccountStatusChangedEventHandler(dbCommands, validator, messagingLogger));
            }
            if (typeof(T) == typeof(AccountStatusChangeFailed))
            {
                var validator = new AccountStatusChangeFailedValidator(dbCommands);
                return(new AccountStatusChangeFailedEventHandler(dbCommands, validator, messagingLogger));
            }
            if (typeof(T) == typeof(FileUploadCompleted))
            {
                var validator = new FileUploadEventValidator(dbCommands);
                return(new FileUploadCompletedHandler(dbCommands, validator, messagingLogger));
            }

            throw new NotSupportedMessageException(string.Format("Message type {0} is not supported.", typeof(T).Name));
        }
        public void Should_create_a_new_user()
        {
            const int    LOGIN_ID      = 123;
            const string USERNAME      = "******";
            const string FIRST_NAME    = "first_name";
            const string LAST_NAME     = "last_name";
            const string EMAIL_ADDRESS = "email";
            var          externalId    = Guid.NewGuid().ToString();
            var          builder       = AccountCreated.CreateBuilder();

            builder
            .SetInternalId(LOGIN_ID.ToString())
            .SetUsername(USERNAME)
            .SetFirstName(FIRST_NAME)
            .SetLastName(LAST_NAME)
            .SetEmailAddress(EMAIL_ADDRESS)
            .SetSource(SourceSystem.STARCHEF)
            .SetExternalId(externalId);
            var payload = builder.Build();

            var validator = new Mock <IEventValidator>();

            validator.Setup(m => m.IsAllowedEvent(It.IsAny <object>())).Returns(true);
            validator.Setup(m => m.IsValidPayload(It.IsAny <object>())).Returns(true);

            var messagingLogger = new Mock <IMessagingLogger>();

            var dbCommands = new Mock <IDatabaseCommands>();

            dbCommands.Setup(m => m.IsUserExists(It.IsAny <int?>(), It.IsAny <string>(), It.IsAny <string>())).Returns(Task.FromResult(false)); // user is not exists

            var config  = new Mock <IConfiguration>();
            var handler = new AccountCreatedEventHandler(dbCommands.Object, validator.Object, config.Object, messagingLogger.Object);

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

            // assertions
            Assert.Equal(MessageHandlerResult.Success, result);
            // while check loginId AND loginName are used
            dbCommands.Verify(m => m.IsUserExists(It.Is <int?>(p => p.Value == LOGIN_ID), It.Is <string>(p => p == null), It.Is <string>(p => p == USERNAME)), Times.Once);
            dbCommands.Verify(m => m.AddUser(It.Is <AccountCreatedTransferObject>(p =>
                                                                                  p.EmailAddress == EMAIL_ADDRESS &&
                                                                                  p.Username == USERNAME &&
                                                                                  p.FirstName == FIRST_NAME &&
                                                                                  p.LastName == LAST_NAME &&
                                                                                  p.ExternalLoginId == externalId
                                                                                  )), Times.Once);
        }
        public void Should_log_listener_exceptions_and_have_correct_internal_id()
        {
            // arrange
            var builder = AccountCreated.CreateBuilder();

            builder
            .SetInternalId("1")
            .SetFirstName("1")
            .SetLastName("1")
            .SetEmailAddress("1")
            .SetSource(SourceSystem.STARCHEF)
            .SetExternalId(Guid.Empty.ToString());
            var payload = builder.Build();

            var dbCommands = new Mock <IDatabaseCommands>();

            dbCommands.Setup(d => d.IsUserExists(It.IsAny <int?>(), It.IsAny <string>(), It.IsAny <string>())).Throws(new ListenerException());
            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>();
            var config          = new Mock <IConfiguration>();
            var logChecker      = new LogChecker(typeof(AccountCreatedEventHandler), Level.All);
            var handler         = new AccountCreatedEventHandler(dbCommands.Object, validator.Object, config.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[AccountCreatedEventHandler.INTERNAL_ID]);
            });

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

            Assert.Null(ThreadContext.Properties[AccountCreatedEventHandler.INTERNAL_ID]);
        }
        public void Should_updated_valid_data_and_log_to_messaging_events2()
        {
            string internalId     = Guid.NewGuid().ToString();
            int    creted_loginId = 15;
            string USERNAME       = "******";
            string FIRST_NAME     = "first_name";
            string LAST_NAME      = "last_name";
            string EMAIL_ADDRESS  = "email";
            var    externalId     = Guid.NewGuid().ToString();
            var    builder        = AccountCreated.CreateBuilder();

            builder
            .SetInternalId(internalId)
            .SetUsername(USERNAME)
            .SetFirstName(FIRST_NAME)
            .SetLastName(LAST_NAME)
            .SetEmailAddress(EMAIL_ADDRESS)
            .SetSource(SourceSystem.USER_MANAGEMENT)
            .SetExternalId(externalId);

            builder.AddPermissionSets("Star_Chef");

            var payload = builder.Build();

            var dbCommands = new Mock <IDatabaseCommands>();

            dbCommands.Setup(m => m.IsUserExists(It.IsAny <int?>(), It.IsAny <string>(), It.IsAny <string>())).Returns(Task.FromResult(false));
            dbCommands.Setup(m => m.AddUser(It.IsAny <AccountCreatedTransferObject>())).Returns(Task.FromResult(creted_loginId));

            var validator       = new AccountCreatedValidator(dbCommands.Object);
            var messagingLogger = new Mock <IMessagingLogger>();
            var config          = new Mock <IConfiguration>();
            var handler         = new AccountCreatedEventHandler(dbCommands.Object, validator, config.Object, messagingLogger.Object);

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

            // assertions
            Assert.Equal(MessageHandlerResult.Success, result);
            dbCommands.Verify(m => m.AddUser(It.Is <AccountCreatedTransferObject>(p =>
                                                                                  p.InternalLoginId == creted_loginId &&
                                                                                  p.InternalId.Equals(internalId, StringComparison.CurrentCultureIgnoreCase) &&
                                                                                  p.ExternalLoginId == externalId
                                                                                  )), Times.Once);
            messagingLogger.Verify(m => m.MessageProcessedSuccessfully(It.Is <object>(p => ReferenceEquals(p, payload)), It.IsAny <string>()), Times.Once);
        }
示例#5
0
        private async Task SendMessage(AccountCreatedEventHandler sender, AccountCreatedTransferObject user, IConfiguration config)
        {
            if (sender == null)
            {
                return;
            }

            try
            {
                var userDetail = await sender.DbCommands.GetLoginUserIdAndCustomerDb(user.InternalLoginId);

                ThreadContext.Properties["OrganisationId"] = userDetail.Item2;
                var db = new DatabaseManager();

                var publishEnabled = db.IsPublishEnabled(userDetail.Item3, (int)Constants.EntityType.User);
                if (publishEnabled)
                {
                    SqlParameter[] parameters = new SqlParameter[] {
                        new SqlParameter("@EntityId", userDetail.Item1),
                        new SqlParameter("@EntityTypeId", (int)Constants.EntityType.User),
                        new SqlParameter("@RetryCount", 0)
                        {
                            Value = 0, DbType = System.Data.DbType.Int32
                        },
                        new SqlParameter("@StatusId", 1),
                        new SqlParameter("@DateCreated", DateTime.UtcNow),
                        new SqlParameter("@ExternalId", string.Empty),
                        new SqlParameter("@MessageActionTypeId", (int)Constants.MessageActionType.SalesForceUserCreated)
                    };

                    db.Execute(userDetail.Item3, "sc_calculation_enqueue", Constants.TIMEOUT_MSMQ_EXEC_STOREDPROC, true, parameters);
                }
                _logger.InfoFormat("Enque userId: {0}, databaseId: {1}", userDetail.Item1, userDetail.Item2);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                throw;
            }
            finally
            {
                ThreadContext.Properties.Remove("OrganisationId");
            }
        }
        public void Should_register_error_with_model()
        {
            // arrange
            var payload    = PayloadHelpers.Construct <AccountCreated>();
            var dbCommands = new Mock <IDatabaseCommands>();
            var validator  = new Mock <IEventValidator>();

            validator.Setup(m => m.IsAllowedEvent(It.IsAny <object>())).Returns(true);
            validator.Setup(m => m.IsValidPayload(It.IsAny <object>())).Returns(false);
            var messagingLogger = new Mock <IMessagingLogger>();
            var config          = new Mock <IConfiguration>();
            var handler         = new AccountCreatedEventHandler(dbCommands.Object, validator.Object, config.Object, messagingLogger.Object);

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

            // assert
            Assert.Equal(MessageHandlerResult.Fatal, result);
            messagingLogger.Verify(m => m.ReceivedInvalidModel(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <string>()), Times.Once);
        }
        public void All_logs_should_have_correct_internal_id_invalid_payload()
        {
            // arrange
            var builder = AccountCreated.CreateBuilder();

            builder
            .SetInternalId("1")
            .SetFirstName("1")
            .SetLastName("1")
            .SetEmailAddress("1")
            .SetSource(SourceSystem.STARCHEF)
            .SetExternalId(Guid.Empty.ToString());
            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 config          = new Mock <IConfiguration>();
            var logChecker      = new LogChecker(typeof(AccountCreatedEventHandler), Level.All);
            var handler         = new AccountCreatedEventHandler(dbCommands.Object, validator.Object, config.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[AccountCreatedEventHandler.INTERNAL_ID]);
            });

            Assert.Null(ThreadContext.Properties[AccountCreatedEventHandler.INTERNAL_ID]);
        }
        public void Should_not_have_log_for_non_starchef_events()
        {
            // arrange
            var builder = AccountCreated.CreateBuilder();

            builder
            .SetInternalId("1")
            .SetFirstName("1")
            .SetLastName("1")
            .SetEmailAddress("1")
            .SetSource(SourceSystem.ADACO)
            .SetExternalId(Guid.Empty.ToString());
            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 config          = new Mock <IConfiguration>();
            var logChecker      = new LogChecker(typeof(AccountCreatedEventHandler), Level.All);
            var handler         = new AccountCreatedEventHandler(dbCommands.Object, validator.Object, config.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[AccountCreatedEventHandler.INTERNAL_ID]);
        }