예제 #1
0
        public async Task AddUserAsync_WhenAllInformationIsCorrect_ShouldReturnUserWithToken(string name, string email, string password)
        {
            var sutBuilder   = new UserServiceSutBuilder();
            var loginDetails = sutBuilder.CreateLoginDetails(email: email, password: password);
            var user2        = new CreateNewUser
            {
                Email    = email,
                Name     = name,
                Password = password,
            };
            var user        = user2.ToUser();
            var userService = sutBuilder.CreateSut();

            A.CallTo(() => sutBuilder.UserRepository.GetByEmailAndPasswordAsync(email, Hasher.GetHashed(password)))
            .Returns(user);

            A.CallTo(() => sutBuilder.UserRepository.AddAsync(A <User> .That.Matches(passedUser => passedUser.Name == user.Name &&
                                                                                     passedUser.Password == Hasher.GetHashed(user.Password) &&
                                                                                     passedUser.Email == user.Email)))
            .Returns(user);

            //Act
            var resultLogin = await userService.AddUserAsync(user2);

            //Assert
            resultLogin.Name.ShouldBe(name);
            resultLogin.Email.ShouldBe(email);
        }
예제 #2
0
        public void LoginAsync_WhenLoginDetailsAreIncorrect_ShouldThrow(string name, string email, string password)
        {
            //Arrange
            var sutBuilder   = new UserServiceSutBuilder();
            var user         = sutBuilder.CreateUser(name: name, email: email, password: password);
            var loginDetails = sutBuilder.CreateLoginDetails(email: email, password: password);
            var userService  = sutBuilder.CreateSut();

            //Act & Assert
            var exception = Assert.ThrowsAsync <ValidationException>(async() => await userService.LoginAsync(loginDetails));
        }
예제 #3
0
        public async Task LoginAsync_WhenLoginDetailsAreCorrect_ShouldLoginUser(string name, string email, string password)
        {
            //Arrange
            var sutBuilder   = new UserServiceSutBuilder();
            var user         = sutBuilder.CreateUser(name: name, email: email, password: password);
            var loginDetails = sutBuilder.CreateLoginDetails(email: email, password: password);
            var userService  = sutBuilder.CreateSut();

            A.CallTo(() => sutBuilder.UserRepository.GetByEmailAndPasswordAsync(email, A <string> ._))
            .Returns(user);

            //Act
            var resultLogin = await userService.LoginAsync(loginDetails);

            //Assert
            resultLogin.Name.ShouldBe(name);
            resultLogin.Email.ShouldBe(email);
        }
예제 #4
0
        public void LoginAsync_WhenUserDoesNotExist_ShouldThrow(string name, string email, string password)
        {
            //Arrange
            var sutBuilder   = new UserServiceSutBuilder();
            var user         = sutBuilder.CreateUser(name: name, email: "*****@*****.**", password: password);
            var loginDetails = sutBuilder.CreateLoginDetails(email: email, password: password);
            var userService  = sutBuilder.CreateSut();

            A.CallTo(() => sutBuilder.UserRepository.GetByIdAsync(user.Id))
            .Returns <User?>(null);

            A.CallTo(() => sutBuilder.UserRepository.GetByEmailAndPasswordAsync(email, A <string> ._))
            .Returns <User?>(null);

            //Act & Assert
            var exception = Assert.ThrowsAsync <UnauthorizedException>(async() => await userService.LoginAsync(loginDetails));

            exception.Message.ShouldBe($"Username or password is incorrect");
        }