Skip to content

Commit

Permalink
[feat] Add TokenProvider, AuthrizationExtractor Test
Browse files Browse the repository at this point in the history
  • Loading branch information
daily1313 committed Mar 17, 2024
1 parent e0cefb7 commit 1aedf47
Show file tree
Hide file tree
Showing 2 changed files with 157 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,2 +1,94 @@
package allercheck.backend.global.web.jwt;public class AuthorizationExtractorTest {
package allercheck.backend.global.web.jwt;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import allercheck.backend.domain.auth.exception.InvalidTokenException;
import allercheck.backend.global.jwt.AuthorizationExtractor;
import jakarta.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpHeaders;
import org.springframework.test.context.TestPropertySource;

@SuppressWarnings("NonAsciiCharacters")
@TestPropertySource(locations = "classpath:secure.properties")
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
@SpringBootTest
public class AuthorizationExtractorTest {

@Autowired
private AuthorizationExtractor authorizationExtractor;

@Test
void 액세스_토큰을_추출한다() {
// given
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getHeader(HttpHeaders.AUTHORIZATION)).thenReturn("Bearer 1234");

// when
String accessToken = authorizationExtractor.extract(request);

// then
assertThat(accessToken).isEqualTo("1234");
}

@Test
void Token_값이_Bearer_접두사로_시작하면_예외가_발생한다() {
//given
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getHeader(HttpHeaders.AUTHORIZATION)).thenReturn("1234");

//when & then
assertThatThrownBy(() -> authorizationExtractor.extract(request))
.isInstanceOf(InvalidTokenException.class);
}

@Test
void Token_값이_존재하지_않으면_예외가_발생한다() {
//given
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getHeader(HttpHeaders.AUTHORIZATION)).thenReturn("");

//when & then
assertThatThrownBy(() -> authorizationExtractor.extract(request))
.isInstanceOf(InvalidTokenException.class);
}

@Test
void header가_비어있으면_예외가_발생한다() {
//given
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getHeader("")).thenReturn("1234");

//when & then
assertThatThrownBy(() -> authorizationExtractor.extract(request))
.isInstanceOf(InvalidTokenException.class);
}

@Test
void header_값이_null이면_예외가_발생한다() {
//given
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getHeader(null)).thenReturn("1234");

//when & then
assertThatThrownBy(() -> authorizationExtractor.extract(request))
.isInstanceOf(InvalidTokenException.class);
}

@Test
void 액세스_토큰값이_누락되면_예외가_발생한다() {
//given
HttpServletRequest request = mock(HttpServletRequest.class);

//when & then
assertThatThrownBy(() -> authorizationExtractor.extract(request))
.isInstanceOf(InvalidTokenException.class);
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,65 @@
package allercheck.backend.global.web.jwt;public class TokenProviderTest {
package allercheck.backend.global.web.jwt;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

import allercheck.backend.domain.auth.exception.InvalidTokenException;
import allercheck.backend.global.jwt.TokenProvider;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

@SuppressWarnings("NonAsciiCharacters")
@TestPropertySource(locations = "classpath:secure.properties")
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
@SpringBootTest
public class TokenProviderTest {

@Value("${jwt.secret-key}")
private String secretKey;

@Value("${jwt.token.expire-length}")
private long validityTime;

@Autowired
private TokenProvider tokenProvider;

@BeforeEach
void setUp() {
tokenProvider = new TokenProvider(secretKey, validityTime);
}

@Test
public void jwt_토큰을_생성한다() {
//given
String payload = String.valueOf(1L);

// when
String token = tokenProvider.createToken(payload);

// then
assertThat(token).isNotEmpty();
}

@Test
public void 토큰_정보로_payload_조회한다() {
//given
String payload = String.valueOf(1L);
String token = tokenProvider.createToken(payload);

//when & then
assertThat(tokenProvider.getPayLoad(token)).isEqualTo(payload);
}

@Test
public void 토큰에_null값이_들어_예외가_발생한다() {
// then
assertThatThrownBy(() -> tokenProvider.validateToken(null))
.isInstanceOf(InvalidTokenException.class);
}
}

0 comments on commit 1aedf47

Please sign in to comment.