コード例 #1
0
        public void Should_Return_NotFound_When_Authenticate_With_Incorrect_Email()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepository().Object;
            var hashService        = new HashService();
            var tokenService       = new TokenService(fakeConfig);
            var authService        = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);

            var request = fakes.Get <LoginUserRequest>().First();

            request.Email = "*****@*****.**";

            // Act
            var controller = new AuthController(fakes.Mapper, authService);
            var actual     = controller.Authenticate(request);

            // Assert
            Assert.NotNull(actual);
            Assert.IsType <ObjectResult>(actual.Result);

            var result = actual.Result as ObjectResult;

            Assert.NotNull(result.Value);
            Assert.Equal(404, result.StatusCode); // Not Found
            Assert.IsType <Response>(result.Value);
        }
コード例 #2
0
        public void Should_Return_User_And_Token_When_Authenticate_With_Correct_Credentials()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepository().Object;
            var tokenService       = new TokenService(fakeConfig);
            var hashService        = new HashService();

            var request = fakes.Get <LoginUserRequest>().First();
            var user    = fakes.Get <User>().First();

            var response = new LoginUserResponse();

            response.User      = fakes.Mapper.Map <UserResponse>(user);
            response.ExpiresIn = tokenService.GetExpirationInSeconds();

            // Act
            var service = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);
            var actual  = service.Authenticate(request).Result;
            var data    = actual.Data as LoginUserResponse;

            response.Token = data.Token;  // Should use the generated token for comparison
            var expected = Responses.OkResponse(null, response);

            // Assert
            Assert.IsType <Response>(actual);
            Assert.NotNull(actual);
            Assert.Equal(expected, actual, new LoginUserResponseComparer());
            Assert.True(tokenService.IsValid(data.Token));
        }
コード例 #3
0
        public void Should_Return_User_When_Register_With_Valid_Credentials()
        {
            // Arrange
            var fakes        = new Fakes();
            var fakeConfig   = fakes.FakeConfiguration().Object;
            var tokenService = new TokenService(fakeConfig);
            var hashService  = new HashService();

            var mockUserRepository = fakes.FakeUserRepository();

            // Returns null when GetByEmail is called, so the service doesn't return Conflict.
            mockUserRepository.Setup(x => x.GetByEmail(It.IsAny <string>()))
            .Returns(Task.FromResult <User>(null));
            var fakeUserRepository = mockUserRepository.Object;

            var request = fakes.Get <RegisterUserRequest>().First();
            var user    = fakes.Get <User>().First();

            var response = fakes.Mapper.Map <UserResponse>(user);

            response.Id   = 999;                 // Expected user id
            response.Role = EUserRole.DEVELOPER; // By default, user is created as DEVELOPER

            // Act
            var service = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);
            var actual  = service.Register(request).Result;

            response.CreatedAt = (actual.Data as UserResponse).CreatedAt;
            var expected = Responses.OkResponse(null, response);

            // Assert
            Assert.IsType <Response>(actual);
            Assert.NotNull(actual);
            Assert.Equal(expected, actual, new UserResponseComparer());
        }
コード例 #4
0
        public void Should_Return_BadRequest_When_Register_And_An_Error_Happens()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepositoryException().Object;
            var hashService        = new HashService();
            var tokenService       = new TokenService(fakeConfig);
            var authService        = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);

            var request = fakes.Get <RegisterUserRequest>().First();

            // Act
            var controller = new AuthController(fakes.Mapper, authService);
            var actual     = controller.Register(request);

            // Assert
            Assert.NotNull(actual);
            Assert.IsType <ObjectResult>(actual.Result);

            var result = actual.Result as ObjectResult;

            Assert.NotNull(result.Value);
            Assert.Equal(400, result.StatusCode); // Bad Request
            Assert.IsType <Response>(result.Value);
        }
コード例 #5
0
        public void Should_Return_Ok_When_Register_With_Valid_Credentials()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepository().Object;
            var hashService        = new HashService();
            var tokenService       = new TokenService(fakeConfig);
            var authService        = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);

            var request = fakes.Get <RegisterUserRequest>().First();

            request.Email = "*****@*****.**"; // Email that doesn't exist

            // Act
            var controller = new AuthController(fakes.Mapper, authService);
            var actual     = controller.Register(request);

            // Assert
            Assert.NotNull(actual);
            Assert.IsType <ObjectResult>(actual.Result);

            var result = actual.Result as ObjectResult;

            Assert.NotNull(result.Value);
            Assert.Equal(200, result.StatusCode); // Ok
            Assert.IsType <Response>(result.Value);
        }
コード例 #6
0
        public void Should_Return_True_When_IsValid_With_Valid_Token()
        {
            // Arrange
            var fakes      = new Fakes();
            var fakeConfig = fakes.FakeConfiguration().Object;
            var user       = fakes.Get <User>().First();

            // Act
            var service = new TokenService(fakeConfig);
            var token   = service.GenerateToken(user);
            var valid   = service.IsValid(token);

            // Assert
            Assert.True(valid);
        }
コード例 #7
0
        public void Should_Return_Valid_Token_When_GenerateToken()
        {
            // Arrange
            var fakes      = new Fakes();
            var fakeConfig = fakes.FakeConfiguration().Object;
            var user       = fakes.Get <User>().First();

            // Act
            var service = new TokenService(fakeConfig);
            var token   = service.GenerateToken(user);

            // Assert
            Assert.NotNull(token);
            Assert.IsType <string>(token);
            Assert.True(service.IsValid(token));
        }
コード例 #8
0
        public void Should_Return_False_When_IsValid_With_Invalid_Token()
        {
            // Arrange
            var fakes      = new Fakes();
            var fakeConfig = fakes.FakeConfiguration().Object;
            // Token with invalid signing key, without id and role claims
            var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIx" +
                        "MjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iO" +
                        "nRydWUsImp0aSI6ImVhNzYwZjNhLTNmYTUtNDZlMy1hNWQ2LWJ" +
                        "iOGNkOGYyMzU4YiIsImlhdCI6MTU5NTM4NjE2MywiZXhwIjoxNT" +
                        "k1Mzg5NzYzfQ.6D4sYkKj_e7y2VVR3uvyFiRVr6Qd8Io42ApXR5jZiuY";

            // Act
            var service = new TokenService(fakeConfig);
            var valid   = service.IsValid(token);

            // Assert
            Assert.False(valid);
        }
コード例 #9
0
        public void Should_Return_Conflict_When_Register_With_Email_Already_In_Use()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepository().Object;
            var tokenService       = new TokenService(fakeConfig);
            var hashService        = new HashService();

            var request  = fakes.Get <RegisterUserRequest>().First();
            var expected = Responses.ConflictResponse("Esse email já está sendo utilizado");

            // Act
            var service = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);
            var actual  = service.Register(request).Result;

            // Assert
            Assert.IsType <Response>(actual);
            Assert.NotNull(actual);
            Assert.Equal(expected, actual, new ResponseComparer());
        }
コード例 #10
0
        public void Should_Return_BadRequest_When_Register_And_Exception_Is_Thrown()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepositoryException().Object;
            var tokenService       = new TokenService(fakeConfig);
            var hashService        = new HashService();

            var request  = fakes.Get <RegisterUserRequest>().First();
            var expected = Responses.BadRequestResponse("Test Exception");

            // Act
            var service = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);
            var actual  = service.Register(request).Result;

            // Assert
            Assert.ThrowsAnyAsync <Exception>(() => service.Register(request));
            Assert.IsType <Response>(actual);
            Assert.NotNull(actual);
            Assert.Equal(expected, actual, new ResponseComparer());
        }
コード例 #11
0
        public void Should_Return_NotFound_When_Authenticate_With_Incorrect_Email()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepository().Object;
            var tokenService       = new TokenService(fakeConfig);
            var hashService        = new HashService();

            var request = fakes.Get <LoginUserRequest>().First();

            request.Email = "*****@*****.**";  // Email that doesn't exists in test data
            var expected = Responses.NotFoundResponse("Usuário não encontrado");

            // Act
            var service = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);
            var actual  = service.Authenticate(request).Result;

            // Assert
            Assert.IsType <Response>(actual);
            Assert.NotNull(actual);
            Assert.Equal(expected, actual, new ResponseComparer());
        }
コード例 #12
0
        public void Should_Return_Forbidden_When_Authenticate_With_Incorrect_Password()
        {
            // Arrange
            var fakes              = new Fakes();
            var fakeConfig         = fakes.FakeConfiguration().Object;
            var fakeUserRepository = fakes.FakeUserRepository().Object;
            var tokenService       = new TokenService(fakeConfig);
            var hashService        = new HashService();

            var request = fakes.Get <LoginUserRequest>().First();

            request.Password = "******";  // Incorrect password
            var expected = Responses.ForbiddenResponse("Email ou senha incorretos");

            // Act
            var service = new AuthService(fakes.Mapper, fakeUserRepository, tokenService, hashService);
            var actual  = service.Authenticate(request).Result;

            // Assert
            Assert.IsType <Response>(actual);
            Assert.NotNull(actual);
            Assert.Equal(expected, actual, new ResponseComparer());
        }