public async Task Handler_manager_should_update_user()
        {
            //Arrange
            var password = "******";
            var fakeUser = new User
            {
                Id = Guid.NewGuid().ToString(),
            };


            _userManagerMock.Setup(x => x.FindByIdAsync(fakeUser.Id)).Returns(Task.FromResult(fakeUser));
            _userManagerMock.Setup(x => x.IsInRoleAsync(fakeUser, AuthSettings.Roles.Supervisor))
            .Returns(Task.FromResult(false));

            var cancellationToken = new CancellationToken();
            var command           = new ChangeUserPasswordCommand(fakeUser.Id, password, password);
            var handler           =
                new ChangeUserPasswordCommandHandler(_userManagerMock.Object);

            //Act
            await handler.Handle(command, cancellationToken);

            //Assert
            _userManagerMock.Verify(x => x.UpdateAsync(It.Is <User>(it => it == fakeUser)), Times.Once);
        }
        public async Task Handler_should_update_password_for_user()
        {
            //Arrange
            var fakeUser = new User
            {
                Id = Guid.NewGuid().ToString(),
            };
            var password     = "******";
            var passwordHash = new PasswordHasher <User>().HashPassword(fakeUser, password);

            _userManagerMock.Setup(x => x.FindByIdAsync(fakeUser.Id)).Returns(Task.FromResult(fakeUser));
            _userManagerMock.Setup(x => x.IsInRoleAsync(fakeUser, AuthSettings.Roles.Supervisor))
            .Returns(Task.FromResult(false));

            var cancellationToken = new CancellationToken();
            var command           = new ChangeUserPasswordCommand(fakeUser.Id, password, password);
            var handler           =
                new ChangeUserPasswordCommandHandler(_userManagerMock.Object);

            //Act
            await handler.Handle(command, cancellationToken);

            //Assert
            Assert.NotEqual(passwordHash, fakeUser.PasswordHash);
        }
Example #3
0
        public async Task change_user_handler_should_not_be_null()
        {
            var userRepositoryMock = new Mock <IUserRepository>();
            var passwordService    = new Mock <IPasswordService>();
            var userHandler        = new ChangeUserPasswordCommandHandler(userRepositoryMock.Object, passwordService.Object);

            passwordService.Setup(x => x.HashPassword(It.IsAny <string>())).Returns("asdasd");
            userRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Guid>())).ReturnsAsync(
                new EngineeringWork.Core.Domain.User(
                    new Guid(),
                    "asdasd",
                    "aasdasd",
                    "user",
                    "asdasdasdasdasd"
                    )
                );

            var result = await userHandler.Handle(new ChangeUserPasswordCommand()
            {
                CurrentPassword = "******",
                NewPassword     = "******"
            }, new CancellationToken());

            result.Should().NotBeNull();
        }
        public async Task Handler_should_throw_exception_if_dependency_is_null()
        {
            //Arrage

            //Act
            void Act()
            {
                var command = new ChangeUserPasswordCommandHandler(null);
            }

            //Assert
            Assert.Throws <ArgumentNullException>(Act);
        }
        public async Task Handler_should_throw_not_found_exception_if_user_doesnt_exist()
        {
            //Arrange
            _userManagerMock.Setup(x => x.FindByIdAsync(Guid.NewGuid().ToString())).Returns(Task.FromResult <User>(null));
            _userManagerMock.Setup(x => x.Users).Returns(_identityDataContextMock.Object.Users);

            var cancellationToken = new CancellationToken();
            var command           = new ChangeUserPasswordCommand("123", "123", "123");
            var handler           =
                new ChangeUserPasswordCommandHandler(_userManagerMock.Object);

            //Act
            Task Act() => handler.Handle(command, cancellationToken);

            //Assert
            await Assert.ThrowsAsync <UserNotFoundException>(Act);
        }
        public void ChangeUserPasswordCommandHandler_Succeeds()
        {
            var handler = new ChangeUserPasswordCommandHandler(_repository);
            var command = new ChangeUserPasswordCommand("*****@*****.**", "test", "test2");
            var user    = Substitute.For <User>();

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

            _context.Users.Add(user);

            var result = handler.Execute(command);

            result.Success.Should().BeTrue();
            user.Received().ChangePassword("test2");
            user.DidNotReceive().ChangePasswordFailed();
        }
        public void ChangeUserPasswordCommandHandler_Fails_For_Wrong_Password()
        {
            var handler = new ChangeUserPasswordCommandHandler(_repository);
            var command = new ChangeUserPasswordCommand("*****@*****.**", "wrong", "test2");
            var user    = Substitute.For <User>();

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

            _context.Users.Add(user);

            var result = handler.Execute(command);

            result.Errors.Should().HaveCount(1);
            result.Errors[0].Expression.ToString().Should().Be("p => p.CurrentPassword");
            result.Errors[0].Message.Should().Be("Invalid password");
            user.DidNotReceive().ChangePassword(Arg.Any <string>());
            user.Received().ChangePasswordFailed();
        }
        public void ChangeUserPasswordCommandHandler_Throws_Exception_For_Invalid_User()
        {
            var handler = new ChangeUserPasswordCommandHandler(_repository);
            var command = new ChangeUserPasswordCommand("*****@*****.**", "test", "test2");
            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>();
            user.DidNotReceive().ChangePassword(Arg.Any <string>());
            user.DidNotReceive().ChangePasswordFailed();
        }
        public async Task Handler_should_return_true()
        {
            //Arrange
            var fakeUser = new User
            {
                Id = Guid.NewGuid().ToString()
            };

            _userManagerMock.Setup(x => x.FindByIdAsync(fakeUser.Id)).Returns(Task.FromResult(fakeUser));
            _userManagerMock.Setup(x => x.IsInRoleAsync(fakeUser, AuthSettings.Roles.Supervisor))
            .Returns(Task.FromResult(false));

            var cancellationToken = new CancellationToken();
            var command           = new ChangeUserPasswordCommand(fakeUser.Id, "123", "123");
            var handler           =
                new ChangeUserPasswordCommandHandler(_userManagerMock.Object);

            //Act
            var result = await handler.Handle(command, cancellationToken);

            //Assert
            Assert.True(result);
        }
        public async Task Handler_should_throw_unable_to_change_state_exception_if_user_is_supervisor()
        {
            //Arrange
            var fakeUser = new User
            {
                Id = Guid.NewGuid().ToString()
            };


            _userManagerMock.Setup(x => x.FindByIdAsync(fakeUser.Id)).Returns(Task.FromResult(fakeUser));
            _userManagerMock.Setup(x => x.IsInRoleAsync(fakeUser, AuthSettings.Roles.Supervisor))
            .Returns(Task.FromResult(true));

            var cancellationToken = new CancellationToken();
            var command           = new ChangeUserPasswordCommand(fakeUser.Id, "123", "123");
            var handler           =
                new ChangeUserPasswordCommandHandler(_userManagerMock.Object);

            //Act
            Task Act() => handler.Handle(command, cancellationToken);

            //Assert
            await Assert.ThrowsAsync <UserUnableToChangeStateException>(Act);
        }