Beispiel #1
0
        public void Handle(ChangeUserEmailCommand command)
        {
            User user = repo.GetById <User>(command.Id);

            user.ChangeEmail(command.Email);
            repo.Save(user, Guid.NewGuid());
        }
Beispiel #2
0
        public void ChangeUserEmailCommandHandler_Fails_For_Existing_New_Email()
        {
            var handler = new ChangeUserEmailCommandHandler(_repository, _mailClient, new ConfirmEmailMailTemplate(_appSettings));
            var command = new ChangeUserEmailCommand("*****@*****.**", "test", "*****@*****.**");
            var user    = Substitute.For <User>();

            user.Email.Returns("*****@*****.**");
            user.Password.Returns(new Password("test"));
            user.Status.Returns(UserStatus.Active);

            _context.Users.Add(user);

            var user2 = Substitute.For <User>();

            user2.Email.Returns("*****@*****.**");

            _context.Users.Add(user2);

            var result = handler.Execute(command);

            result.Errors.Should().HaveCount(1);
            result.Errors[0].Expression.ToString().Should().Be("c => c.NewEmail");
            result.Errors[0].Message.Should().Be("Email address already exists");
            user.DidNotReceive().RequestEmailChange(Arg.Any <string>());
            user.Received().RequestEmailChangeFailed();
            _mailClient.SentMessages.Should().BeEmpty();
        }
        public async Task Handle(DomainEventNotification <UserEmailChangedEvent> notification,
                                 CancellationToken cancellationToken)
        {
            var changeUserEmailCommand = new ChangeUserEmailCommand()
            {
                ApplicationUserEmail    = notification.DomainEvent.ApplicationUserEmail,
                ApplicationUserNewEmail = notification.DomainEvent.ApplicationUserNewEmail,
            };

            await _mediator.Send(changeUserEmailCommand, cancellationToken);
        }
Beispiel #4
0
        public void ChangeUserEmailCommandHandler_Sends_Email()
        {
            var handler = new ChangeUserEmailCommandHandler(_repository, _mailClient, new ConfirmEmailMailTemplate(_appSettings));
            var command = new ChangeUserEmailCommand("*****@*****.**", "test", "*****@*****.**");
            var user    = new User("*****@*****.**", "test");

            user.Activate();
            _context.Users.Add(user);

            handler.Execute(command);

            _mailClient.SentMessages.Should().HaveCount(1);
            _mailClient.SentMessages[0].Subject.Should().Be("Please confirm your email address");
            _mailClient.SentMessages[0].To.Should().Be("*****@*****.**");
        }
Beispiel #5
0
        public void ChangeUserEmailCommandHandler_Succeeds()
        {
            var handler = new ChangeUserEmailCommandHandler(_repository, _mailClient, new ConfirmEmailMailTemplate(_appSettings));
            var command = new ChangeUserEmailCommand("*****@*****.**", "test", "*****@*****.**");
            var user    = Substitute.For <User>();

            user.Email.Returns("*****@*****.**");
            user.NewEmailConfirmationCode.Returns(999999);
            user.Password.Returns(new Password("test"));
            user.Status.Returns(UserStatus.Active);

            _context.Users.Add(user);

            handler.Execute(command);

            user.Received().RequestEmailChange("*****@*****.**");
            user.DidNotReceive().RequestEmailChangeFailed();
        }
Beispiel #6
0
        public async Task change_email_returns_unathorized_if_password_does_not_match(string password)
        {
            //Given
            HttpClient client = await CreateAuthorizedClient();

            var changeEmailCommand = new ChangeUserEmailCommand()
            {
                Password = password,
                NewEmail = "*****@*****.**"
            };

            var payload = GetPayload(changeEmailCommand);

            //When
            var response = await client.PutAsync(Url("email"), payload);

            //Then
            response.StatusCode.Should().BeEquivalentTo(HttpStatusCode.Unauthorized);
        }
Beispiel #7
0
        public void ChangeUserEmailCommandHandler_Throws_Exception_For_Invalid_User()
        {
            var handler = new ChangeUserEmailCommandHandler(_repository, _mailClient, new ConfirmEmailMailTemplate(_appSettings));
            var command = new ChangeUserEmailCommand("*****@*****.**", "test", "*****@*****.**");
            var user    = Substitute.For <User>();

            user.Email.Returns("*****@*****.**");
            user.Password.Returns(new Password("test"));
            user.Status.Returns(UserStatus.Inactive);

            _context.Users.Add(user);

            Action commandAction = () => {
                var result = handler.Execute(command);
            };

            commandAction.Should().Throw <InvalidOperationException>();

            _mailClient.SentMessages.Should().BeEmpty();
        }
Beispiel #8
0
        public async Task change_email_unathorized_request_sends_unathorized_code()
        {
            //Given
            var client = Factory.CreateClient();
            var user   = await AddUserWithoutInvestorToRepoAndGetAsync();

            var changeEmailCommand = new ChangeUserEmailCommand()
            {
                Password = user.Password,
                NewEmail = "*****@*****.**"
            };

            var payload = GetPayload(changeEmailCommand);

            //When
            var response = await client.PutAsync(Url("email"), payload);

            //Then
            response.StatusCode.Should().BeEquivalentTo(HttpStatusCode.Unauthorized);
        }
        public async Task Handle(ChangeUserEmailCommand command)
        {
            try
            {
                var user = await Repository.GetByKeyAsync<Domain.Models.User>(command.UserId);
                user.ChangeEmail(command.Email);

                await Repository.SaveChangesAsync();

                var @event = new UserEmailChangedEvent(command.UserId, command.Email);
                EventBus.RaiseEvent(@event);
            }
            catch (Exception ex)
            {
                var @event = new UserEmailNotChangedEvent(command.UserId, command.Email, ex.Message);
                EventBus.RaiseEvent(@event);

                throw;
            }
        }
Beispiel #10
0
        public async Task change_email_on_success_returns_no_content()
        {
            //Given
            var user = await AddUserWithoutInvestorToRepoAndGetAsync();

            HttpClient client = await CreateAuthorizedClient(user);

            var changeEmailCommand = new ChangeUserEmailCommand()
            {
                Password = user.Password,
                NewEmail = "*****@*****.**"
            };

            var payload = GetPayload(changeEmailCommand);

            //When
            var response = await client.PutAsync(Url("email"), payload);

            //Then
            response.StatusCode.Should().BeEquivalentTo(HttpStatusCode.NoContent);
        }
Beispiel #11
0
        public async Task change_email_returns_bad_request_if_new_email_is_not_valid(string email)
        {
            //Given
            var user = await AddUserWithoutInvestorToRepoAndGetAsync();

            HttpClient client = await CreateAuthorizedClient(user);

            var changeEmailCommand = new ChangeUserEmailCommand()
            {
                Password = user.Password,
                NewEmail = email
            };

            var payload = GetPayload(changeEmailCommand);

            //When
            var response = await client.PutAsync(Url("email"), payload);

            //Then
            response.StatusCode.Should().BeEquivalentTo(HttpStatusCode.BadRequest);
        }