Skip to content

Commit

Permalink
test: (#29) 토큰에 대한 검증 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
jeomxon committed Jul 20, 2023
1 parent 085d37b commit b3e2d2d
Showing 1 changed file with 121 additions and 0 deletions.
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(
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) {
// 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("올바르지 않은 토큰입니다.");
}

}

}

0 comments on commit b3e2d2d

Please sign in to comment.