Я только начал писать тесты для своего проекта Spring Boot.
@Test
public void updatePassword_SetNewPasswordForQuizUser() throws QuizUserNotFoundException {
QuizUser oldQuizUser = this.quizUserService.getQuizUserId("SmitShah");
System.out.println(oldQuizUser);
QuizUser updated = new QuizUser("SmitShah", "SmitPassword2",
true, false, false,
"");
QuizUser updatedQuizUser = this.quizUserService.updateQuizUser(updated);
System.out.println(updatedQuizUser);
assertThat(updatedQuizUser.getPassword()).isNotEqualTo(oldQuizUser.getPassword());
}
oldQuizUser
в моем тесте содержит:
new QuizUser("SmitShah", "SmitPassword", true, false, false, "");
Вывод oldQuizUser
содержит:
QuizUser{QuizUserId='SmitShah', Password='SmitPassword', IsAdmin=true, IsActive=false, IsOnline=false, Avatar='', createDateTime=null}
После вызова метода updateQuizUser()
вывод updatedQuizUser
содержит:
QuizUser{QuizUserId='SmitShah', Password='$2a$10$fuVy.orndbmsgRQJptH5Se9iTTTI9EBhakwMFgmFrPqVdtcKCIPHq', IsAdmin=true, IsActive=false, IsOnline=false, Avatar='', createDateTime=null}
Как видите, oldQuizUser
содержит открытый текстовый пароль, а updatedQuizUser
содержит хешированный пароль.
Однако утверждение в конце моего теста не удается. После отладки кажется, что после запуска updateQuizUser()
значение oldQuizUser
меняется на обновленное.
Почему это происходит?
Это соответствующие части из QuizUserService
, которые вызываются в ходе теста:
@Override
public QuizUser updateQuizUser(QuizUser user) throws QuizUserNotFoundException {
if(this.quizUserRespository.findById(user.getQuizUserId()).isPresent()) {
QuizUser oldUser = this.quizUserRespository.findById(user.getQuizUserId()).get();
if (user.getAvatar() != null) oldUser.setAvatar(user.getAvatar());
if (user.getPassword() != null) oldUser.setPassword(pe.encode(user.getPassword()));
if (user.isAdmin()) oldUser.setAdmin(user.isAdmin());
this.quizUserRespository.save(oldUser);
return oldUser;
}
else{
throw new QuizUserNotFoundException();
}
}
@Override
public QuizUser getQuizUserId(String id) throws QuizUserNotFoundException {
if(this.quizUserRespository.findById(id).isPresent()){
return this.quizUserRespository.findById(id).get();
}
else{
throw new QuizUserNotFoundException();
}
}