diff --git a/src/main/java/com/example/solidconnection/auth/domain/TokenType.java b/src/main/java/com/example/solidconnection/auth/domain/TokenType.java index ad5607a27..caf1c7a9d 100644 --- a/src/main/java/com/example/solidconnection/auth/domain/TokenType.java +++ b/src/main/java/com/example/solidconnection/auth/domain/TokenType.java @@ -7,8 +7,8 @@ public enum TokenType { ACCESS("ACCESS:", 1000 * 60 * 60), // 1hour REFRESH("REFRESH:", 1000 * 60 * 60 * 24 * 7), // 7days - KAKAO_OAUTH("KAKAO:", 1000 * 60 * 60), // 1hour - BLACKLIST("BLACKLIST:", ACCESS.expireTime) + BLACKLIST("BLACKLIST:", ACCESS.expireTime), + SIGN_UP("SIGN_UP:", 1000 * 60 * 10), // 10min ; private final String prefix; @@ -19,7 +19,7 @@ public enum TokenType { this.expireTime = expireTime; } - public String addPrefixToSubject(String subject) { - return prefix + subject; + public String addPrefix(String string) { + return prefix + string; } } diff --git a/src/main/java/com/example/solidconnection/auth/service/AuthService.java b/src/main/java/com/example/solidconnection/auth/service/AuthService.java index aed6f922f..04bcadde7 100644 --- a/src/main/java/com/example/solidconnection/auth/service/AuthService.java +++ b/src/main/java/com/example/solidconnection/auth/service/AuthService.java @@ -5,37 +5,26 @@ import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; import lombok.RequiredArgsConstructor; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.time.LocalDate; -import java.util.concurrent.TimeUnit; +import java.util.Optional; -import static com.example.solidconnection.auth.domain.TokenType.ACCESS; -import static com.example.solidconnection.auth.domain.TokenType.BLACKLIST; -import static com.example.solidconnection.auth.domain.TokenType.REFRESH; import static com.example.solidconnection.custom.exception.ErrorCode.REFRESH_TOKEN_EXPIRED; @RequiredArgsConstructor @Service public class AuthService { - private final RedisTemplate redisTemplate; - private final TokenProvider tokenProvider; + private final AuthTokenProvider authTokenProvider; /* * 로그아웃 한다. * - 엑세스 토큰을 블랙리스트에 추가한다. * */ public void signOut(String accessToken) { - redisTemplate.opsForValue().set( - BLACKLIST.addPrefixToSubject(accessToken), - accessToken, - BLACKLIST.getExpireTime(), - TimeUnit.MILLISECONDS - ); + authTokenProvider.generateAndSaveBlackListToken(accessToken); } /* @@ -56,14 +45,12 @@ public void quit(SiteUser siteUser) { * */ public ReissueResponse reissue(String subject) { // 리프레시 토큰 만료 확인 - String refreshTokenKey = REFRESH.addPrefixToSubject(subject); - String refreshToken = redisTemplate.opsForValue().get(refreshTokenKey); - if (ObjectUtils.isEmpty(refreshToken)) { + Optional optionalRefreshToken = authTokenProvider.findRefreshToken(subject); + if (optionalRefreshToken.isEmpty()) { throw new CustomException(REFRESH_TOKEN_EXPIRED); } // 액세스 토큰 재발급 - String newAccessToken = tokenProvider.generateToken(subject, ACCESS); - tokenProvider.saveToken(newAccessToken, ACCESS); + String newAccessToken = authTokenProvider.generateAccessToken(subject); return new ReissueResponse(newAccessToken); } } diff --git a/src/main/java/com/example/solidconnection/auth/service/AuthTokenProvider.java b/src/main/java/com/example/solidconnection/auth/service/AuthTokenProvider.java new file mode 100644 index 000000000..da040a8d5 --- /dev/null +++ b/src/main/java/com/example/solidconnection/auth/service/AuthTokenProvider.java @@ -0,0 +1,53 @@ +package com.example.solidconnection.auth.service; + +import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.config.security.JwtProperties; +import com.example.solidconnection.siteuser.domain.SiteUser; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +import static com.example.solidconnection.util.JwtUtils.parseSubjectIgnoringExpiration; + +@Component +public class AuthTokenProvider extends TokenProvider { + + public AuthTokenProvider(JwtProperties jwtProperties, RedisTemplate redisTemplate) { + super(jwtProperties, redisTemplate); + } + + public String generateAccessToken(SiteUser siteUser) { + String subject = siteUser.getId().toString(); + return generateToken(subject, TokenType.ACCESS); + } + + public String generateAccessToken(String subject) { + return generateToken(subject, TokenType.ACCESS); + } + + public String generateAndSaveRefreshToken(SiteUser siteUser) { + String subject = siteUser.getId().toString(); + String refreshToken = generateToken(subject, TokenType.REFRESH); + return saveToken(refreshToken, TokenType.REFRESH); + } + + public String generateAndSaveBlackListToken(String accessToken) { + String blackListToken = generateToken(accessToken, TokenType.BLACKLIST); + return saveToken(blackListToken, TokenType.BLACKLIST); + } + + public Optional findRefreshToken(String subject) { + String refreshTokenKey = TokenType.REFRESH.addPrefix(subject); + return Optional.ofNullable(redisTemplate.opsForValue().get(refreshTokenKey)); + } + + public Optional findBlackListToken(String subject) { + String blackListTokenKey = TokenType.BLACKLIST.addPrefix(subject); + return Optional.ofNullable(redisTemplate.opsForValue().get(blackListTokenKey)); + } + + public String getEmail(String token) { + return parseSubjectIgnoringExpiration(token, jwtProperties.secret()); + } +} diff --git a/src/main/java/com/example/solidconnection/auth/service/SignInService.java b/src/main/java/com/example/solidconnection/auth/service/SignInService.java index ae4947596..8ca39eb62 100644 --- a/src/main/java/com/example/solidconnection/auth/service/SignInService.java +++ b/src/main/java/com/example/solidconnection/auth/service/SignInService.java @@ -6,7 +6,6 @@ import com.example.solidconnection.auth.dto.kakao.KakaoCodeRequest; import com.example.solidconnection.auth.dto.kakao.KakaoOauthResponse; import com.example.solidconnection.auth.dto.kakao.KakaoUserInfoDto; -import com.example.solidconnection.auth.domain.TokenType; import com.example.solidconnection.siteuser.domain.AuthType; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; @@ -20,7 +19,8 @@ @Service public class SignInService { - private final TokenProvider tokenProvider; + private final AuthTokenProvider authTokenProvider; + private final SignUpTokenProvider signUpTokenProvider; private final SiteUserRepository siteUserRepository; private final KakaoOAuthClient kakaoOAuthClient; @@ -60,15 +60,13 @@ private void resetQuitedAt(SiteUser siteUser) { } private SignInResponse getSignInInfo(SiteUser siteUser) { - String accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + String accessToken = authTokenProvider.generateAccessToken(siteUser); + String refreshToken = authTokenProvider.generateAndSaveRefreshToken(siteUser); return new SignInResponse(true, accessToken, refreshToken); } private FirstAccessResponse getFirstAccessInfo(KakaoUserInfoDto kakaoUserInfoDto) { - String kakaoOauthToken = tokenProvider.generateToken(kakaoUserInfoDto.kakaoAccountDto().email(), TokenType.KAKAO_OAUTH); - tokenProvider.saveToken(kakaoOauthToken, TokenType.KAKAO_OAUTH); + String kakaoOauthToken = signUpTokenProvider.generateAndSaveSignUpToken(kakaoUserInfoDto.kakaoAccountDto().email()); return FirstAccessResponse.of(kakaoUserInfoDto, kakaoOauthToken); } } diff --git a/src/main/java/com/example/solidconnection/auth/service/SignUpService.java b/src/main/java/com/example/solidconnection/auth/service/SignUpService.java index 697cdbdc0..788b07e44 100644 --- a/src/main/java/com/example/solidconnection/auth/service/SignUpService.java +++ b/src/main/java/com/example/solidconnection/auth/service/SignUpService.java @@ -2,7 +2,6 @@ import com.example.solidconnection.auth.dto.SignUpRequest; import com.example.solidconnection.auth.dto.SignUpResponse; -import com.example.solidconnection.auth.domain.TokenType; import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.entity.InterestedCountry; import com.example.solidconnection.entity.InterestedRegion; @@ -28,7 +27,7 @@ public class SignUpService { private final TokenValidator tokenValidator; - private final TokenProvider tokenProvider; + private final AuthTokenProvider authTokenProvider; private final SiteUserRepository siteUserRepository; private final RegionRepository regionRepository; private final InterestedRegionRepository interestedRegionRepository; @@ -51,7 +50,7 @@ public class SignUpService { public SignUpResponse signUp(SignUpRequest signUpRequest) { // 검증 tokenValidator.validateKakaoToken(signUpRequest.kakaoOauthToken()); - String email = tokenProvider.getEmail(signUpRequest.kakaoOauthToken()); + String email = authTokenProvider.getEmail(signUpRequest.kakaoOauthToken()); validateNicknameDuplicated(signUpRequest.nickname()); validateUserNotDuplicated(email); @@ -64,9 +63,8 @@ public SignUpResponse signUp(SignUpRequest signUpRequest) { saveInterestedCountry(signUpRequest, savedSiteUser); // 토큰 발급 - String accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + String accessToken = authTokenProvider.generateAccessToken(siteUser); + String refreshToken = authTokenProvider.generateAndSaveRefreshToken(siteUser); return new SignUpResponse(accessToken, refreshToken); } diff --git a/src/main/java/com/example/solidconnection/auth/service/SignUpTokenProvider.java b/src/main/java/com/example/solidconnection/auth/service/SignUpTokenProvider.java new file mode 100644 index 000000000..f04bf112b --- /dev/null +++ b/src/main/java/com/example/solidconnection/auth/service/SignUpTokenProvider.java @@ -0,0 +1,26 @@ +package com.example.solidconnection.auth.service; + +import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.config.security.JwtProperties; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component +public class SignUpTokenProvider extends TokenProvider { + + public SignUpTokenProvider(JwtProperties jwtProperties, RedisTemplate redisTemplate) { + super(jwtProperties, redisTemplate); + } + + public String generateAndSaveSignUpToken(String email) { + String signUpToken = generateToken(email, TokenType.SIGN_UP); + return saveToken(signUpToken, TokenType.SIGN_UP); + } + + public Optional findSignUpToken(String email) { + String signUpKey = TokenType.SIGN_UP.addPrefix(email); + return Optional.ofNullable(redisTemplate.opsForValue().get(signUpKey)); + } +} diff --git a/src/main/java/com/example/solidconnection/auth/service/TokenProvider.java b/src/main/java/com/example/solidconnection/auth/service/TokenProvider.java index 2dbf288ad..f5f638ab3 100644 --- a/src/main/java/com/example/solidconnection/auth/service/TokenProvider.java +++ b/src/main/java/com/example/solidconnection/auth/service/TokenProvider.java @@ -2,33 +2,27 @@ import com.example.solidconnection.auth.domain.TokenType; import com.example.solidconnection.config.security.JwtProperties; -import com.example.solidconnection.siteuser.domain.SiteUser; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; -import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; import java.util.Date; import java.util.concurrent.TimeUnit; import static com.example.solidconnection.util.JwtUtils.parseSubject; -import static com.example.solidconnection.util.JwtUtils.parseSubjectIgnoringExpiration; -@RequiredArgsConstructor -@Component -public class TokenProvider { +public abstract class TokenProvider { - private final RedisTemplate redisTemplate; - private final JwtProperties jwtProperties; + protected final JwtProperties jwtProperties; + protected final RedisTemplate redisTemplate; - public String generateToken(SiteUser siteUser, TokenType tokenType) { - String subject = siteUser.getId().toString(); - return generateToken(subject, tokenType); + public TokenProvider(JwtProperties jwtProperties, RedisTemplate redisTemplate) { + this.jwtProperties = jwtProperties; + this.redisTemplate = redisTemplate; } - public String generateToken(String string, TokenType tokenType) { + protected final String generateToken(String string, TokenType tokenType) { Claims claims = Jwts.claims().setSubject(string); Date now = new Date(); Date expiredDate = new Date(now.getTime() + tokenType.getExpireTime()); @@ -40,18 +34,14 @@ public String generateToken(String string, TokenType tokenType) { .compact(); } - public String saveToken(String token, TokenType tokenType) { + protected final String saveToken(String token, TokenType tokenType) { String subject = parseSubject(token, jwtProperties.secret()); redisTemplate.opsForValue().set( - tokenType.addPrefixToSubject(subject), + tokenType.addPrefix(subject), token, tokenType.getExpireTime(), TimeUnit.MILLISECONDS ); return token; } - - public String getEmail(String token) { - return parseSubjectIgnoringExpiration(token, jwtProperties.secret()); - } } diff --git a/src/main/java/com/example/solidconnection/auth/service/TokenValidator.java b/src/main/java/com/example/solidconnection/auth/service/TokenValidator.java index 8c17ad00c..a87a4aa2c 100644 --- a/src/main/java/com/example/solidconnection/auth/service/TokenValidator.java +++ b/src/main/java/com/example/solidconnection/auth/service/TokenValidator.java @@ -14,8 +14,8 @@ import java.util.Objects; import static com.example.solidconnection.auth.domain.TokenType.ACCESS; -import static com.example.solidconnection.auth.domain.TokenType.KAKAO_OAUTH; import static com.example.solidconnection.auth.domain.TokenType.REFRESH; +import static com.example.solidconnection.auth.domain.TokenType.SIGN_UP; import static com.example.solidconnection.custom.exception.ErrorCode.ACCESS_TOKEN_EXPIRED; import static com.example.solidconnection.custom.exception.ErrorCode.EMPTY_TOKEN; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_SERVICE_PUBLISHED_KAKAO_TOKEN; @@ -38,7 +38,7 @@ public void validateAccessToken(String token) { public void validateKakaoToken(String token) { validateTokenNotEmpty(token); - validateTokenNotExpired(token, KAKAO_OAUTH); + validateTokenNotExpired(token, SIGN_UP); validateKakaoTokenNotUsed(token); } @@ -55,7 +55,7 @@ private void validateTokenNotExpired(String token, TokenType tokenType) { if (tokenType.equals(ACCESS)) { throw new CustomException(ACCESS_TOKEN_EXPIRED); } - if (token.equals(KAKAO_OAUTH)) { + if (token.equals(SIGN_UP)) { throw new CustomException(INVALID_SERVICE_PUBLISHED_KAKAO_TOKEN); } } @@ -63,14 +63,14 @@ private void validateTokenNotExpired(String token, TokenType tokenType) { private void validateRefreshToken(String token) { String email = getClaim(token).getSubject(); - if (redisTemplate.opsForValue().get(REFRESH.addPrefixToSubject(email)) == null) { + if (redisTemplate.opsForValue().get(REFRESH.addPrefix(email)) == null) { throw new CustomException(REFRESH_TOKEN_EXPIRED); } } private void validateKakaoTokenNotUsed(String token) { String email = getClaim(token).getSubject(); - if (!Objects.equals(redisTemplate.opsForValue().get(KAKAO_OAUTH.addPrefixToSubject(email)), token)) { + if (!Objects.equals(redisTemplate.opsForValue().get(SIGN_UP.addPrefix(email)), token)) { throw new CustomException(INVALID_SERVICE_PUBLISHED_KAKAO_TOKEN); } } diff --git a/src/main/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilter.java b/src/main/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilter.java index 90fb6866e..2cef8d1ac 100644 --- a/src/main/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilter.java +++ b/src/main/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilter.java @@ -1,6 +1,6 @@ package com.example.solidconnection.custom.security.filter; -import com.example.solidconnection.config.security.JwtProperties; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.custom.exception.CustomException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -8,13 +8,11 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.NonNull; import lombok.RequiredArgsConstructor; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; -import static com.example.solidconnection.auth.domain.TokenType.BLACKLIST; import static com.example.solidconnection.custom.exception.ErrorCode.USER_ALREADY_SIGN_OUT; import static com.example.solidconnection.util.JwtUtils.parseTokenFromRequest; @@ -22,8 +20,7 @@ @RequiredArgsConstructor public class SignOutCheckFilter extends OncePerRequestFilter { - private final RedisTemplate redisTemplate; - private final JwtProperties jwtProperties; + private final AuthTokenProvider authTokenProvider; @Override protected void doFilterInternal(@NonNull HttpServletRequest request, @@ -37,7 +34,6 @@ protected void doFilterInternal(@NonNull HttpServletRequest request, } private boolean hasSignedOut(String accessToken) { - String blacklistKey = BLACKLIST.addPrefixToSubject(accessToken); - return redisTemplate.opsForValue().get(blacklistKey) != null; + return authTokenProvider.findBlackListToken(accessToken).isPresent(); } } diff --git a/src/test/java/com/example/solidconnection/auth/service/AuthTokenProviderTest.java b/src/test/java/com/example/solidconnection/auth/service/AuthTokenProviderTest.java new file mode 100644 index 000000000..f5616973f --- /dev/null +++ b/src/test/java/com/example/solidconnection/auth/service/AuthTokenProviderTest.java @@ -0,0 +1,187 @@ +package com.example.solidconnection.auth.service; + +import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.config.security.JwtProperties; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerSpringBootTest; +import com.example.solidconnection.type.Gender; +import com.example.solidconnection.type.PreparationStatus; +import com.example.solidconnection.type.Role; +import com.example.solidconnection.util.JwtUtils; +import io.jsonwebtoken.Jwts; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +@TestContainerSpringBootTest +@DisplayName("인증 토큰 제공자 테스트") +class AuthTokenProviderTest { + + @Autowired + private AuthTokenProvider authTokenProvider; + + @Autowired + private SiteUserRepository siteUserRepository; + + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private JwtProperties jwtProperties; + + private SiteUser siteUser; + private String subject; + + @BeforeEach + void setUp() { + siteUser = createSiteUser(); + siteUserRepository.save(siteUser); + subject = siteUser.getId().toString(); + } + + @Nested + class 액세스_토큰을_제공한다 { + + @Test + void SiteUser_로_액세스_토큰을_생성한다() { + // when + String token = authTokenProvider.generateAccessToken(siteUser); + + // then + String actualSubject = JwtUtils.parseSubject(token, jwtProperties.secret()); + assertThat(actualSubject).isEqualTo(subject); + } + + @Test + void subject_로_액세스_토큰을_생성한다() { + // given + String subject = "subject123"; + + // when + String token = authTokenProvider.generateAccessToken(subject); + + // then + String actualSubject = JwtUtils.parseSubject(token, jwtProperties.secret()); + assertThat(actualSubject).isEqualTo(subject); + } + } + + @Nested + class 리프레시_토큰을_제공한다 { + + @Test + void SiteUser_로_리프레시_토큰을_생성하고_저장한다() { + // when + String refreshToken = authTokenProvider.generateAndSaveRefreshToken(siteUser); + + // then + String actualSubject = JwtUtils.parseSubject(refreshToken, jwtProperties.secret()); + String refreshTokenKey = TokenType.REFRESH.addPrefix(subject); + assertAll( + () -> assertThat(actualSubject).isEqualTo(subject), + () -> assertThat(redisTemplate.opsForValue().get(refreshTokenKey)).isEqualTo(refreshToken) + ); + } + + @Test + void 저장된_리프레시_토큰을_조회한다() { + // given + String refreshToken = "refreshToken"; + redisTemplate.opsForValue().set(TokenType.REFRESH.addPrefix(subject), refreshToken); + + // when + Optional optionalRefreshToken = authTokenProvider.findRefreshToken(subject); + + // then + assertThat(optionalRefreshToken.get()).isEqualTo(refreshToken); + } + + @Test + void 저장되지_않은_리프레시_토큰을_조회한다() { + // when + Optional optionalRefreshToken = authTokenProvider.findRefreshToken(subject); + + // then + assertThat(optionalRefreshToken).isEmpty(); + } + } + + @Nested + class 블랙리스트_토큰을_제공한다 { + + @Test + void 엑세스_토큰으로_블랙리스트_토큰을_생성하고_저장한다() { + // when + String accessToken = "accessToken"; + String blackListToken = authTokenProvider.generateAndSaveBlackListToken(accessToken); + + // then + String actualSubject = JwtUtils.parseSubject(blackListToken, jwtProperties.secret()); + String blackListTokenKey = TokenType.BLACKLIST.addPrefix(accessToken); + assertAll( + () -> assertThat(actualSubject).isEqualTo(accessToken), + () -> assertThat(redisTemplate.opsForValue().get(blackListTokenKey)).isEqualTo(blackListToken) + ); + } + + @Test + void 저장된_블랙리스트_토큰을_조회한다() { + // given + String accessToken = "accessToken"; + String blackListToken = "token"; + redisTemplate.opsForValue().set(TokenType.BLACKLIST.addPrefix(accessToken), blackListToken); + + // when + Optional optionalBlackListToken = authTokenProvider.findBlackListToken(accessToken); + + // then + assertThat(optionalBlackListToken).hasValue(blackListToken); + } + + @Test + void 저장되지_않은_블랙리스트_토큰을_조회한다() { + // when + Optional optionalBlackListToken = authTokenProvider.findBlackListToken("accessToken"); + + // then + assertThat(optionalBlackListToken).isEmpty(); + } + } + + @Test + void 토큰을_생성한다() { + // when + String subject = "subject123"; + String token = authTokenProvider.generateToken(subject, TokenType.ACCESS); + + // then + String extractedSubject = Jwts.parser() + .setSigningKey(jwtProperties.secret()) + .parseClaimsJws(token) + .getBody() + .getSubject(); + assertThat(subject).isEqualTo(extractedSubject); + } + + private SiteUser createSiteUser() { + SiteUser siteUser = new SiteUser( + "test@example.com", + "nickname", + "profileImageUrl", + "1999-01-01", + PreparationStatus.CONSIDERING, + Role.MENTEE, + Gender.MALE + ); + return siteUserRepository.save(siteUser); + } +} diff --git a/src/test/java/com/example/solidconnection/auth/service/SignUpTokenProviderTest.java b/src/test/java/com/example/solidconnection/auth/service/SignUpTokenProviderTest.java new file mode 100644 index 000000000..382008d8c --- /dev/null +++ b/src/test/java/com/example/solidconnection/auth/service/SignUpTokenProviderTest.java @@ -0,0 +1,70 @@ +package com.example.solidconnection.auth.service; + +import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.config.security.JwtProperties; +import com.example.solidconnection.support.TestContainerSpringBootTest; +import com.example.solidconnection.util.JwtUtils; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +@TestContainerSpringBootTest +@DisplayName("회원가입 토큰 제공자 테스트") +class SignUpTokenProviderTest { + + @Autowired + private SignUpTokenProvider signUpTokenProvider; + + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private JwtProperties jwtProperties; + + @Test + void 회원가입_토큰을_생성하고_저장한다() { + // when + String email = "email"; + String signUpToken = signUpTokenProvider.generateAndSaveSignUpToken(email); + + // then + String actualSubject = JwtUtils.parseSubject(signUpToken, jwtProperties.secret()); + String signUpTokenKey = TokenType.SIGN_UP.addPrefix(email); + assertAll( + () -> assertThat(actualSubject).isEqualTo(email), + () -> assertThat(redisTemplate.opsForValue().get(signUpTokenKey)).isEqualTo(signUpToken) + ); + } + + @Test + void 저장된_회원가입_토큰을_조회한다() { + // given + String email = "email"; + String signUpToken = "token"; + redisTemplate.opsForValue().set(TokenType.SIGN_UP.addPrefix(email), signUpToken); + + // when + Optional actualSignUpToken = signUpTokenProvider.findSignUpToken(email); + + // then + assertThat(actualSignUpToken).hasValue(signUpToken); + } + + @Test + void 저장되지_않은_회원가입_토큰을_조회한다() { + // given + String email = "email"; + + // when + Optional actualSignUpToken = signUpTokenProvider.findSignUpToken(email); + + // then + assertThat(actualSignUpToken).isEmpty(); + } +} diff --git a/src/test/java/com/example/solidconnection/auth/service/TokenProviderTest.java b/src/test/java/com/example/solidconnection/auth/service/TokenProviderTest.java deleted file mode 100644 index 8cc91e2c0..000000000 --- a/src/test/java/com/example/solidconnection/auth/service/TokenProviderTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.example.solidconnection.auth.service; - -import com.example.solidconnection.auth.domain.TokenType; -import com.example.solidconnection.config.security.JwtProperties; -import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.custom.exception.ErrorCode; -import com.example.solidconnection.support.TestContainerSpringBootTest; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; - -import java.util.Date; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatCode; - -@TestContainerSpringBootTest -@DisplayName("TokenProvider 테스트") -class TokenProviderTest { - - @Autowired - private TokenProvider tokenProvider; - - @Autowired - private RedisTemplate redisTemplate; - - @Autowired - private JwtProperties jwtProperties; - - @Test - void 토큰을_생성한다() { - // when - String subject = "subject123"; - String token = tokenProvider.generateToken(subject, TokenType.ACCESS); - - // then - String extractedSubject = Jwts.parser() - .setSigningKey(jwtProperties.secret()) - .parseClaimsJws(token) - .getBody() - .getSubject(); - assertThat(subject).isEqualTo(extractedSubject); - } - - @Nested - class 토큰을_저장한다 { - - @Test - void 토큰이_유효하면_저장한다() { - // given - String subject = "subject321"; - String token = createValidToken(subject); - - // when - tokenProvider.saveToken(token, TokenType.ACCESS); - - // then - String savedToken = redisTemplate.opsForValue().get(TokenType.ACCESS.addPrefixToSubject(subject)); - assertThat(savedToken).isEqualTo(token); - } - - @Test - void 토큰이_유효하지않으면_예외가_발생한다() { - // given - String token = createInvalidToken(); - - // when & then - assertThatCode(() -> tokenProvider.saveToken(token, TokenType.REFRESH)) - .isInstanceOf(CustomException.class) - .hasMessage(ErrorCode.INVALID_TOKEN.getMessage()); - } - } - - private String createValidToken(String subject) { - return Jwts.builder() - .setSubject(subject) - .setIssuedAt(new Date()) - .setExpiration(new Date(System.currentTimeMillis() + 1000)) - .signWith(SignatureAlgorithm.HS256, jwtProperties.secret()) - .compact(); - } - - private String createInvalidToken() { - return Jwts.builder() - .setSubject("subject") - .setIssuedAt(new Date()) - .setExpiration(new Date(System.currentTimeMillis() - 1000)) - .signWith(SignatureAlgorithm.HS256, jwtProperties.secret()) - .compact(); - } -} diff --git a/src/test/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilterTest.java b/src/test/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilterTest.java index 7eac22c71..a11d8d28a 100644 --- a/src/test/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilterTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/filter/SignOutCheckFilterTest.java @@ -59,7 +59,7 @@ void setUp() { // given String token = createToken(subject); request = createRequest(token); - String refreshTokenKey = BLACKLIST.addPrefixToSubject(token); + String refreshTokenKey = BLACKLIST.addPrefix(token); redisTemplate.opsForValue().set(refreshTokenKey, "signOut"); // when & then diff --git a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java index 40f39e646..fa2cf0b0b 100644 --- a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java +++ b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java @@ -7,8 +7,7 @@ import com.example.solidconnection.application.dto.ApplicationsResponse; import com.example.solidconnection.application.dto.UniversityApplicantsResponse; import com.example.solidconnection.application.repository.ApplicationRepository; -import com.example.solidconnection.auth.domain.TokenType; -import com.example.solidconnection.auth.service.TokenProvider; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.type.VerifyStatus; @@ -36,7 +35,7 @@ class ApplicantsQueryTest extends UniversityDataSetUpEndToEndTest { private ApplicationRepository applicationRepository; @Autowired - private TokenProvider tokenProvider; + private AuthTokenProvider authTokenProvider; private String accessToken; private String adminAccessToken; @@ -65,17 +64,14 @@ public void setUpUserAndToken() { SiteUser 사용자6 = siteUserRepository.save(createSiteUserByEmail("email6")); // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = tokenProvider.generateToken(나, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(나, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + accessToken = authTokenProvider.generateAccessToken(나); + authTokenProvider.generateAndSaveRefreshToken(나); - adminAccessToken = tokenProvider.generateToken(사용자5_관리자, TokenType.ACCESS); - String adminRefreshToken = tokenProvider.generateToken(사용자5_관리자, TokenType.REFRESH); - tokenProvider.saveToken(adminRefreshToken, TokenType.REFRESH); + adminAccessToken = authTokenProvider.generateAccessToken(사용자5_관리자); + authTokenProvider.generateAndSaveRefreshToken(사용자5_관리자); - user6AccessToken = tokenProvider.generateToken(사용자6, TokenType.ACCESS); - String user6RefreshToken = tokenProvider.generateToken(사용자6, TokenType.REFRESH); - tokenProvider.saveToken(user6RefreshToken, TokenType.REFRESH); + user6AccessToken = authTokenProvider.generateAccessToken(사용자6); + authTokenProvider.generateAndSaveRefreshToken(사용자6); // setUp - 지원 정보 저장 Gpa gpa = createDummyGpa(); diff --git a/src/test/java/com/example/solidconnection/e2e/MyPageTest.java b/src/test/java/com/example/solidconnection/e2e/MyPageTest.java index 567b1016d..7a0ae07f4 100644 --- a/src/test/java/com/example/solidconnection/e2e/MyPageTest.java +++ b/src/test/java/com/example/solidconnection/e2e/MyPageTest.java @@ -1,7 +1,6 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.auth.service.TokenProvider; -import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.MyPageResponse; import com.example.solidconnection.siteuser.repository.SiteUserRepository; @@ -25,7 +24,7 @@ class MyPageTest extends BaseEndToEndTest { private SiteUserRepository siteUserRepository; @Autowired - private TokenProvider tokenProvider; + private AuthTokenProvider authTokenProvider; private String accessToken; @@ -35,9 +34,8 @@ public void setUpUserAndToken() { siteUser = siteUserRepository.save(createSiteUserByEmail("email")); // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + accessToken = authTokenProvider.generateAccessToken(siteUser); + authTokenProvider.generateAndSaveRefreshToken(siteUser); } @Test diff --git a/src/test/java/com/example/solidconnection/e2e/MyPageUpdateTest.java b/src/test/java/com/example/solidconnection/e2e/MyPageUpdateTest.java index 025ddb7d7..b16f3b822 100644 --- a/src/test/java/com/example/solidconnection/e2e/MyPageUpdateTest.java +++ b/src/test/java/com/example/solidconnection/e2e/MyPageUpdateTest.java @@ -1,7 +1,6 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.auth.service.TokenProvider; -import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.custom.response.ErrorResponse; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.MyPageUpdateResponse; @@ -31,7 +30,7 @@ class MyPageUpdateTest extends BaseEndToEndTest { private SiteUserRepository siteUserRepository; @Autowired - private TokenProvider tokenProvider; + private AuthTokenProvider authTokenProvider; private String accessToken; @@ -44,9 +43,8 @@ public void setUpUserAndToken() { siteUserRepository.save(siteUser); // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + accessToken = authTokenProvider.generateAccessToken(siteUser); + authTokenProvider.generateAndSaveRefreshToken(siteUser); } @Test diff --git a/src/test/java/com/example/solidconnection/e2e/SignInTest.java b/src/test/java/com/example/solidconnection/e2e/SignInTest.java index 26eba657a..8d3ddc75f 100644 --- a/src/test/java/com/example/solidconnection/e2e/SignInTest.java +++ b/src/test/java/com/example/solidconnection/e2e/SignInTest.java @@ -18,8 +18,8 @@ import java.time.LocalDate; -import static com.example.solidconnection.auth.domain.TokenType.KAKAO_OAUTH; import static com.example.solidconnection.auth.domain.TokenType.REFRESH; +import static com.example.solidconnection.auth.domain.TokenType.SIGN_UP; import static com.example.solidconnection.e2e.DynamicFixture.createKakaoUserInfoDtoByEmail; import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; import static com.example.solidconnection.scheduler.UserRemovalScheduler.ACCOUNT_RECOVER_DURATION; @@ -65,7 +65,7 @@ class SignInTest extends BaseEndToEndTest { () -> assertThat(response.nickname()).isEqualTo(kakaoProfileDto.nickname()), () -> assertThat(response.profileImageUrl()).isEqualTo(kakaoProfileDto.profileImageUrl()), () -> assertThat(response.kakaoOauthToken()).isNotNull()); - assertThat(redisTemplate.opsForValue().get(KAKAO_OAUTH.addPrefixToSubject(email))) + assertThat(redisTemplate.opsForValue().get(SIGN_UP.addPrefix(email))) .as("카카오 인증 토큰을 저장한다.") .isEqualTo(response.kakaoOauthToken()); } @@ -95,7 +95,7 @@ class SignInTest extends BaseEndToEndTest { () -> assertThat(response.isRegistered()).isTrue(), () -> assertThat(response.accessToken()).isNotNull(), () -> assertThat(response.refreshToken()).isNotNull()); - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefixToSubject(siteUser.getId().toString()))) + assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(siteUser.getId().toString()))) .as("리프레시 토큰을 저장한다.") .isEqualTo(response.refreshToken()); } @@ -130,7 +130,7 @@ class SignInTest extends BaseEndToEndTest { () -> assertThat(response.accessToken()).isNotNull(), () -> assertThat(response.refreshToken()).isNotNull(), () -> assertThat(updatedSiteUser.getQuitedAt()).isNull()); - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefixToSubject(siteUser.getId().toString()))) + assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(siteUser.getId().toString()))) .as("리프레시 토큰을 저장한다.") .isEqualTo(response.refreshToken()); } diff --git a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java b/src/test/java/com/example/solidconnection/e2e/SignUpTest.java index 1eb152387..1bbe150a8 100644 --- a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java +++ b/src/test/java/com/example/solidconnection/e2e/SignUpTest.java @@ -2,7 +2,8 @@ import com.example.solidconnection.auth.dto.SignUpRequest; import com.example.solidconnection.auth.dto.SignUpResponse; -import com.example.solidconnection.auth.service.TokenProvider; +import com.example.solidconnection.auth.service.AuthTokenProvider; +import com.example.solidconnection.auth.service.SignUpTokenProvider; import com.example.solidconnection.custom.response.ErrorResponse; import com.example.solidconnection.entity.Country; import com.example.solidconnection.entity.InterestedCountry; @@ -27,7 +28,6 @@ import java.util.List; -import static com.example.solidconnection.auth.domain.TokenType.KAKAO_OAUTH; import static com.example.solidconnection.auth.domain.TokenType.REFRESH; import static com.example.solidconnection.custom.exception.ErrorCode.JWT_EXCEPTION; import static com.example.solidconnection.custom.exception.ErrorCode.NICKNAME_ALREADY_EXISTED; @@ -56,7 +56,10 @@ class SignUpTest extends BaseEndToEndTest { InterestedCountyRepository interestedCountyRepository; @Autowired - TokenProvider tokenProvider; + AuthTokenProvider authTokenProvider; + + @Autowired + SignUpTokenProvider signUpTokenProvider; @Autowired RedisTemplate redisTemplate; @@ -71,8 +74,7 @@ class SignUpTest extends BaseEndToEndTest { // setup - 카카오 토큰 발급 String email = "email@email.com"; - String generatedKakaoToken = tokenProvider.generateToken(email, KAKAO_OAUTH); - tokenProvider.saveToken(generatedKakaoToken, KAKAO_OAUTH); + String generatedKakaoToken = signUpTokenProvider.generateAndSaveSignUpToken(email); // request - body 생성 및 요청 List interestedRegionNames = List.of("유럽"); @@ -110,7 +112,7 @@ class SignUpTest extends BaseEndToEndTest { () -> assertThat(interestedCountries).containsExactlyInAnyOrderElementsOf(countries) ); - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefixToSubject(savedSiteUser.getId().toString()))) + assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(savedSiteUser.getId().toString()))) .as("리프레시 토큰을 저장한다.") .isEqualTo(response.refreshToken()); } @@ -124,8 +126,7 @@ class SignUpTest extends BaseEndToEndTest { // setup - 카카오 토큰 발급 String email = "email@email.com"; - String generatedKakaoToken = tokenProvider.generateToken(email, KAKAO_OAUTH); - tokenProvider.saveToken(generatedKakaoToken, KAKAO_OAUTH); + String generatedKakaoToken = signUpTokenProvider.generateAndSaveSignUpToken(email); // request - body 생성 및 요청 SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, null, null, @@ -150,8 +151,7 @@ class SignUpTest extends BaseEndToEndTest { siteUserRepository.save(alreadyExistUser); // setup - 카카오 토큰 발급 - String generatedKakaoToken = tokenProvider.generateToken(alreadyExistEmail, KAKAO_OAUTH); - tokenProvider.saveToken(generatedKakaoToken, KAKAO_OAUTH); + String generatedKakaoToken = signUpTokenProvider.generateAndSaveSignUpToken(alreadyExistEmail); // request - body 생성 및 요청 SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, null, null, diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java index b7e112d00..01b2b5730 100644 --- a/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java +++ b/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java @@ -1,7 +1,6 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.auth.service.TokenProvider; -import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.university.dto.LanguageRequirementResponse; @@ -24,7 +23,7 @@ class UniversityDetailTest extends UniversityDataSetUpEndToEndTest { private SiteUserRepository siteUserRepository; @Autowired - private TokenProvider tokenProvider; + private AuthTokenProvider authTokenProvider; private String accessToken; @@ -36,11 +35,10 @@ public void setUpUserAndToken() { siteUserRepository.save(siteUser); // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + accessToken = authTokenProvider.generateAccessToken(siteUser); + authTokenProvider.generateAndSaveRefreshToken(siteUser); } - + @Test void 대학교_정보를_조회한다() { // request - 요청 diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java index 301b373c4..3b5733d82 100644 --- a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java +++ b/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java @@ -1,7 +1,6 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.auth.service.TokenProvider; -import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; @@ -28,7 +27,7 @@ import static com.example.solidconnection.university.service.UniversityLikeService.LIKE_CANCELED_MESSAGE; import static com.example.solidconnection.university.service.UniversityLikeService.LIKE_SUCCESS_MESSAGE; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; @DisplayName("대학교 좋아요 테스트") class UniversityLikeTest extends UniversityDataSetUpEndToEndTest { @@ -43,7 +42,7 @@ class UniversityLikeTest extends UniversityDataSetUpEndToEndTest { private LikedUniversityRepository likedUniversityRepository; @Autowired - private TokenProvider tokenProvider; + private AuthTokenProvider authTokenProvider; private String accessToken; private SiteUser siteUser; @@ -55,9 +54,8 @@ public void setUpUserAndToken() { siteUserRepository.save(siteUser); // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + accessToken = authTokenProvider.generateAccessToken(siteUser); + authTokenProvider.generateAndSaveRefreshToken(siteUser); } @Test @@ -138,7 +136,7 @@ public void setUpUserAndToken() { // request - 요청 IsLikeResponse response = RestAssured.given().log().all() .header("Authorization", "Bearer " + accessToken) - .get("/university/"+ 괌대학_A_지원_정보.getId() +"/like") + .get("/university/" + 괌대학_A_지원_정보.getId() + "/like") .then().log().all() .statusCode(HttpStatus.OK.value()) .extract().as(IsLikeResponse.class); diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java index 358f779cd..8e1e8184f 100644 --- a/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java +++ b/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java @@ -1,7 +1,6 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.auth.service.TokenProvider; -import com.example.solidconnection.auth.domain.TokenType; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.entity.InterestedCountry; import com.example.solidconnection.entity.InterestedRegion; import com.example.solidconnection.repositories.InterestedCountyRepository; @@ -38,7 +37,7 @@ class UniversityRecommendTest extends UniversityDataSetUpEndToEndTest { private InterestedCountyRepository interestedCountyRepository; @Autowired - private TokenProvider tokenProvider; + private AuthTokenProvider authTokenProvider; @Autowired private GeneralUniversityRecommendService generalUniversityRecommendService; @@ -54,9 +53,8 @@ void setUp() { generalUniversityRecommendService.init(); // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + accessToken = authTokenProvider.generateAccessToken(siteUser); + authTokenProvider.generateAndSaveRefreshToken(siteUser); } @Test diff --git a/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java b/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java index 22abbfb53..3b508d014 100644 --- a/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java +++ b/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java @@ -1,7 +1,6 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.auth.domain.TokenType; -import com.example.solidconnection.auth.service.TokenProvider; +import com.example.solidconnection.auth.service.AuthTokenProvider; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; @@ -23,7 +22,7 @@ class UniversitySearchTest extends UniversityDataSetUpEndToEndTest { private SiteUserRepository siteUserRepository; @Autowired - private TokenProvider tokenProvider; + private AuthTokenProvider authTokenProvider; private String accessToken; private SiteUser siteUser; @@ -35,9 +34,8 @@ public void setUpUserAndToken() { siteUserRepository.save(siteUser); // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = tokenProvider.generateToken(siteUser, TokenType.ACCESS); - String refreshToken = tokenProvider.generateToken(siteUser, TokenType.REFRESH); - tokenProvider.saveToken(refreshToken, TokenType.REFRESH); + accessToken = authTokenProvider.generateAccessToken(siteUser); + authTokenProvider.generateAndSaveRefreshToken(siteUser); } @Test