
이번 글에서는 이때까지 구현한 JWT 관련 코드를 테스트해볼텐데요, 먼저 JwtProcess의 create() 매서드를 테스트해보겠습니다.

먼저 Member 객체를 생성합니다. 이 때, id와 role에만 데이터를 넣었는데, JWT를 생성하기 위해서는 id와 role을 claim에 넣어야 하기 때문입니다. 그리고 만든 Member 객체를 가지고 UserDetails 객체를 만듭니다. 그리고 UserDetails를 파라미터로 넣고 create() 매서드로 토큰을 생성합니다. 토큰은 매 생성마다 그 값이 달라져 토큰 전체를 검증할 수 없기 때문에 토큰이 담길 헤더의 Authorization의 값이 "Bearer"로 시작하는 지를 테스트합니다.
그리고 verify() 매서드를 검증해볼텐데 방법은 위와 동일합니다.

위 테스트로 발급된 토큰에서 맨 앞의 "Bearer"을 제거한 나머지 부분을 문자열로 받습니다. 그리고 그걸 verify() 매서드의 파라미터에 담아 UserDetails 객체를 반환합니다. 그리고 이 반환된 객체가 위의 테스트에 사용된 객체가 맞는지 검증합니다. 두 테스트 모두 정상적으로 성공했습니다.
그런 다음 로그인 성공 테스트를 진행해보겠습니다.

@BeforEach 어노테이션을 이용해 테스트 전에 더미 데이터를 하나 생성해줍니다. 그리고 매 테스트가 끝나면 트랜잭션이 롤백되도록 테스트 클래스에 @Transactional 어노테이션도 붙여줬습니다. 테스트 환경에서는 @Transactional의 디폴트 값은 Rollback입니다.
- 로그인 요청 Dto 객체를 생성해 데이터를 넣습니다.
- 객체를 JSON 문자열로 변환합니다.
- MockMvc를 통해 api 요청을 보내고, 응답의 Header 중 "Authorizaion" 키의 값을 jwtToken으로 받습니다.
- Http 상태코드와 jwtToken을 검증합니다.
로그인 실패 테스트도 해볼텐데 간단합니다.

마찬가지로 @BeforeEach를 통해 객체가 하나 생성될테고, 그 객체의 정보로 로그인합니다.
- 로그인 요청 Dto 객체를 올바르지 않은 생성해 데이터를 넣습니다.
- 객체를 JSON 문자열로 변환합니다.
- MockMvc를 통해 api 요청을 보내지만, 올바른 요청이 아님을 알기 때문에 요청의 응답이 isUnautorizaed()임을 확인합니다.