|
6 | 6 | import com.ai.lawyer.domain.member.exception.MemberAuthenticationException; |
7 | 7 | import com.ai.lawyer.domain.member.exception.MemberExceptionHandler; |
8 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; |
9 | | -import jakarta.servlet.http.Cookie; |
10 | | -import jakarta.servlet.http.HttpServletRequest; |
11 | 9 | import jakarta.servlet.http.HttpServletResponse; |
12 | 10 | import org.junit.jupiter.api.BeforeEach; |
13 | 11 | import org.junit.jupiter.api.DisplayName; |
@@ -47,9 +45,6 @@ class MemberControllerTest { |
47 | 45 | @Mock |
48 | 46 | private MemberService memberService; |
49 | 47 |
|
50 | | - @Mock |
51 | | - private HttpServletRequest request; |
52 | | - |
53 | 48 | @Mock |
54 | 49 | private HttpServletResponse response; |
55 | 50 |
|
@@ -247,56 +242,51 @@ void logout_Success_Unauthenticated() { |
247 | 242 | } |
248 | 243 |
|
249 | 244 | @Test |
250 | | - @DisplayName("토큰 재발급 성공 - 쿠키에서 Refresh Token 추출하여 Redis 검증") |
| 245 | + @DisplayName("토큰 재발급 성공 - Authentication 기반") |
251 | 246 | void refreshToken_Success() { |
252 | 247 | // given |
253 | | - Cookie[] cookies = {new Cookie("refreshToken", "validRefreshToken")}; |
254 | | - given(request.getCookies()).willReturn(cookies); |
255 | | - given(memberService.refreshToken(eq("validRefreshToken"), eq(response))) |
256 | | - .willReturn(memberResponse); |
| 248 | + Long memberId = 1L; |
| 249 | + Authentication testAuth = new UsernamePasswordAuthenticationToken( |
| 250 | + memberId, |
| 251 | + null, |
| 252 | + List.of(new SimpleGrantedAuthority("ROLE_USER")) |
| 253 | + ); |
| 254 | + given(memberService.getMemberById(memberId)).willReturn(memberResponse); |
257 | 255 |
|
258 | 256 | // when |
259 | | - ResponseEntity<MemberResponse> result = memberController.refreshToken(request, response); |
| 257 | + ResponseEntity<MemberResponse> result = memberController.refreshToken(testAuth); |
260 | 258 |
|
261 | 259 | // then |
262 | 260 | assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); |
263 | 261 | assertThat(result.getBody()).isEqualTo(memberResponse); |
264 | | - |
265 | | - // 쿠키에서 refreshToken이 정상적으로 추출되어 서비스에 전달되는지 검증 |
266 | | - verify(memberService).refreshToken(eq("validRefreshToken"), eq(response)); |
| 262 | + verify(memberService).getMemberById(memberId); |
267 | 263 | } |
268 | 264 |
|
269 | 265 | @Test |
270 | | - @DisplayName("토큰 재발급 실패 - 리프레시 토큰 없음") |
271 | | - void refreshToken_Fail_NoRefreshToken() { |
272 | | - // given |
273 | | - given(request.getCookies()).willReturn(null); |
| 266 | + @DisplayName("토큰 재발급 실패 - 인증 정보 없음") |
| 267 | + void refreshToken_Fail_NoAuthentication() { |
| 268 | + // given - authentication이 null인 경우 |
274 | 269 |
|
275 | | - // when & then - 예외가 발생해야 함 |
276 | | - try { |
277 | | - memberController.refreshToken(request, response); |
278 | | - } catch (MemberAuthenticationException e) { |
279 | | - assertThat(e.getMessage()).isEqualTo("리프레시 토큰이 없습니다."); |
280 | | - } |
281 | | - |
282 | | - verify(memberService, never()).refreshToken(anyString(), any()); |
| 270 | + // when & then |
| 271 | + assertThatThrownBy(() -> memberController.refreshToken(null)) |
| 272 | + .isInstanceOf(MemberAuthenticationException.class) |
| 273 | + .hasMessage("인증이 필요합니다."); |
283 | 274 | } |
284 | 275 |
|
285 | 276 | @Test |
286 | | - @DisplayName("토큰 재발급 실패 - 유효하지 않은 토큰") |
287 | | - void refreshToken_Fail_InvalidToken() { |
| 277 | + @DisplayName("토큰 재발급 실패 - Principal 없음") |
| 278 | + void refreshToken_Fail_NoPrincipal() { |
288 | 279 | // given |
289 | | - Cookie[] cookies = {new Cookie("refreshToken", "invalidRefreshToken")}; |
290 | | - given(request.getCookies()).willReturn(cookies); |
291 | | - given(memberService.refreshToken(eq("invalidRefreshToken"), eq(response))) |
292 | | - .willThrow(new IllegalArgumentException("유효하지 않은 리프레시 토큰입니다.")); |
| 280 | + Authentication testAuth = new UsernamePasswordAuthenticationToken( |
| 281 | + null, |
| 282 | + null, |
| 283 | + List.of(new SimpleGrantedAuthority("ROLE_USER")) |
| 284 | + ); |
293 | 285 |
|
294 | 286 | // when & then |
295 | | - assertThatThrownBy(() -> memberController.refreshToken(request, response)) |
296 | | - .isInstanceOf(IllegalArgumentException.class) |
297 | | - .hasMessage("유효하지 않은 리프레시 토큰입니다."); |
298 | | - |
299 | | - verify(memberService).refreshToken(eq("invalidRefreshToken"), eq(response)); |
| 287 | + assertThatThrownBy(() -> memberController.refreshToken(testAuth)) |
| 288 | + .isInstanceOf(MemberAuthenticationException.class) |
| 289 | + .hasMessage("인증이 필요합니다."); |
300 | 290 | } |
301 | 291 |
|
302 | 292 | @Test |
|
0 commit comments