Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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 user1 = siteUserFixture.사용자(1, "test1");
SiteUser user2 = siteUserFixture.사용자(2, "test2");
SiteUser user3 = siteUserFixture.사용자(3, "test3");
gpaScore3 = createGpaScore(user3, VerifyStatus.REJECTED);
gpaScore2 = createGpaScore(user2, VerifyStatus.PENDING);
gpaScore1 = createGpaScore(user1, 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 user1 = siteUserFixture.사용자(1, "test1");
SiteUser user2 = siteUserFixture.사용자(2, "test2");
SiteUser user3 = siteUserFixture.사용자(3, "test3");
languageTestScore3 = createLanguageTestScore(user3, VerifyStatus.REJECTED);
languageTestScore2 = createLanguageTestScore(user2, VerifyStatus.PENDING);
languageTestScore1 = createLanguageTestScore(user1, 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 user = siteUserFixture.사용자();
Subject subject = authTokenProvider.toSubject(user);
AccessToken accessToken = authTokenProvider.generateAccessToken(subject); // todo: #296

// when
authService.quit(siteUser, accessToken.token());
authService.quit(user, accessToken.token());

// then
LocalDate tomorrow = LocalDate.now().plusDays(1);
String refreshTokenKey = TokenType.REFRESH.addPrefix(subject.value());
assertAll(
() -> assertThat(siteUser.getQuitedAt()).isEqualTo(tomorrow),
() -> assertThat(user.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,19 +24,15 @@ 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);
EmailSignInRequest signInRequest = new EmailSignInRequest(siteUser.getEmail(), rawPassword);
SiteUser user = siteUserFixture.사용자(email, rawPassword);
EmailSignInRequest signInRequest = new EmailSignInRequest(user.getEmail(), rawPassword);

// when
SignInResponse signInResponse = emailSignInService.signIn(signInRequest);
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 user;
private String subject;

@BeforeEach
void setUp() {
siteUser = createSiteUser();
siteUserRepository.save(siteUser);
subject = siteUser.getId().toString();
user = siteUserFixture.사용자();
subject = user.getId().toString();
}

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

// 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);
user.setQuitedAt(LocalDate.now().minusDays(1));

// when
signInService.signIn(siteUser);
signInService.signIn(user);

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

private SiteUser createSiteUser() {
return new SiteUser(
"test@example.com",
"nickname",
"profileImageUrl",
PreparationStatus.CONSIDERING,
Role.MENTEE
);
assertThat(user.getQuitedAt()).isNull();
}
}
Loading
Loading