Skip to content

Commit

Permalink
refactor: 대규모 리펙토링 (#94)
Browse files Browse the repository at this point in the history
- auth, member 단위 테스트 수정
  • Loading branch information
soomanbaek committed Oct 27, 2023
1 parent 3e16ba7 commit f426a00
Show file tree
Hide file tree
Showing 9 changed files with 360 additions and 302 deletions.
11 changes: 0 additions & 11 deletions src/test/java/blacktokkies/toquiz/config/WithCustomMockUser.java

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package blacktokkies.toquiz.member.application;
package blacktokkies.toquiz.domain.auth.application;

import blacktokkies.toquiz.domain.activeinfo.ActiveInfoRepository;
import blacktokkies.toquiz.domain.activeinfo.domain.ActiveInfo;
import blacktokkies.toquiz.domain.activeinfo.domain.ActivePanel;
import blacktokkies.toquiz.domain.member.application.AuthService;
import blacktokkies.toquiz.domain.member.dao.MemberRepository;
import blacktokkies.toquiz.domain.auth.jwt.JwtTokenProvider;
import blacktokkies.toquiz.domain.member.domain.MemberRepository;
import blacktokkies.toquiz.domain.member.domain.Member;
import blacktokkies.toquiz.domain.member.dto.request.LoginRequest;
import blacktokkies.toquiz.domain.member.dto.request.SignUpRequest;
import blacktokkies.toquiz.domain.member.dto.response.AuthenticateResponse;
import blacktokkies.toquiz.domain.model.Provider;
import blacktokkies.toquiz.global.config.SecurityConfig;
import blacktokkies.toquiz.global.util.auth.TokenService;
import blacktokkies.toquiz.domain.auth.dto.LoginRequest;
import blacktokkies.toquiz.domain.auth.dto.SignUpRequest;
import blacktokkies.toquiz.domain.auth.dto.AuthenticateResponse;
import blacktokkies.toquiz.domain.member.domain.Provider;
import blacktokkies.toquiz.global.common.annotation.activeInfoId.ActiveInfoIdDto;
import blacktokkies.toquiz.global.common.annotation.auth.MemberEmailDto;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand All @@ -22,11 +22,11 @@
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.test.context.ContextConfiguration;

import java.util.HashMap;
import java.util.Optional;

import static blacktokkies.toquiz.utils.Constants.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
Expand All @@ -41,7 +41,9 @@ public class AuthServiceTest {
@Mock
private ActiveInfoRepository activeInfoRepository;
@Mock
private TokenService tokenService;
private RefreshTokenService refreshTokenService;
@Mock
private JwtTokenProvider jwtTokenProvider;

@Spy
private PasswordEncoder passwordEncoder;
Expand All @@ -56,12 +58,12 @@ void init(){
void signUp(){
// given
final SignUpRequest request = SignUpRequest.builder()
.email("[email protected]")
.password("test@311")
.nickname("TEST")
.email(EMAIL)
.password(PW)
.nickname(NICKNAME)
.build();
final ActiveInfo activeInfo = ActiveInfo.builder()
.id("5d3f30de25874467999fc7325f6539ba07d62a0b")
.id(ACTIVE_INFO_ID)
.activePanels(new HashMap<String, ActivePanel>())
.build();
Member member = request.toMemberWith(activeInfo);
Expand All @@ -83,78 +85,72 @@ void login(){
// given
passwordEncoder = new BCryptPasswordEncoder();

final String newAccessToken = "{NewAccessToken}";

LoginRequest request = LoginRequest.builder()
.email("[email protected]")
.password("test@311")
.email(EMAIL)
.password(PW)
.build();

Optional<Member> optionalMember = Optional.ofNullable(Member.builder()
.email("[email protected]")
.password(passwordEncoder.encode("test@311"))
.email(EMAIL)
.password(passwordEncoder.encode(PW))
.provider(Provider.LOCAL)
.nickname("TEST")
.nickname(NICKNAME)
.build());

doReturn(newAccessToken).when(tokenService).generateAccessToken(any(String.class));
doReturn(NEW_ACCESS_TOKEN).when(jwtTokenProvider).generateAccessToken(any(String.class));
doReturn(optionalMember).when(memberRepository).findByEmail(any(String.class));

// when
AuthenticateResponse result = authService.login(request);

// then
assertThat(result.getEmail()).isEqualTo(request.getEmail());
assertThat(result.getAccessToken()).isEqualTo(newAccessToken);
assertThat(result.getAccessToken()).isEqualTo(NEW_ACCESS_TOKEN);

// verify
verify(tokenService, times(1)).generateAccessToken(any(String.class));
verify(jwtTokenProvider, times(1)).generateAccessToken(any(String.class));
}

@Test
@DisplayName("로그아웃")
void logout(){
// given
final Member member = Member.builder()
.email("[email protected]")
.password(passwordEncoder.encode("test@311"))
.provider(Provider.LOCAL)
.nickname("TEST")
.build();
final MemberEmailDto memberEmailDto = new MemberEmailDto(EMAIL);

doNothing().when(tokenService).deleteRefreshToken(any(String.class));
doNothing().when(refreshTokenService).deleteRefreshTokenByEmail(any(String.class));

// when
authService.logout(member);
authService.logout(memberEmailDto);

// verify
verify(tokenService, times(1)).deleteRefreshToken(any(String.class));
// then
verify(refreshTokenService, times(1)).deleteRefreshTokenByEmail(any(String.class));
}

@Test
@DisplayName("회원 탈퇴")
void resign(){
passwordEncoder = new BCryptPasswordEncoder();
// given
final Member member = Member.builder()
.email("[email protected]")
.password(passwordEncoder.encode("test@311"))
Optional<Member> optionalMember = Optional.ofNullable(Member.builder()
.email(EMAIL)
.password(passwordEncoder.encode(PW))
.provider(Provider.LOCAL)
.nickname("TEST")
.activeInfoId("a1c2t3i4v5e6I7n8f9oId")
.build();
final String inputPassword = "test@311";
final String activeInfoId = "{ActiveInfoId}";
.nickname(NICKNAME)
.build());
final MemberEmailDto memberEmailDto = new MemberEmailDto(EMAIL);
final String inputPassword = PW;
final ActiveInfoIdDto activeInfoIdDto = new ActiveInfoIdDto(ACTIVE_INFO_ID);

doNothing().when(tokenService).deleteRefreshToken(any(String.class));
doReturn(optionalMember).when(memberRepository).findByEmail(any(String.class));
doNothing().when(refreshTokenService).deleteRefreshTokenByEmail(any(String.class));
doNothing().when(activeInfoRepository).deleteById(any(String.class));
doNothing().when(memberRepository).delete(any(Member.class));

// when
authService.resign(member, inputPassword, activeInfoId);
authService.resign(memberEmailDto, inputPassword, activeInfoIdDto);

// then
verify(tokenService, times(1)).deleteRefreshToken(any(String.class));
verify(refreshTokenService, times(1)).deleteRefreshTokenByEmail(any(String.class));
verify(activeInfoRepository, times(1)).deleteById(any(String.class));
verify(memberRepository, times(1)).delete(any(Member.class));
}
Expand All @@ -163,29 +159,27 @@ void resign(){
@DisplayName("리프레시 토큰 갱신")
void refresh(){
// given
final String refreshToken = "{RefreshToken}";
final String newAccessToken = "{NewAccessToken}";
final Member member = Member.builder()
.email("[email protected]")
.password(passwordEncoder.encode("test@311"))
Optional<Member> optionalMember = Optional.ofNullable(Member.builder()
.email(EMAIL)
.password(passwordEncoder.encode(PW))
.provider(Provider.LOCAL)
.nickname("TEST")
.activeInfoId("a1c2t3i4v5e6I7n8f9oId")
.build();
.nickname(NICKNAME)
.build());

doReturn(true).when(tokenService).isTokenValid(any(String.class), any(Member.class));
doNothing().when(tokenService).validateRefreshToken(any(String.class), any(String.class));
doReturn(newAccessToken).when(tokenService).generateAccessToken(any(String.class));
doReturn(EMAIL).when(jwtTokenProvider).extractEmailFromRefreshToken(any(String.class));
doReturn(ACCESS_TOKEN).when(jwtTokenProvider).generateAccessToken(any(String.class));
doReturn(optionalMember).when(memberRepository).findByEmail(any(String.class));

// when
AuthenticateResponse result = authService.refresh(member, refreshToken);
AuthenticateResponse result = authService.refresh(REFRESH_TOKEN);

// then
assertThat(result.getEmail()).isEqualTo(member.getEmail());
assertThat(result.getAccessToken()).isEqualTo(newAccessToken);
assertThat(result.getEmail()).isEqualTo(EMAIL);
assertThat(result.getAccessToken()).isEqualTo(ACCESS_TOKEN);

verify(tokenService, times(1)).isTokenValid(any(String.class), any(Member.class));
verify(tokenService, times(1)).validateRefreshToken(any(String.class), any(String.class));
verify(tokenService, times(1)).generateAccessToken(any(String.class));
verify(jwtTokenProvider, times(1))
.extractEmailFromRefreshToken(any(String.class));
verify(jwtTokenProvider, times(1))
.generateAccessToken(any(String.class));
}
}
Loading

0 comments on commit f426a00

Please sign in to comment.