diff --git a/src/main/java/com/somemore/domains/volunteer/controller/VolunteerSignController.java b/src/main/java/com/somemore/domains/volunteer/controller/VolunteerSignController.java index 42fb71abf..0373acc2b 100644 --- a/src/main/java/com/somemore/domains/volunteer/controller/VolunteerSignController.java +++ b/src/main/java/com/somemore/domains/volunteer/controller/VolunteerSignController.java @@ -1,9 +1,8 @@ package com.somemore.domains.volunteer.controller; import com.somemore.domains.volunteer.usecase.GenerateOAuthUrlUseCase; -import com.somemore.global.common.response.ApiResponse; -import com.somemore.global.exception.BadRequestException; import com.somemore.global.auth.signout.usecase.SignOutUseCase; +import com.somemore.global.common.response.ApiResponse; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; @@ -32,11 +31,7 @@ public RedirectView signIn( @Parameter(name = "oauthProvider", description = "OAuth 제공자 선택", example = "naver", required = true, schema = @Schema(allowableValues = {"naver"})) @PathVariable("oauthProvider") String oauthProvider) { - String redirectUrl = switch (oauthProvider.toLowerCase()) { - case "naver" -> generateOAuthUrlUseCase.generateUrl(oauthProvider); - - default -> throw new BadRequestException("지원되지 않는 OAuth 제공자: " + oauthProvider); - }; + String redirectUrl = generateOAuthUrlUseCase.generateUrl(oauthProvider); return new RedirectView(redirectUrl); } diff --git a/src/main/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlService.java b/src/main/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlService.java index 7963b82e0..ffb0dd755 100644 --- a/src/main/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlService.java +++ b/src/main/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlService.java @@ -1,6 +1,7 @@ package com.somemore.domains.volunteer.service; import com.somemore.domains.volunteer.usecase.GenerateOAuthUrlUseCase; +import com.somemore.global.auth.oauth.domain.OAuthProvider; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -18,7 +19,7 @@ public class GenerateOAuthUrlService implements GenerateOAuthUrlUseCase { @Override public String generateUrl(String oAuthProvider) { return UriComponentsBuilder.fromHttpUrl(generateBaseUrl()) - .pathSegment(oAuthProvider) + .pathSegment(OAuthProvider.from(oAuthProvider).getProviderName()) .build() .toUriString(); } diff --git a/src/main/java/com/somemore/global/auth/oauth/config/OAuth2Config.java b/src/main/java/com/somemore/global/auth/oauth/config/OAuth2Config.java new file mode 100644 index 000000000..539f7306f --- /dev/null +++ b/src/main/java/com/somemore/global/auth/oauth/config/OAuth2Config.java @@ -0,0 +1,14 @@ +package com.somemore.global.auth.oauth.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; + +@Configuration +public class OAuth2Config { + + @Bean + public DefaultOAuth2UserService defaultOAuth2UserService() { + return new DefaultOAuth2UserService(); + } +} diff --git a/src/main/java/com/somemore/global/auth/oauth/converter/NaverOAuthResponseConverter.java b/src/main/java/com/somemore/global/auth/oauth/converter/NaverOAuthResponseConverter.java deleted file mode 100644 index a3d68acb3..000000000 --- a/src/main/java/com/somemore/global/auth/oauth/converter/NaverOAuthResponseConverter.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.somemore.global.auth.oauth.converter; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.somemore.global.auth.oauth.domain.CommonOAuthInfo; -import com.somemore.global.auth.oauth.domain.OAuthProvider; -import com.somemore.global.auth.oauth.naver.dto.NaverUserProfileResponseDto; -import org.springframework.security.oauth2.core.user.OAuth2User; -import org.springframework.stereotype.Component; - -@Component -public class NaverOAuthResponseConverter implements OAuthResponseConverter { - - @Override - public CommonOAuthInfo convert(OAuth2User oAuth2User) { - NaverUserProfileResponseDto naverUserProfileResponseDto = new ObjectMapper().convertValue(oAuth2User.getAttributes(), NaverUserProfileResponseDto.class); - - return new CommonOAuthInfo( - OAuthProvider.NAVER, - naverUserProfileResponseDto.response().id()); - } -} diff --git a/src/main/java/com/somemore/global/auth/oauth/converter/OAuthResponseConverter.java b/src/main/java/com/somemore/global/auth/oauth/converter/OAuthResponseConverter.java index 765774a59..718740d14 100644 --- a/src/main/java/com/somemore/global/auth/oauth/converter/OAuthResponseConverter.java +++ b/src/main/java/com/somemore/global/auth/oauth/converter/OAuthResponseConverter.java @@ -1,8 +1,8 @@ package com.somemore.global.auth.oauth.converter; import com.somemore.global.auth.oauth.domain.CommonOAuthInfo; -import org.springframework.security.oauth2.core.user.OAuth2User; +import com.somemore.global.auth.oauth.domain.CustomOAuth2User; public interface OAuthResponseConverter { - CommonOAuthInfo convert(OAuth2User oAuth2User); + CommonOAuthInfo convert(CustomOAuth2User oAuth2User); } diff --git a/src/main/java/com/somemore/global/auth/oauth/converter/OAuthResponseConverterImpl.java b/src/main/java/com/somemore/global/auth/oauth/converter/OAuthResponseConverterImpl.java new file mode 100644 index 000000000..a5cb8bb35 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/oauth/converter/OAuthResponseConverterImpl.java @@ -0,0 +1,44 @@ +package com.somemore.global.auth.oauth.converter; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.somemore.global.auth.oauth.domain.CommonOAuthInfo; +import com.somemore.global.auth.oauth.domain.CustomOAuth2User; +import com.somemore.global.auth.oauth.domain.OAuthProvider; +import com.somemore.global.auth.oauth.dto.KakaoUserProfileResponseDto; +import com.somemore.global.auth.oauth.dto.NaverUserProfileResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class OAuthResponseConverterImpl implements OAuthResponseConverter { + + private final ObjectMapper objectMapper; + + @Override + public CommonOAuthInfo convert(CustomOAuth2User oAuth2User) { + OAuthProvider provider = oAuth2User.getProvider(); + switch (provider) { + case KAKAO: + KakaoUserProfileResponseDto kakaoUserProfile = objectMapper.convertValue( + oAuth2User.getAttributes(), + KakaoUserProfileResponseDto.class + ); + return CommonOAuthInfo.of( + OAuthProvider.KAKAO, + kakaoUserProfile.id() + ); + case NAVER: + NaverUserProfileResponseDto naverUserProfile = objectMapper.convertValue( + oAuth2User.getAttributes(), + NaverUserProfileResponseDto.class + ); + return CommonOAuthInfo.of( + OAuthProvider.NAVER, + naverUserProfile.response().id() + ); + default: + throw new IllegalArgumentException("지원하지 않는 OAuth Provider입니다."); + } + } +} diff --git a/src/main/java/com/somemore/global/auth/oauth/domain/CommonOAuthInfo.java b/src/main/java/com/somemore/global/auth/oauth/domain/CommonOAuthInfo.java index 440ec9674..fe437f217 100644 --- a/src/main/java/com/somemore/global/auth/oauth/domain/CommonOAuthInfo.java +++ b/src/main/java/com/somemore/global/auth/oauth/domain/CommonOAuthInfo.java @@ -3,4 +3,8 @@ public record CommonOAuthInfo( OAuthProvider provider, String oauthId) { + + public static CommonOAuthInfo of(OAuthProvider provider, String oauthId) { + return new CommonOAuthInfo(provider, oauthId); + } } diff --git a/src/main/java/com/somemore/global/auth/oauth/domain/CustomOAuth2User.java b/src/main/java/com/somemore/global/auth/oauth/domain/CustomOAuth2User.java new file mode 100644 index 000000000..ec6746d34 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/oauth/domain/CustomOAuth2User.java @@ -0,0 +1,36 @@ +package com.somemore.global.auth.oauth.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.oauth2.core.user.OAuth2User; + +import java.util.Collection; +import java.util.Map; + +@RequiredArgsConstructor +@Getter +public class CustomOAuth2User implements OAuth2User { + + private final OAuth2User oAuth2User; + private final OAuthProvider provider; + + @Override + public Map getAttributes() { + return oAuth2User.getAttributes(); + } + + @Override + public Collection getAuthorities() { + return oAuth2User.getAuthorities(); + } + + @Override + public String getName() { + return oAuth2User.getName(); + } + + public static CustomOAuth2User of(OAuth2User oAuth2User, OAuthProvider oAuthProvider) { + return new CustomOAuth2User(oAuth2User, oAuthProvider); + } +} diff --git a/src/main/java/com/somemore/global/auth/oauth/domain/OAuthProvider.java b/src/main/java/com/somemore/global/auth/oauth/domain/OAuthProvider.java index 215927cd5..6b01dd822 100644 --- a/src/main/java/com/somemore/global/auth/oauth/domain/OAuthProvider.java +++ b/src/main/java/com/somemore/global/auth/oauth/domain/OAuthProvider.java @@ -4,7 +4,9 @@ @Getter public enum OAuthProvider { - NAVER("naver"); + NAVER("naver"), + KAKAO("kakao"), + ; private final String providerName; @@ -14,7 +16,7 @@ public enum OAuthProvider { public static OAuthProvider from(String providerName) { for (OAuthProvider provider : values()) { - if (provider.providerName.equals(providerName)) { + if (provider.providerName.equalsIgnoreCase(providerName)) { return provider; } } diff --git a/src/main/java/com/somemore/global/auth/oauth/dto/KakaoUserProfileResponseDto.java b/src/main/java/com/somemore/global/auth/oauth/dto/KakaoUserProfileResponseDto.java new file mode 100644 index 000000000..9b6606efd --- /dev/null +++ b/src/main/java/com/somemore/global/auth/oauth/dto/KakaoUserProfileResponseDto.java @@ -0,0 +1,10 @@ +package com.somemore.global.auth.oauth.dto; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public record KakaoUserProfileResponseDto( + String id // OAuth ID +) { +} diff --git a/src/main/java/com/somemore/global/auth/oauth/naver/dto/NaverUserProfileResponseDto.java b/src/main/java/com/somemore/global/auth/oauth/dto/NaverUserProfileResponseDto.java similarity index 85% rename from src/main/java/com/somemore/global/auth/oauth/naver/dto/NaverUserProfileResponseDto.java rename to src/main/java/com/somemore/global/auth/oauth/dto/NaverUserProfileResponseDto.java index 5272e770b..b2603c3ac 100644 --- a/src/main/java/com/somemore/global/auth/oauth/naver/dto/NaverUserProfileResponseDto.java +++ b/src/main/java/com/somemore/global/auth/oauth/dto/NaverUserProfileResponseDto.java @@ -1,4 +1,4 @@ -package com.somemore.global.auth.oauth.naver.dto; +package com.somemore.global.auth.oauth.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.PropertyNamingStrategies; @@ -12,7 +12,7 @@ public record NaverUserProfileResponseDto( ) { @JsonIgnoreProperties(ignoreUnknown = true) public record Response( - String id // 일련 번호 + String id // OAuth ID ) { } } diff --git a/src/main/java/com/somemore/global/auth/oauth/handler/CustomOAuthSuccessHandler.java b/src/main/java/com/somemore/global/auth/oauth/handler/CustomOAuthSuccessHandler.java index 36ec7e2a2..0a4f40fd0 100644 --- a/src/main/java/com/somemore/global/auth/oauth/handler/CustomOAuthSuccessHandler.java +++ b/src/main/java/com/somemore/global/auth/oauth/handler/CustomOAuthSuccessHandler.java @@ -4,6 +4,7 @@ import com.somemore.global.auth.jwt.domain.EncodedToken; import com.somemore.global.auth.jwt.domain.TokenType; import com.somemore.global.auth.jwt.usecase.GenerateTokensOnLoginUseCase; +import com.somemore.global.auth.oauth.domain.CustomOAuth2User; import com.somemore.global.auth.oauth.processor.OAuthUserProcessor; import com.somemore.global.auth.redirect.RedirectUseCase; import com.somemore.user.domain.UserRole; @@ -35,7 +36,7 @@ public class CustomOAuthSuccessHandler extends SimpleUrlAuthenticationSuccessHan public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { - OAuth2User oauthUser = extractOAuthUser(authentication); + CustomOAuth2User oauthUser = extractOAuthUser(authentication); UUID userId = oauthUserProcessor.fetchUserIdByOAuthUser(oauthUser); processAccessToken(response, userId); @@ -55,14 +56,28 @@ private void processAccessToken(HttpServletResponse response, UUID userId) { generateTokensOnLoginUseCase.generateLoginToken( userId, UserRole.getOAuthUserDefaultRole()); - cookieUseCase.setToken(response, loginToken.getValueWithPrefix(), TokenType.SIGN_IN); + cookieUseCase.setToken(response, loginToken.value(), TokenType.SIGN_IN); } - private OAuth2User extractOAuthUser(Authentication authentication) { + private CustomOAuth2User extractOAuthUser(Authentication authentication) { + OAuth2AuthenticationToken oAuth2AuthenticationToken = castToOAuth2AuthenticationTokenBy(authentication); + OAuth2User oAuth2User = oAuth2AuthenticationToken.getPrincipal(); + return castToCustomOAuth2UserBy(oAuth2User); + } + + private OAuth2AuthenticationToken castToOAuth2AuthenticationTokenBy(Authentication authentication) { if (authentication instanceof OAuth2AuthenticationToken token) { - return token.getPrincipal(); + return token; } log.error("Authentication 객체가 OAuth2AuthenticationToken 타입이 아닙니다: {}", authentication.getClass().getName()); - throw new IllegalArgumentException("잘못된 인증 객체입니다."); + throw new IllegalArgumentException(); + } + + private CustomOAuth2User castToCustomOAuth2UserBy(OAuth2User oAuth2User) { + if (oAuth2User instanceof CustomOAuth2User customOAuth2User) { + return customOAuth2User; + } + log.error("OAuth2User 객체가 CustomOAuth2User 타입이 아닙니다: {}", oAuth2User.getClass().getName()); + throw new IllegalArgumentException(); } } diff --git a/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessor.java b/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessor.java index c9bd55bf7..eb00e45a2 100644 --- a/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessor.java +++ b/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessor.java @@ -1,9 +1,9 @@ package com.somemore.global.auth.oauth.processor; -import org.springframework.security.oauth2.core.user.OAuth2User; +import com.somemore.global.auth.oauth.domain.CustomOAuth2User; import java.util.UUID; public interface OAuthUserProcessor { - UUID fetchUserIdByOAuthUser(OAuth2User oauthUser); + UUID fetchUserIdByOAuthUser(CustomOAuth2User oauthUser); } diff --git a/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessorImpl.java b/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessorImpl.java index b2ceb6913..8bbd19ebf 100644 --- a/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessorImpl.java +++ b/src/main/java/com/somemore/global/auth/oauth/processor/OAuthUserProcessorImpl.java @@ -1,16 +1,16 @@ package com.somemore.global.auth.oauth.processor; -import com.somemore.user.domain.UserRole; import com.somemore.global.auth.oauth.checker.OAuthInfoChecker; -import com.somemore.global.auth.oauth.domain.CommonOAuthInfo; import com.somemore.global.auth.oauth.converter.OAuthResponseConverter; +import com.somemore.global.auth.oauth.domain.CommonOAuthInfo; +import com.somemore.global.auth.oauth.domain.CustomOAuth2User; import com.somemore.global.auth.oauth.registrar.OAuthInfoRegistrar; import com.somemore.global.auth.oauth.service.OAuthInfoQueryService; import com.somemore.user.domain.User; +import com.somemore.user.domain.UserRole; import com.somemore.user.usecase.RegisterUserUseCase; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,7 +29,7 @@ public class OAuthUserProcessorImpl implements OAuthUserProcessor { private final OAuthInfoQueryService oAuthInfoQueryService; @Override - public UUID fetchUserIdByOAuthUser(OAuth2User oauthUser) { + public UUID fetchUserIdByOAuthUser(CustomOAuth2User oauthUser) { CommonOAuthInfo oauthInfo = oauthResponseConverter.convert(oauthUser); return findUserIdByOAuthInfo(oauthInfo); } diff --git a/src/main/java/com/somemore/global/auth/oauth/registrar/OAuthInfoRegistrarImpl.java b/src/main/java/com/somemore/global/auth/oauth/registrar/OAuthInfoRegistrarImpl.java index 34a350036..2052b15b6 100644 --- a/src/main/java/com/somemore/global/auth/oauth/registrar/OAuthInfoRegistrarImpl.java +++ b/src/main/java/com/somemore/global/auth/oauth/registrar/OAuthInfoRegistrarImpl.java @@ -22,6 +22,4 @@ public OAuthInfo register(User user, CommonOAuthInfo commonOAuthInfo) { OAuthInfo oAuthInfo = OAuthInfo.create(user, commonOAuthInfo); return oauthInfoRepository.save(oAuthInfo); } - - } diff --git a/src/main/java/com/somemore/global/auth/oauth/service/CustomOAuth2UserService.java b/src/main/java/com/somemore/global/auth/oauth/service/CustomOAuth2UserService.java index 6f57cfa96..d3212c59f 100644 --- a/src/main/java/com/somemore/global/auth/oauth/service/CustomOAuth2UserService.java +++ b/src/main/java/com/somemore/global/auth/oauth/service/CustomOAuth2UserService.java @@ -1,5 +1,7 @@ package com.somemore.global.auth.oauth.service; +import com.somemore.global.auth.oauth.domain.CustomOAuth2User; +import com.somemore.global.auth.oauth.domain.OAuthProvider; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; @@ -14,18 +16,26 @@ @RequiredArgsConstructor public class CustomOAuth2UserService implements OAuth2UserService { + private final DefaultOAuth2UserService oauth2UserService; + @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { try { - return fetchOAuthUser(userRequest); + OAuth2User oAuth2User = extractOAuth2User(userRequest); + OAuthProvider oAuthProvider = extractOAuthProvider(userRequest); + + return CustomOAuth2User.of(oAuth2User, oAuthProvider); } catch (OAuth2AuthenticationException e) { log.error("OAuth 사용자 정보를 불러오는 중 문제가 발생했습니다: {}", e.getMessage(), e); throw e; } } - private OAuth2User fetchOAuthUser(OAuth2UserRequest userRequest) { - OAuth2UserService oAuth2UserService = new DefaultOAuth2UserService(); - return oAuth2UserService.loadUser(userRequest); + private OAuth2User extractOAuth2User(OAuth2UserRequest userRequest) { + return oauth2UserService.loadUser(userRequest); + } + + private OAuthProvider extractOAuthProvider(OAuth2UserRequest userRequest) { + return OAuthProvider.from(userRequest.getClientRegistration().getRegistrationId()); } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 172ca7634..dac88647d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -55,6 +55,13 @@ spring: redirect-uri: ${NAVER_REDIRECT_URL} authorization-grant-type: authorization_code scope: ${NAVER_SCOPE} + kakao: + client-id: ${KAKAO_CLIENT_ID} + clientSecret: ${KAKAO_CLIENT_SECRET} + redirect-uri: ${KAKAO_REDIRECT_URL} + client-authentication-method: client_secret_post + authorization-grant-type: authorization_code + scope: ${KAKAO_SCOPE} provider: naver: @@ -62,6 +69,11 @@ spring: token-uri: https://nid.naver.com/oauth2.0/token user-info-uri: https://openapi.naver.com/v1/nid/me user-name-attribute: response # 네이버 API가 사용자 정보를 "response" 객체 안에 넣어 반환 + kakao: + authorization_uri: https://kauth.kakao.com/oauth/authorize + token_uri: https://kauth.kakao.com/oauth/token + user-info-uri: https://kapi.kakao.com/v2/user/me + user_name_attribute: id web: locale: ko_KR @@ -72,7 +84,6 @@ spring: max-file-size: 8MB max-request-size: 8MB - schedules: cron: updateCommunityBoardDocuments: "0 0 0 * * *" diff --git a/src/test/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlServiceTest.java b/src/test/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlServiceTest.java index c97feb407..92d6aebfe 100644 --- a/src/test/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlServiceTest.java +++ b/src/test/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlServiceTest.java @@ -1,6 +1,8 @@ package com.somemore.domains.volunteer.service; +import com.somemore.global.auth.oauth.domain.OAuthProvider; import com.somemore.support.IntegrationTestSupport; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -17,9 +19,10 @@ class GenerateOAuthUrlServiceTest extends IntegrationTestSupport { @Test + @DisplayName("Naver 제공자를 위한 OAuth URL이 올바르게 생성되는지 검증") void generateUrl_ShouldReturnCorrectUrl_ForNaver() { // Given - String oAuthProvider = "naver"; + String oAuthProvider = OAuthProvider.NAVER.getProviderName(); // When String result = generateOAuthUrlService.generateUrl(oAuthProvider); @@ -31,15 +34,16 @@ void generateUrl_ShouldReturnCorrectUrl_ForNaver() { } @Test - void generateUrl_ShouldReturnCorrectUrl_ForGoogle() { + @DisplayName("Kakao 제공자를 위한 OAuth URL이 올바르게 생성되는지 검증") + void generateUrl_ShouldReturnCorrectUrl_ForKakao() { // Given - String oAuthProvider = "google"; + String oAuthProvider = OAuthProvider.KAKAO.getProviderName(); // When String result = generateOAuthUrlService.generateUrl(oAuthProvider); // Then - String expectedUrl = backendRootUrl + "/oauth2/authorization/google"; + String expectedUrl = backendRootUrl + "/oauth2/authorization/kakao"; assertThat(result).isEqualTo(expectedUrl); } diff --git a/src/test/java/com/somemore/user/repository/usercommonattribute/UserCommonAttributeRepositoryImplTest.java b/src/test/java/com/somemore/user/repository/usercommonattribute/UserCommonAttributeRepositoryImplTest.java index 8bc183b1f..d286fcabf 100644 --- a/src/test/java/com/somemore/user/repository/usercommonattribute/UserCommonAttributeRepositoryImplTest.java +++ b/src/test/java/com/somemore/user/repository/usercommonattribute/UserCommonAttributeRepositoryImplTest.java @@ -37,6 +37,5 @@ void saveUserCommonAttribute() { assertThat(savedUserCommonAttribute.getUserId()).isEqualTo(userId); assertThat(savedUserCommonAttribute.getImgUrl()).isEqualTo(ImageUploadService.DEFAULT_IMAGE_URL); assertThat(savedUserCommonAttribute.isCustomized()).isFalse(); - } }