코딩하는 털보

11 to 9, Day 8 본문

Diary/Eleven to Nine

11 to 9, Day 8

이정인 2021. 3. 5. 16:30

11 to 9, Day 8

Today, ToDoList

  • 자바 라이브 스터디

    • 14주차 다시보기
    • 15주차 공부하기
  • Toy Project - NGMA

    • 예외 처리 추가

15주차 공부

작성 후 포스팅 완료~

https://rockintuna.tistory.com/107


예외 처리 추가

    @Test
    @WithUserDetails(value = "jilee@example.com", setupBefore = TestExecutionEvent.TEST_EXECUTION)
    public void pick() throws Exception {

        mvc.perform(post("/pick")
                .param("email", "sjlee123@example.com"))
                .andDo(print())
                .andExpect(status().is3xxRedirection());
    }
    @PostMapping("/pick")
    public String pick(@AuthenticationPrincipal UserAccount userAccount,
                                  @ModelAttribute AccountDto accountDto) {
        Account lover = accountService.getUserByEmail(accountDto.getEmail());

        accountService.pickLover(userAccount.getAccount(), lover);
        return "redirect:/login";
    }

위 테스트에서 401 Unauthorized 가 계속 발생해서 혹시 인증에 관련된 문제가 있나 한참을 확인 하다가,

    public Account getUserByEmail(String email) {
        return accountRepository.findByEmail(email)
                .orElseThrow(() -> new UsernameNotFoundException(email));
    }

디버거에서 확인한 결과 getUserByEmail() 에서 UsernameNotFoundException으로 예외 처리 되고 있었던거임~

근데 UsernameNotFoundException가 401로 반환되는건 처음알았다.. 응답 바디에는 아무것두 없공...

그래서 다음에도 혼란이 올까봐 ExceptionHandler 추가함

    @ExceptionHandler
    public ResponseEntity<?> usernameNotFoundException(UsernameNotFoundException exception) {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Email address not founded.");
    }

테스트 코드도 맞게 변경

@Test
@WithUserDetails(value = "jilee@example.com", setupBefore = TestExecutionEvent.TEST_EXECUTION)
public void pickNotExistAccount() throws Exception {

    mvc.perform(post("/pick")
            .param("email", "sjlee123@example.com"))
            .andDo(print())
            .andExpect(status().isUnauthorized())
            .andExpect(content().string("Email address not founded."));
}
Comments