Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class AuthController {
public ResponseEntity<StandardResponse> kakaoLogin(
@Valid @RequestBody KakaoLoginRequest request) {
TokenResponse response = authFacade.kakaoLogin(request);

return ResponseEntity.ok(StandardResponse.success(HttpStatus.OK.value(), response));
}

Expand All @@ -40,6 +41,7 @@ public ResponseEntity<StandardResponse> kakaoLogin(
public ResponseEntity<StandardResponse> kakaoSignup(
@Valid @RequestBody KakaoSignupRequest request) {
TokenResponse response = authFacade.kakaoSignup(request);

return ResponseEntity.ok(StandardResponse.success(HttpStatus.OK.value(), response));
}

Expand All @@ -48,6 +50,7 @@ public ResponseEntity<StandardResponse> kakaoSignup(
public ResponseEntity<StandardResponse> reissueToken(
@Valid @RequestBody TokenReissueRequest request) {
TokenResponse response = authFacade.reissueToken(request);

return ResponseEntity.ok(StandardResponse.success(HttpStatus.OK.value(), response));
}

Expand All @@ -57,6 +60,7 @@ public ResponseEntity<StandardResponse> reissueToken(
@PostMapping("/logout")
public ResponseEntity<StandardResponse> logout(@Valid @RequestBody LogoutRequest request) {
authFacade.logout(request);

return ResponseEntity.ok(StandardResponse.success(HttpStatus.OK.value(), null));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,14 @@ public Member getMember(Long memberId) {
@Transactional(readOnly = true)
public Member getMemberBySocialProviderAndSocialId(
SocialProvider socialProvider, String socialId) {
return memberRepository
.findBySocialProviderAndSocialId(socialProvider, socialId)
.orElseThrow(() -> new CustomException(MemberErrorCode.MEMBER_NEED_SIGNUP));
Member member =
memberRepository
.findBySocialProviderAndSocialId(socialProvider, socialId)
.orElseThrow(() -> new CustomException(MemberErrorCode.MEMBER_NEED_SIGNUP));

MemberPolicy.validateNotDeleted(member);

return member;
}

@Transactional(readOnly = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.ject.studytrip.auth.helper;

import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;

import com.ject.studytrip.auth.infra.dto.KakaoTokenResponse;
import com.ject.studytrip.auth.infra.dto.KakaoUserInfoResponse;
import com.ject.studytrip.auth.infra.provider.KakaoOauthProvider;
import com.ject.studytrip.global.exception.CustomException;
import com.ject.studytrip.member.domain.error.MemberErrorCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class KakaoOauthTestHelper {
private final KakaoOauthProvider kakaoOauthProvider;

@Autowired
public KakaoOauthTestHelper(KakaoOauthProvider kakaoOauthProvider) {
this.kakaoOauthProvider = kakaoOauthProvider;
}

public void mockSuccess(
KakaoTokenResponse kakaoTokenResponse, KakaoUserInfoResponse kakaoUserInfoResponse) {
given(kakaoOauthProvider.getKakaoTokens(anyString())).willReturn(kakaoTokenResponse);
given(kakaoOauthProvider.getKakaoUserInfo(anyString())).willReturn(kakaoUserInfoResponse);
}

public void mockThrowException(
KakaoTokenResponse kakaoTokenResponse, MemberErrorCode memberErrorCode) {
given(kakaoOauthProvider.getKakaoTokens(anyString())).willReturn(kakaoTokenResponse);
given(kakaoOauthProvider.getKakaoUserInfo(anyString()))
.willThrow(new CustomException(memberErrorCode));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

@Component
public class TokenTestHelper {

private final TokenProvider tokenProvider;

@Autowired
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.ject.studytrip.auth.presentation.controller;

import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

Expand All @@ -10,6 +8,7 @@
import com.ject.studytrip.auth.domain.repository.RefreshTokenRedisRepository;
import com.ject.studytrip.auth.fixture.*;
import com.ject.studytrip.auth.fixture.TokenReissueRequestFixture;
import com.ject.studytrip.auth.helper.KakaoOauthTestHelper;
import com.ject.studytrip.auth.helper.TokenTestHelper;
import com.ject.studytrip.auth.infra.dto.KakaoTokenResponse;
import com.ject.studytrip.auth.infra.dto.KakaoUserInfoResponse;
Expand All @@ -18,7 +17,6 @@
import com.ject.studytrip.auth.presentation.dto.request.KakaoSignupRequest;
import com.ject.studytrip.auth.presentation.dto.request.LogoutRequest;
import com.ject.studytrip.auth.presentation.dto.request.TokenReissueRequest;
import com.ject.studytrip.global.exception.CustomException;
import com.ject.studytrip.global.exception.error.CommonErrorCode;
import com.ject.studytrip.member.domain.error.MemberErrorCode;
import com.ject.studytrip.member.domain.model.Member;
Expand All @@ -40,6 +38,7 @@ class AuthControllerIntegrationTest extends BaseIntegrationTest {

@Autowired private MemberTestHelper memberTestHelper;
@Autowired private TokenTestHelper tokenTestHelper;
@Autowired private KakaoOauthTestHelper kakaoOauthTestHelper;
@Autowired private RefreshTokenRedisRepository refreshTokenRedisRepository;

@MockitoBean KakaoOauthProvider kakaoOauthProvider;
Expand All @@ -55,6 +54,7 @@ void setUp() {
tokenTestHelper.createAccessToken(
member.getId().toString(), member.getRole().name());
refreshToken = tokenTestHelper.createRefreshToken();

long refreshTokenExpirationTime = Duration.ofSeconds(30).getSeconds();
refreshTokenRedisRepository.saveRefreshToken(
member.getId().toString(), refreshToken, refreshTokenExpirationTime);
Expand Down Expand Up @@ -84,10 +84,8 @@ void shouldReturnConflictWhenMemberNotSignUp() throws Exception {
member.updateDeletedAt();
KakaoLoginRequest request = kakaoLoginRequestFixture.build();
KakaoTokenResponse kakaoTokenResponse = kakaoTokenResponseFixture.build();

given(kakaoOauthProvider.getKakaoTokens(anyString())).willReturn(kakaoTokenResponse);
given(kakaoOauthProvider.getKakaoUserInfo(anyString()))
.willThrow(new CustomException(MemberErrorCode.MEMBER_NEED_SIGNUP));
kakaoOauthTestHelper.mockThrowException(
kakaoTokenResponse, MemberErrorCode.MEMBER_NEED_SIGNUP);

// when
ResultActions resultActions = getResultActions(request);
Expand All @@ -107,17 +105,42 @@ void shouldReturnConflictWhenMemberNotSignUp() throws Exception {
.value(MemberErrorCode.MEMBER_NEED_SIGNUP.getMessage()));
}

@Test
@DisplayName("탈퇴한 사용자가 인가 코드로 로그인 시 400 Bad Request를 반환한다.")
void shouldReturnBadRequestWhenMemberAlreadyDeleted() throws Exception {
// given
member.updateDeletedAt();
KakaoLoginRequest request = kakaoLoginRequestFixture.build();
KakaoTokenResponse kakaoTokenResponse = kakaoTokenResponseFixture.build();
kakaoOauthTestHelper.mockThrowException(
kakaoTokenResponse, MemberErrorCode.MEMBER_ALREADY_DELETED);

// when
ResultActions resultActions = getResultActions(request);

// then
resultActions
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.success").value(false))
.andExpect(
jsonPath("$.status")
.value(
MemberErrorCode.MEMBER_ALREADY_DELETED
.getStatus()
.value()))
.andExpect(
jsonPath("$.data.message")
.value(MemberErrorCode.MEMBER_ALREADY_DELETED.getMessage()));
}

@Test
@DisplayName("가입된 사용자의 인가 코드로 로그인하면 토큰이 발급된다.")
void shouldReturnTokenResponseWhenLoginIsSuccessful() throws Exception {
// given
KakaoLoginRequest request = kakaoLoginRequestFixture.build();
KakaoTokenResponse kakaoTokenResponse = kakaoTokenResponseFixture.build();
KakaoUserInfoResponse kakaoUserInfoResponse = kakaoUserInfoResponseFixture.build();

given(kakaoOauthProvider.getKakaoTokens(anyString())).willReturn(kakaoTokenResponse);
given(kakaoOauthProvider.getKakaoUserInfo(anyString()))
.willReturn(kakaoUserInfoResponse);
kakaoOauthTestHelper.mockSuccess(kakaoTokenResponse, kakaoUserInfoResponse);

// when
ResultActions resultActions = getResultActions(request);
Expand Down Expand Up @@ -156,10 +179,7 @@ void shouldThrowExceptionWhenSignupForExistingMember() throws Exception {
KakaoSignupRequest request = kakaoSignupRequestFixture.build();
KakaoTokenResponse kakaoTokenResponse = kakaoTokenResponseFixture.build();
KakaoUserInfoResponse kakaoUserInfoResponse = kakaoUserInfoResponseFixture.build();

given(kakaoOauthProvider.getKakaoTokens(anyString())).willReturn(kakaoTokenResponse);
given(kakaoOauthProvider.getKakaoUserInfo(anyString()))
.willReturn(kakaoUserInfoResponse);
kakaoOauthTestHelper.mockSuccess(kakaoTokenResponse, kakaoUserInfoResponse);

// when
ResultActions resultActions = getResultActions(request);
Expand Down Expand Up @@ -187,10 +207,7 @@ void shouldReturnTokenResponseWhenSignupIsSuccessful() throws Exception {
KakaoSignupRequest request = kakaoSignupRequestFixture.build();
KakaoTokenResponse kakaoTokenResponse = kakaoTokenResponseFixture.build();
KakaoUserInfoResponse kakaoUserInfoResponse = kakaoUserInfoResponseFixture.build();

given(kakaoOauthProvider.getKakaoTokens(anyString())).willReturn(kakaoTokenResponse);
given(kakaoOauthProvider.getKakaoUserInfo(anyString()))
.willReturn(kakaoUserInfoResponse);
kakaoOauthTestHelper.mockSuccess(kakaoTokenResponse, kakaoUserInfoResponse);

// when
ResultActions resultActions = getResultActions(request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,23 @@ void shouldThrowExceptionWhenSocialIdNotFound() {
.hasMessage(MemberErrorCode.MEMBER_NEED_SIGNUP.getMessage());
}

@Test
@DisplayName("탈퇴한 Member라면 예외가 발생한다.")
void shouldThrowExceptionWhenMemberAlreadyDeleted() {
// given
member.updateDeletedAt();
given(memberRepository.findBySocialProviderAndSocialId(SocialProvider.KAKAO, socialId))
.willReturn(Optional.of(member));

// when & then
assertThatThrownBy(
() ->
memberService.getMemberBySocialProviderAndSocialId(
SocialProvider.KAKAO, socialId))
.isInstanceOf(CustomException.class)
.hasMessage(MemberErrorCode.MEMBER_ALREADY_DELETED.getMessage());
}

@Test
@DisplayName("소셜 ID로 조회 시 존재하면 Member를 반환한다.")
void shouldReturnMemberWhenSocialIdExists() {
Expand Down