-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
회원가입 및 로그인 & 인가 기능 구현 #82
Changes from 1 commit
076d96d
f3ac5d1
0b5e2ed
aa19fd6
0335db6
6391141
147bad7
149f1ed
b4015f7
b9f6d3e
326f668
37b54f0
861a836
7f6a981
c856828
435348b
fd4730e
9361516
45ef172
3f4a538
b26ea29
33d2a2b
6efed21
1e6ab82
085d37b
b3e2d2d
d0553ba
059534a
bbac2a0
dc3e480
62605a7
c35ae22
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
package com.votogether.global.jwt; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.assertj.core.api.Assertions.assertThatThrownBy; | ||
|
||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.votogether.domain.RepositoryTest; | ||
import com.votogether.domain.member.entity.Gender; | ||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.member.entity.SocialType; | ||
import com.votogether.domain.member.repository.MemberRepository; | ||
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.junit.jupiter.params.ParameterizedTest; | ||
import org.junit.jupiter.params.provider.ValueSource; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
|
||
@RepositoryTest | ||
class TokenProcessorTest { | ||
|
||
@Autowired | ||
private MemberRepository memberRepository; | ||
|
||
private TokenProcessor tokenProcessor; | ||
private ObjectMapper objectMapper; | ||
|
||
@BeforeEach | ||
void setUp() { | ||
objectMapper = new ObjectMapper(); | ||
String secretKey = "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"; | ||
int expirationTime = 100000; | ||
tokenProcessor = new TokenProcessor( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 좀 더 효과적인 방법으로 리팩터링 진행했습니다! |
||
secretKey, | ||
expirationTime, | ||
objectMapper | ||
); | ||
} | ||
|
||
@Test | ||
@DisplayName("토큰을 생성한다.") | ||
void generateToken() throws Exception { | ||
// given | ||
Member member = Member.builder() | ||
.nickname("저문") | ||
.gender(Gender.MALE) | ||
.ageRange("20~29") | ||
.birthday("0101") | ||
.socialType(SocialType.KAKAO) | ||
.socialId("123123") | ||
.point(0) | ||
.build(); | ||
|
||
memberRepository.save(member); | ||
|
||
// when | ||
String token = tokenProcessor.generateToken(member); | ||
|
||
// then | ||
TokenPayload tokenPayload = tokenProcessor.parseToken(token); | ||
assertThat(tokenPayload.memberId()).isEqualTo(member.getId()); | ||
} | ||
|
||
@Nested | ||
class ResolveToken { | ||
|
||
@Test | ||
@DisplayName("토큰의 prefix를 제외한 값을 추출한다.") | ||
void resolveTokenSuccess() throws JsonProcessingException { | ||
// given | ||
Member member = Member.builder() | ||
.nickname("저문") | ||
.gender(Gender.MALE) | ||
.ageRange("20~29") | ||
.birthday("0101") | ||
.socialType(SocialType.KAKAO) | ||
.socialId("123123") | ||
.point(0) | ||
.build(); | ||
memberRepository.save(member); | ||
|
||
String token = tokenProcessor.generateToken(member); | ||
token = "Bearer " + token; | ||
|
||
// when | ||
String resolvedToken = tokenProcessor.resolveToken(token); | ||
|
||
// then | ||
TokenPayload tokenPayload = tokenProcessor.parseToken(resolvedToken); | ||
assertThat(tokenPayload.memberId()).isEqualTo(member.getId()); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(strings = {"Bear", "Barrier", "Baerer", "bearer"}) | ||
@DisplayName("토큰의 prefix를 제외한 값을 추출한다.") | ||
void resolveTokenFail(String prefix) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 올리자마자 확인해서 수정했습니다! ㅎㅎ |
||
// given | ||
Member member = Member.builder() | ||
.nickname("저문") | ||
.gender(Gender.MALE) | ||
.ageRange("20~29") | ||
.birthday("0101") | ||
.socialType(SocialType.KAKAO) | ||
.socialId("123123") | ||
.point(0) | ||
.build(); | ||
memberRepository.save(member); | ||
|
||
String token = prefix + tokenProcessor.generateToken(member); | ||
|
||
// when, then | ||
assertThatThrownBy(() -> tokenProcessor.resolveToken(token)) | ||
.isInstanceOf(IllegalArgumentException.class) | ||
.hasMessage("올바르지 않은 토큰입니다."); | ||
} | ||
|
||
} | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2
:@RepositoryTest
는 JpaConfig를 import하고 있으므로 빈으로 등록된 ObjectMapper를 사용해도 괜찮지 않을까요?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 등록해놓고도 인지를 못하고 있었네요...ㅎㅎ
수정하겠습니다!