회원 가입 : 인증 메일 확인 테스트 및 리팩토링
테스트
> 입력값이 잘못 된 경우
>> error 프로퍼티가 model에 들어있는지 확인
>> 뷰 이름이 account/checked-email인지 확인
> 입력값이 올바른 경우
>> 모델에 error가 없는지 확인
>> 모델에 numberOfUser가 있는지 확인
>> 모델에 nickname이 있는지 확인
>> 뷰 이름 확인
리팩토링
> 코드의 위치가 적절한가?
test코드 작성
@Transactional
@SpringBootTest
@AutoConfigureMockMvc
class AccountControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private AccountRepository accountRepository;
@MockBean
JavaMailSender javaMailSender;
@DisplayName("인증 메일 확인 - 입력값 오류")
@Test
public void checkedEmailToken_with_wrong_input() throws Exception{
mockMvc.perform(get("/check-email-token")
.param("token" , "asdafasd")
.param("email", "email@email.com"))
.andExpect(status().isOk())
.andExpect(model().attributeExists("error"))
.andExpect(view().name("account/checked-email"));
}
@DisplayName("인증 메일 확인 - 입력값 정상")
@Test
public void checkedEmailToken() throws Exception{
//given
Account account = Account.builder()
.email("test@email.com")
.password("12345678")
.nickname("loosie")
.build();
Account newAccount = accountRepository.save(account);
newAccount.generateEmailCheckToken();
//여기도 @Transactional없으면 token null값 발생
//then
mockMvc.perform(get("/check-email-token")
.param("token" , newAccount.getEmailCheckToken())
.param("email", newAccount.getEmail() ))
.andExpect(status().isOk())
.andExpect(model().attributeDoesNotExist("error"))
.andExpect(model().attributeExists("nickname"))
.andExpect(model().attributeExists("numberOfUser"))
.andExpect(view().name("account/checked-email"));
}
}
백엔드 코드 리팩토링
AccountController.class
@Slf4j
@Controller
@RequiredArgsConstructor
public class AccountController {
...
@GetMapping("/check-email-token")
public String checkEmailToken(String token, String email, Model model){
...
//리팩토링
account.completeSignUp();
// account.setEmailVerified(true);
// account.setJoinedAt(LocalDateTime.now());
model.addAttribute("numberOfUser", accountRepository.count());
model.addAttribute("nickname", account.getNickname());
return view;
}
}
Account.class
@Entity
@Getter @Setter
@EqualsAndHashCode(of ="id")
@Builder @AllArgsConstructor @NoArgsConstructor
public class Account {
...
public void completeSignUp() {
this.emailVerified = true;
this.joinedAt = LocalDateTime.now();
}
}
참고
'Dot Programming > Spring Clone' 카테고리의 다른 글
[스프링 웹앱 프로젝트 #12] 회원 가입 메인 네비게이션 메뉴 (0) | 2020.11.27 |
---|---|
[스프링 웹앱 프로젝트 #11]회원 가입 완료 후 자동 로그인 (0) | 2020.11.26 |
[스프링 웹앱 프로젝트 #9]회원 가입 인증 메일 확인 (0) | 2020.11.19 |
[스프링 웹앱 프로젝트 #8]회원 가입 패스워드 인코딩 (0) | 2020.11.19 |
[스프링 웹앱 프로젝트 #7]회원가입 : 리팩토링 및 테스트 (0) | 2020.11.18 |