출처
www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-JPA-%EC%9B%B9%EC%95%B1/dashboard
github.com/devjun63/whiteship-studyolle/commit/38ef4acc4bca22260348d00e9314ce31be729de1
테스트
- 입력값이 잘못 된 경우
- error 프로퍼티가 model에 들어있는지 확인
- 뷰 이름이 account/checked-email 인지 확인
- 입력 값이 올바른 경우
- 모델에 error가 없는지 확인
- 모델에 numberOfUser가 있는지 확인
- 모델에 nickname이 있는지 확인
- 뷰 이름 확인
- 리팩토링
- 코드의 위치가 적절한가?
입력값이 잘못 된 경우
@DisplayName("인증 메일 확인 - 입력값 오류")
@Test //Junit5
void checkEmailToken_with_wrong_input() throws Exception {
mockMvc.perform(get("/check-email-token")
.param("token","ajioasdfj")
.param("email","email@email.com"))
.andExpect(status().isOk())
.andExpect(model().attributeExists("error"))
.andExpect(view().name("account/checked-email"));
}
입력 값이 올바른 경우
@DisplayName("인증 메일 확인 - 입력값 정상")
@Test //Junit5
void checkEmailToken() throws Exception {
Account account = Account.builder()
.email("test@email.com")
.password("12345678")
.nickname("devjun")
.build();
Account testAccount = accountRepository.save(account);
testAccount.generateEmailCheckToken();
mockMvc.perform(get("/check-email-token")
.param("token",testAccount.getEmailCheckToken())
.param("email",testAccount.getEmail()))
.andExpect(status().isOk())
.andExpect(model().attributeDoesNotExist("error"))
.andExpect(model().attributeExists("nickname"))
.andExpect(model().attributeExists("numberOfUser"))
.andExpect(view().name("account/checked-email"));
}
-> token이 account객체에 담기지 않는데 이는 전 강의와 마찬가지로
jpa의 영속성상태가 persist가 아닌 detach상태여서
테스트에서도 트랜잭션 어노테이션을 추가해 줘야 하기 때문이다.
@Transactional // 어노테이션 추가
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureMockMvc
class AccountControllerTest {
리팩토링
AccountController에서 checkEmailToken{
......
account.setEmailVerified(true);
account.setJoinedAt(LocalDateTime.now());
model.addAttribute("numberOfUser", accountRepository.count());
model.addAttribute("nickname", account.getNickname());
}
->
AccountController에서 checkEmailToken{
......
account.completeSignup();
model.addAttribute("numberOfUser", accountRepository.count());
model.addAttribute("nickname", account.getNickname());
}
Account 클래스 {
public void completeSignup() {
this.emailVerified = true;
this.joinedAt = LocalDateTime.now();
}
}
'프로젝트 정리 > 스프링과 JPA 기반 웹 애플리케이션 개발' 카테고리의 다른 글
13. 회원가입: 메인 네비게이션 메뉴 변경 (0) | 2021.03.04 |
---|---|
12. 회원 가입: 가입 완료 후 자동 로그인 (0) | 2021.02.25 |
10. 회원 가입: 인증 메일 확인 (0) | 2021.02.24 |
9. 회원 가입: 패스워드 인코더 (0) | 2021.02.24 |
7. 회원 가입 : 리팩토링 및 테스트 (0) | 2021.02.19 |