Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
0ff5c51
feat: SiteUserFixture에 유저 생성 메서드 추가
Gyuhyeok99 May 12, 2025
f7436ae
refactor: 대학 관련 테스트 유저 데이터 Fixture 메서드로 변경
Gyuhyeok99 May 12, 2025
0ea67a9
refactor: 유저 관련 테스트 유저 데이터 Fixture 메서드로 변경
Gyuhyeok99 May 12, 2025
82e8126
refactor: 점수 관련 테스트 유저 데이터 Fixture 메서드로 변경
Gyuhyeok99 May 12, 2025
0e6c585
refactor: 동시성 관련 테스트 유저 데이터 Fixture 메서드로 변경
Gyuhyeok99 May 12, 2025
6e13ea6
refactor: 인증 관련 테스트 유저 데이터 Fixture 메서드로 변경
Gyuhyeok99 May 12, 2025
64627fd
refactor: 어드민 관련 테스트 유저 데이터 Fixture 메서드로 변경
Gyuhyeok99 May 12, 2025
94037f5
refactor: 커스텀 관련 테스트 유저 데이터 Fixture 메서드로 변경
Gyuhyeok99 May 12, 2025
313cf65
refactor: SiteUserFixtureBuilder에서 비밀번호 인코딩 처리 통일
Gyuhyeok99 May 13, 2025
05e9733
refactor: 재사용성 없는 fixture 제거
Gyuhyeok99 May 18, 2025
86de879
refactor: 테스트 유저 메서드명 사용자()로 통일
Gyuhyeok99 May 18, 2025
0d06904
refactor: 테스트 어드민 메서드명 관리자()로 통일
Gyuhyeok99 May 18, 2025
65dfc47
refactor: Repository 테스트는 fixture 대신 entity 사용하도록 변경
Gyuhyeok99 May 18, 2025
75f6294
refactor: 커스텀 프로필 사용자로 이름 변경
Gyuhyeok99 May 19, 2025
a4f5d17
refactor: 커스텀 프로필 생성 함수 private로 변경
Gyuhyeok99 May 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@
import com.example.solidconnection.score.domain.GpaScore;
import com.example.solidconnection.score.repository.GpaScoreRepository;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.siteuser.fixture.SiteUserFixture;
import com.example.solidconnection.support.integration.BaseIntegrationTest;
import com.example.solidconnection.type.PreparationStatus;
import com.example.solidconnection.type.Role;
import com.example.solidconnection.type.VerifyStatus;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
Expand All @@ -38,26 +36,23 @@ class AdminGpaScoreServiceTest extends BaseIntegrationTest {
private AdminGpaScoreService adminGpaScoreService;

@Autowired
private SiteUserRepository siteUserRepository;
private GpaScoreRepository gpaScoreRepository;

@Autowired
private GpaScoreRepository gpaScoreRepository;
private SiteUserFixture siteUserFixture;

private SiteUser siteUser1;
private SiteUser siteUser2;
private SiteUser siteUser3;
private GpaScore gpaScore1;
private GpaScore gpaScore2;
private GpaScore gpaScore3;

@BeforeEach
void setUp() {
siteUser1 = createSiteUser(1, "test1");
siteUser2 = createSiteUser(2, "test2");
siteUser3 = createSiteUser(3, "test3");
gpaScore3 = createGpaScore(siteUser3, VerifyStatus.REJECTED);
gpaScore2 = createGpaScore(siteUser2, VerifyStatus.PENDING);
gpaScore1 = createGpaScore(siteUser1, VerifyStatus.PENDING);
SiteUser 테스트_유저_1 = siteUserFixture.테스트_유저(1, "test1");
SiteUser 테스트_유저_2 = siteUserFixture.테스트_유저(2, "test2");
SiteUser 테스트_유저_3 = siteUserFixture.테스트_유저(3, "test3");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기에도 "테스트_" 를 붙이신 이유가 있으신가요?
fixture 생성 함수에서도 그렇고, 변수명에서도 사용되니 규혁님이 이렇게 하신게 의도적일거라는 생각이 드네요~ 왜 이렇게 하셨는지 궁금합니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위에 이야기를 듣고 나니 안붙이는 게 더 좋을 거 같다는 생각이 드네요! 새벽에 작업했었는데 깊게 생각하지 않고 작성했던 거 같아요 😅

gpaScore3 = createGpaScore(테스트_유저_3, VerifyStatus.REJECTED);
gpaScore2 = createGpaScore(테스트_유저_2, VerifyStatus.PENDING);
gpaScore1 = createGpaScore(테스트_유저_1, VerifyStatus.PENDING);
}

@Nested
Expand Down Expand Up @@ -209,17 +204,6 @@ class GPA_점수_검증_및_수정 {
}
}

private SiteUser createSiteUser(int index, String nickname) {
SiteUser siteUser = new SiteUser(
"test" + index + " @example.com",
nickname,
"profileImageUrl",
PreparationStatus.CONSIDERING,
Role.MENTEE
);
return siteUserRepository.save(siteUser);
}

private GpaScore createGpaScore(SiteUser siteUser, VerifyStatus status) {
GpaScore gpaScore = new GpaScore(
new Gpa(4.0, 4.5, "/gpa-report.pdf"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@
import com.example.solidconnection.score.domain.LanguageTestScore;
import com.example.solidconnection.score.repository.LanguageTestScoreRepository;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.siteuser.fixture.SiteUserFixture;
import com.example.solidconnection.support.integration.BaseIntegrationTest;
import com.example.solidconnection.type.PreparationStatus;
import com.example.solidconnection.type.Role;
import com.example.solidconnection.type.VerifyStatus;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
Expand All @@ -39,26 +37,23 @@ class AdminLanguageTestScoreServiceTest extends BaseIntegrationTest {
private AdminLanguageTestScoreService adminLanguageTestScoreService;

@Autowired
private SiteUserRepository siteUserRepository;
private LanguageTestScoreRepository languageTestScoreRepository;

@Autowired
private LanguageTestScoreRepository languageTestScoreRepository;
private SiteUserFixture siteUserFixture;
Comment on lines 39 to +43
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixture 를 맨 아래로 두신건 이게 덜중요하다는 생각 때문인가요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앗 주로 테스트를 하는 AdminLanguageTestScoreService를 제일 위에서 주입받는 게 일단 맞다고 생각했습니다!

LanguageTestScoreRepository는 어차피 Fixture가 생기면 없어질 의존성이니 크게 신경을 안썼는데 주석으로 표시하면 좋았겠네요

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

의도가 궁금해서 질문드렸던거였어요 ㅎㅎ
답변 감사합니다!


private SiteUser siteUser1;
private SiteUser siteUser2;
private SiteUser siteUser3;
private LanguageTestScore languageTestScore1;
private LanguageTestScore languageTestScore2;
private LanguageTestScore languageTestScore3;

@BeforeEach
void setUp() {
siteUser1 = createSiteUser(1, "test1");
siteUser2 = createSiteUser(2, "test2");
siteUser3 = createSiteUser(3, "test3");
languageTestScore3 = createLanguageTestScore(siteUser3, VerifyStatus.REJECTED);
languageTestScore2 = createLanguageTestScore(siteUser2, VerifyStatus.PENDING);
languageTestScore1 = createLanguageTestScore(siteUser1, VerifyStatus.PENDING);
SiteUser 테스트_유저_1 = siteUserFixture.테스트_유저(1, "test1");
SiteUser 테스트_유저_2 = siteUserFixture.테스트_유저(2, "test2");
SiteUser 테스트_유저_3 = siteUserFixture.테스트_유저(3, "test3");
languageTestScore3 = createLanguageTestScore(테스트_유저_3, VerifyStatus.REJECTED);
languageTestScore2 = createLanguageTestScore(테스트_유저_2, VerifyStatus.PENDING);
languageTestScore1 = createLanguageTestScore(테스트_유저_1, VerifyStatus.PENDING);
}

@Nested
Expand Down Expand Up @@ -219,17 +214,6 @@ class 어학점수_검증_및_수정 {
}
}

private SiteUser createSiteUser(int index, String nickname) {
SiteUser siteUser = new SiteUser(
"test" + index + " @example.com",
nickname,
"profileImageUrl",
PreparationStatus.CONSIDERING,
Role.MENTEE
);
return siteUserRepository.save(siteUser);
}

private LanguageTestScore createLanguageTestScore(SiteUser siteUser, VerifyStatus status) {
LanguageTestScore languageTestScore = new LanguageTestScore(
new LanguageTest(TOEIC, "500", "/toeic-report.pdf"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
import com.example.solidconnection.auth.dto.ReissueResponse;
import com.example.solidconnection.custom.exception.CustomException;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.siteuser.fixture.SiteUserFixture;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.PreparationStatus;
import com.example.solidconnection.type.Role;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
Expand All @@ -33,10 +31,10 @@ class AuthServiceTest {
private AuthTokenProvider authTokenProvider;

@Autowired
private SiteUserRepository siteUserRepository;
private RedisTemplate<String, String> redisTemplate;

@Autowired
private RedisTemplate<String, String> redisTemplate;
private SiteUserFixture siteUserFixture;

@Test
void 로그아웃한다() {
Expand All @@ -58,18 +56,18 @@ class AuthServiceTest {
@Test
void 탈퇴한다() {
// given
SiteUser siteUser = createSiteUser();
Subject subject = authTokenProvider.toSubject(siteUser);
SiteUser 테스트_유저 = siteUserFixture.테스트_유저();
Subject subject = authTokenProvider.toSubject(테스트_유저);
AccessToken accessToken = authTokenProvider.generateAccessToken(subject); // todo: #296

// when
authService.quit(siteUser, accessToken.token());
authService.quit(테스트_유저, accessToken.token());

// then
LocalDate tomorrow = LocalDate.now().plusDays(1);
String refreshTokenKey = TokenType.REFRESH.addPrefix(subject.value());
assertAll(
() -> assertThat(siteUser.getQuitedAt()).isEqualTo(tomorrow),
() -> assertThat(테스트_유저.getQuitedAt()).isEqualTo(tomorrow),
() -> assertThat(redisTemplate.opsForValue().get(refreshTokenKey)).isNull(),
() -> assertThat(authTokenProvider.isTokenBlacklisted(accessToken.token())).isTrue()
);
Expand Down Expand Up @@ -105,15 +103,4 @@ class 토큰을_재발급한다 {
.hasMessage(REFRESH_TOKEN_EXPIRED.getMessage());
}
}

private SiteUser createSiteUser() {
SiteUser siteUser = new SiteUser(
"test@example.com",
"nickname",
"profileImageUrl",
PreparationStatus.CONSIDERING,
Role.MENTEE
);
return siteUserRepository.save(siteUser);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,14 @@
import com.example.solidconnection.auth.dto.SignInResponse;
import com.example.solidconnection.custom.exception.CustomException;
import com.example.solidconnection.custom.exception.ErrorCode;
import com.example.solidconnection.siteuser.domain.AuthType;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.siteuser.fixture.SiteUserFixture;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.PreparationStatus;
import com.example.solidconnection.type.Role;
import org.assertj.core.api.Assertions;
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.security.crypto.password.PasswordEncoder;

import static org.assertj.core.api.Assertions.assertThatCode;
import static org.junit.jupiter.api.Assertions.assertAll;
Expand All @@ -28,18 +24,14 @@ class EmailSignInServiceTest {
private EmailSignInService emailSignInService;

@Autowired
private SiteUserRepository siteUserRepository;

@Autowired
private PasswordEncoder passwordEncoder;
private SiteUserFixture siteUserFixture;

@Test
void 로그인에_성공한다() {
// given
String email = "testEmail";
String rawPassword = "testPassword";
SiteUser siteUser = createSiteUser(email, rawPassword);
siteUserRepository.save(siteUser);
SiteUser siteUser = siteUserFixture.테스트_유저(email, rawPassword);
EmailSignInRequest signInRequest = new EmailSignInRequest(siteUser.getEmail(), rawPassword);

// when
Expand Down Expand Up @@ -70,8 +62,7 @@ class 로그인에_실패한다 {
void 비밀번호가_일치하지_않으면_예외_응답을_반환한다() {
// given
String email = "testEmail";
SiteUser siteUser = createSiteUser(email, "testPassword");
siteUserRepository.save(siteUser);
siteUserFixture.테스트_유저(email, "testPassword");
EmailSignInRequest signInRequest = new EmailSignInRequest(email, "틀린비밀번호");

// when & then
Expand All @@ -80,17 +71,4 @@ class 로그인에_실패한다 {
.hasMessageContaining(ErrorCode.USER_NOT_FOUND.getMessage());
}
}

private SiteUser createSiteUser(String email, String rawPassword) {
String encodedPassword = passwordEncoder.encode(rawPassword);
return new SiteUser(
email,
"nickname",
"profileImageUrl",
PreparationStatus.CONSIDERING,
Role.MENTEE,
AuthType.EMAIL,
encodedPassword
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
import com.example.solidconnection.auth.dto.SignInResponse;
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.siteuser.fixture.SiteUserFixture;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.PreparationStatus;
import com.example.solidconnection.type.Role;
import com.example.solidconnection.util.JwtUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
Expand All @@ -31,28 +29,24 @@ class SignInServiceTest {
private JwtProperties jwtProperties;

@Autowired
private AuthTokenProvider authTokenProvider;

@Autowired
private SiteUserRepository siteUserRepository;
private RedisTemplate<String, String> redisTemplate;

@Autowired
private RedisTemplate<String, String> redisTemplate;
private SiteUserFixture siteUserFixture;

private SiteUser siteUser;
private SiteUser 테스트_유저;
private String subject;

@BeforeEach
void setUp() {
siteUser = createSiteUser();
siteUserRepository.save(siteUser);
subject = siteUser.getId().toString();
테스트_유저 = siteUserFixture.테스트_유저();
subject = 테스트_유저.getId().toString();
}

@Test
void 성공적으로_로그인한다() {
// when
SignInResponse signInResponse = signInService.signIn(siteUser);
SignInResponse signInResponse = signInService.signIn(테스트_유저);

// then
String accessTokenSubject = JwtUtils.parseSubject(signInResponse.accessToken(), jwtProperties.secret());
Expand All @@ -67,23 +61,12 @@ void setUp() {
@Test
void 탈퇴한_이력이_있으면_초기화한다() {
// given
siteUser.setQuitedAt(LocalDate.now().minusDays(1));
siteUserRepository.save(siteUser);
테스트_유저.setQuitedAt(LocalDate.now().minusDays(1));

// when
signInService.signIn(siteUser);
signInService.signIn(테스트_유저);

// then
assertThat(siteUser.getQuitedAt()).isNull();
}

private SiteUser createSiteUser() {
return new SiteUser(
"test@example.com",
"nickname",
"profileImageUrl",
PreparationStatus.CONSIDERING,
Role.MENTEE
);
assertThat(테스트_유저.getQuitedAt()).isNull();
}
}
Loading
Loading