Skip to content

Commit

Permalink
Refactor UserServiceTest to improve readability and update email send…
Browse files Browse the repository at this point in the history
…ing verification
  • Loading branch information
LeonardoMeireles55 committed Jan 21, 2025
1 parent 72d5168 commit 50f8d9d
Showing 1 changed file with 98 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,85 +27,101 @@
@ExtendWith(MockitoExtension.class)
class UserServiceTest {

@Mock
private UserRepository userRepository;

@Mock
private PasswordRecoveryTokenManager passwordRecoveryTokenManager;

@Mock
private EmailService emailService;

@InjectMocks
private UserService userService;

@Test
void testRecoverPassword_UserExists() {
when(userRepository.existsByUsernameAndEmail(anyString(), anyString())).thenReturn(true);
when(passwordRecoveryTokenManager.generateTemporaryPassword()).thenReturn("tempPassword");

userService.recoverPassword("username", "[email protected]");

verify(passwordRecoveryTokenManager).generateAndStoreToken("[email protected]", "tempPassword");
verify(emailService).sendEmail(any());
}

@Test
void testRecoverPassword_UserDoesNotExist() {
when(userRepository.existsByUsernameAndEmail(anyString(), anyString())).thenReturn(false);

assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class, () -> userService.recoverPassword("username", "[email protected]"));
}

@Test
void testChangePassword_ValidToken() {
User user = new User("username", BCryptEncoderComponent.encrypt("newPassword"), "[email protected]", UserRoles.USER);
when(passwordRecoveryTokenManager.isRecoveryTokenValid(anyString(), anyString())).thenReturn(true);
userService.changePassword("[email protected]", "tempPassword", "newPassword");
assertThat(passwordRecoveryTokenManager.isRecoveryTokenValid("tempPassword", "[email protected]")).isTrue();
}

@Test
void testChangePassword_InvalidToken() {
when(passwordRecoveryTokenManager.isRecoveryTokenValid(anyString(), anyString())).thenReturn(false);

assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class, () -> userService.changePassword("[email protected]", "tempPassword", "newPassword"));
}

@Test
void testSignUp_UserAlreadyExists() {
when(userRepository.existsByEmail(anyString())).thenReturn(true);

assertThrows(CustomGlobalErrorHandling.UserAlreadyExistException.class, () -> userService.signUp("username", "password", "[email protected]"));
}

@Test
void testSignUp_NewUser() {
when(userRepository.existsByEmail(anyString())).thenReturn(false);
when(userRepository.save(any(User.class))).thenReturn(new User("username", "encryptedPassword", "[email protected]", UserRoles.USER));

User user = userService.signUp("username", "password", "[email protected]");

assertNotNull(user);
assertEquals("username", user.getUsername());
assertEquals("[email protected]", user.getEmail());
}

@Test
void should_return_error_with_testUpdateUserPassword_PasswordMatches() {
User user = new User("username", BCryptEncoderComponent.encrypt("newPassword"), "[email protected]", UserRoles.USER);

when(userRepository.getReferenceByUsernameAndEmail(anyString(), anyString())).thenReturn(user);

assertThrows(CustomGlobalErrorHandling.PasswordNotMatchesException.class, () -> userService.updateUserPassword("username", "[email protected]", "oldPassword", "newPassword"));
verify(userRepository, never()).setPasswordWhereByUsername(anyString(), anyString());
}

@Test
void testUpdateUserPassword_PasswordDoesNotMatch() {
User user = new User("username", BCryptEncoderComponent.encrypt("oldPassword"), "[email protected]", UserRoles.USER);
when(userRepository.getReferenceByUsernameAndEmail(anyString(), anyString())).thenReturn(user);

assertThrows(CustomGlobalErrorHandling.PasswordNotMatchesException.class, () -> userService.updateUserPassword("username", "[email protected]", "wrongPassword", "newPassword"));
}
}
@Mock
private UserRepository userRepository;

@Mock
private PasswordRecoveryTokenManager passwordRecoveryTokenManager;

@Mock
private EmailService emailService;

@InjectMocks
private UserService userService;

@Test
void testRecoverPassword_UserExists() {
when(userRepository.existsByUsernameAndEmail(anyString(), anyString())).thenReturn(true);
when(passwordRecoveryTokenManager.generateTemporaryPassword()).thenReturn("tempPassword");

userService.recoverPassword("username", "[email protected]");

verify(passwordRecoveryTokenManager).generateAndStoreToken("[email protected]",
"tempPassword");
verify(emailService).sendPlainTextEmail(any());
}

@Test
void testRecoverPassword_UserDoesNotExist() {
when(userRepository.existsByUsernameAndEmail(anyString(), anyString())).thenReturn(false);

assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class,
() -> userService.recoverPassword("username", "[email protected]"));
}

@Test
void testChangePassword_ValidToken() {
User user = new User("username", BCryptEncoderComponent.encrypt("newPassword"),
"[email protected]", UserRoles.USER);
when(passwordRecoveryTokenManager.isRecoveryTokenValid(anyString(), anyString()))
.thenReturn(true);
userService.changePassword("[email protected]", "tempPassword", "newPassword");
assertThat(passwordRecoveryTokenManager.isRecoveryTokenValid("tempPassword",
"[email protected]")).isTrue();
}

@Test
void testChangePassword_InvalidToken() {
when(passwordRecoveryTokenManager.isRecoveryTokenValid(anyString(), anyString()))
.thenReturn(false);

assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class, () -> userService
.changePassword("[email protected]", "tempPassword", "newPassword"));
}

@Test
void testSignUp_UserAlreadyExists() {
when(userRepository.existsByEmail(anyString())).thenReturn(true);

assertThrows(CustomGlobalErrorHandling.UserAlreadyExistException.class,
() -> userService.signUp("username", "password", "[email protected]"));
}

@Test
void testSignUp_NewUser() {
when(userRepository.existsByEmail(anyString())).thenReturn(false);
when(userRepository.save(any(User.class))).thenReturn(
new User("username", "encryptedPassword", "[email protected]", UserRoles.USER));

User user = userService.signUp("username", "password", "[email protected]");

assertNotNull(user);
assertEquals("username", user.getUsername());
assertEquals("[email protected]", user.getEmail());
}

@Test
void should_return_error_with_testUpdateUserPassword_PasswordMatches() {
User user = new User("username", BCryptEncoderComponent.encrypt("newPassword"),
"[email protected]", UserRoles.USER);

when(userRepository.getReferenceByUsernameAndEmail(anyString(), anyString()))
.thenReturn(user);

assertThrows(CustomGlobalErrorHandling.PasswordNotMatchesException.class, () -> userService
.updateUserPassword("username", "[email protected]", "oldPassword", "newPassword"));
verify(userRepository, never()).setPasswordWhereByUsername(anyString(), anyString());
}

@Test
void testUpdateUserPassword_PasswordDoesNotMatch() {
User user = new User("username", BCryptEncoderComponent.encrypt("oldPassword"),
"[email protected]", UserRoles.USER);
when(userRepository.getReferenceByUsernameAndEmail(anyString(), anyString()))
.thenReturn(user);

assertThrows(CustomGlobalErrorHandling.PasswordNotMatchesException.class,
() -> userService.updateUserPassword("username", "[email protected]",
"wrongPassword", "newPassword"));
}
}

0 comments on commit 50f8d9d

Please sign in to comment.