diff --git a/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java b/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java index add4115ef..fc7735d86 100644 --- a/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java +++ b/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java @@ -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; @@ -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 @@ -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"), diff --git a/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java b/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java index a3d00457e..edf34670b 100644 --- a/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java +++ b/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java @@ -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; @@ -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; - 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 @@ -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"), diff --git a/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java b/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java index 18c7c4ef0..cb0ffbb96 100644 --- a/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java +++ b/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java @@ -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; @@ -33,10 +31,10 @@ class AuthServiceTest { private AuthTokenProvider authTokenProvider; @Autowired - private SiteUserRepository siteUserRepository; + private RedisTemplate redisTemplate; @Autowired - private RedisTemplate redisTemplate; + private SiteUserFixture siteUserFixture; @Test void 로그아웃한다() { @@ -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() ); @@ -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); - } } diff --git a/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java b/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java index 5a32ef362..4a98de6ce 100644 --- a/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java +++ b/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java @@ -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; @@ -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); @@ -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 @@ -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 - ); - } } diff --git a/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java b/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java index e40f20b7a..51eee236c 100644 --- a/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java +++ b/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java @@ -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; @@ -31,28 +29,24 @@ class SignInServiceTest { private JwtProperties jwtProperties; @Autowired - private AuthTokenProvider authTokenProvider; - - @Autowired - private SiteUserRepository siteUserRepository; + private RedisTemplate redisTemplate; @Autowired - private RedisTemplate 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()); @@ -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(); } } diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java index 328a1dc41..d3931008a 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java @@ -15,11 +15,13 @@ import com.example.solidconnection.s3.UploadedFileUrlResponse; import com.example.solidconnection.service.RedisService; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.support.integration.BaseIntegrationTest; import com.example.solidconnection.type.ImgType; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.util.RedisUtils; import jakarta.transaction.Transactional; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -63,6 +65,16 @@ class PostCommandServiceTest extends BaseIntegrationTest { @Autowired private PostImageRepository postImageRepository; + @Autowired + private SiteUserFixture siteUserFixture; + + private SiteUser user1; + + @BeforeEach + void setUp() { + user1 = siteUserFixture.사용자(1, "test1"); + } + @Nested class 게시글_생성_테스트 { @@ -78,7 +90,7 @@ class 게시글_생성_테스트 { // when PostCreateResponse response = postCommandService.createPost( - 테스트유저_1, + user1, request, imageFiles ); @@ -107,7 +119,7 @@ class 게시글_생성_테스트 { // when & then assertThatThrownBy(() -> - postCommandService.createPost(테스트유저_1, request, imageFiles)) + postCommandService.createPost(user1, request, imageFiles)) .isInstanceOf(CustomException.class) .hasMessage(INVALID_POST_CATEGORY.getMessage()); } @@ -120,7 +132,7 @@ class 게시글_생성_테스트 { // when & then assertThatThrownBy(() -> - postCommandService.createPost(테스트유저_1, request, imageFiles)) + postCommandService.createPost(user1, request, imageFiles)) .isInstanceOf(CustomException.class) .hasMessage(INVALID_POST_CATEGORY.getMessage()); } @@ -133,7 +145,7 @@ class 게시글_생성_테스트 { // when & then assertThatThrownBy(() -> - postCommandService.createPost(테스트유저_1, request, imageFiles)) + postCommandService.createPost(user1, request, imageFiles)) .isInstanceOf(CustomException.class) .hasMessage(CAN_NOT_UPLOAD_MORE_THAN_FIVE_IMAGES.getMessage()); } @@ -148,7 +160,7 @@ class 게시글_수정_테스트 { // given String originImageUrl = "origin-image-url"; String expectedImageUrl = "update-image-url"; - Post testPost = createPost(자유게시판, 테스트유저_1, originImageUrl); + Post testPost = createPost(자유게시판, user1, originImageUrl); PostUpdateRequest request = createPostUpdateRequest(); List imageFiles = List.of(createImageFile()); @@ -157,7 +169,7 @@ class 게시글_수정_테스트 { // when PostUpdateResponse response = postCommandService.updatePost( - 테스트유저_1, + user1, testPost.getId(), request, imageFiles @@ -180,14 +192,15 @@ class 게시글_수정_테스트 { @Test void 다른_사용자의_게시글을_수정하면_예외_응답을_반환한다() { // given - Post testPost = createPost(자유게시판, 테스트유저_1, "origin-image-url"); + SiteUser user2 = siteUserFixture.사용자(2, "test2"); + Post testPost = createPost(자유게시판, user1, "origin-image-url"); PostUpdateRequest request = createPostUpdateRequest(); List imageFiles = List.of(); // when & then assertThatThrownBy(() -> postCommandService.updatePost( - 테스트유저_2, + user2, testPost.getId(), request, imageFiles @@ -199,14 +212,14 @@ class 게시글_수정_테스트 { @Test void 질문_게시글을_수정하면_예외_응답을_반환한다() { // given - Post testPost = createQuestionPost(자유게시판, 테스트유저_1, "origin-image-url"); + Post testPost = createQuestionPost(자유게시판, user1, "origin-image-url"); PostUpdateRequest request = createPostUpdateRequest(); List imageFiles = List.of(); // when & then assertThatThrownBy(() -> postCommandService.updatePost( - 테스트유저_1, + user1, testPost.getId(), request, imageFiles @@ -218,14 +231,14 @@ class 게시글_수정_테스트 { @Test void 이미지를_5개_초과하여_수정하면_예외_응답을_반환한다() { // given - Post testPost = createPost(자유게시판, 테스트유저_1, "origin-image-url"); + Post testPost = createPost(자유게시판, user1, "origin-image-url"); PostUpdateRequest request = createPostUpdateRequest(); List imageFiles = createSixImageFiles(); // when & then assertThatThrownBy(() -> postCommandService.updatePost( - 테스트유저_1, + user1, testPost.getId(), request, imageFiles @@ -242,13 +255,13 @@ class 게시글_삭제_테스트 { void 게시글을_성공적으로_삭제한다() { // given String originImageUrl = "origin-image-url"; - Post testPost = createPost(자유게시판, 테스트유저_1, originImageUrl); + Post testPost = createPost(자유게시판, user1, originImageUrl); String viewCountKey = redisUtils.getPostViewCountRedisKey(testPost.getId()); redisService.increaseViewCount(viewCountKey); // when PostDeleteResponse response = postCommandService.deletePostById( - 테스트유저_1, + user1, testPost.getId() ); @@ -264,12 +277,13 @@ class 게시글_삭제_테스트 { @Test void 다른_사용자의_게시글을_삭제하면_예외_응답을_반환한다() { // given - Post testPost = createPost(자유게시판, 테스트유저_1, "origin-image-url"); + SiteUser user2 = siteUserFixture.사용자(2, "test2"); + Post testPost = createPost(자유게시판, user1, "origin-image-url"); // when & then assertThatThrownBy(() -> postCommandService.deletePostById( - 테스트유저_2, + user2, testPost.getId() )) .isInstanceOf(CustomException.class) @@ -279,12 +293,12 @@ class 게시글_삭제_테스트 { @Test void 질문_게시글을_삭제하면_예외_응답을_반환한다() { // given - Post testPost = createQuestionPost(자유게시판, 테스트유저_1, "origin-image-url"); + Post testPost = createQuestionPost(자유게시판, user1, "origin-image-url"); // when & then assertThatThrownBy(() -> postCommandService.deletePostById( - 테스트유저_1, + user1, testPost.getId() )) .isInstanceOf(CustomException.class) diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java index 23fa6bf50..30026e46a 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java @@ -8,8 +8,10 @@ import com.example.solidconnection.community.post.repository.PostLikeRepository; import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.support.integration.BaseIntegrationTest; import com.example.solidconnection.type.PostCategory; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -33,18 +35,28 @@ class PostLikeServiceTest extends BaseIntegrationTest { @Autowired private PostLikeRepository postLikeRepository; + @Autowired + private SiteUserFixture siteUserFixture; + + private SiteUser user; + + @BeforeEach + void setUp() { + user = siteUserFixture.사용자(1, "test1"); + } + @Nested class 게시글_좋아요_테스트 { @Test void 게시글을_성공적으로_좋아요한다() { // given - Post testPost = createPost(자유게시판, 테스트유저_1); + Post testPost = createPost(자유게시판, user); long beforeLikeCount = testPost.getLikeCount(); // when PostLikeResponse response = postLikeService.likePost( - 테스트유저_1, + user, testPost.getId() ); @@ -54,20 +66,20 @@ class 게시글_좋아요_테스트 { () -> assertThat(response.likeCount()).isEqualTo(beforeLikeCount + 1), () -> assertThat(response.isLiked()).isTrue(), () -> assertThat(likedPost.getLikeCount()).isEqualTo(beforeLikeCount + 1), - () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUser(likedPost, 테스트유저_1)).isPresent() + () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUser(likedPost, user)).isPresent() ); } @Test void 이미_좋아요한_게시글을_다시_좋아요하면_예외_응답을_반환한다() { // given - Post testPost = createPost(자유게시판, 테스트유저_1); - postLikeService.likePost(테스트유저_1, testPost.getId()); + Post testPost = createPost(자유게시판, user); + postLikeService.likePost(user, testPost.getId()); // when & then assertThatThrownBy(() -> postLikeService.likePost( - 테스트유저_1, + user, testPost.getId() )) .isInstanceOf(CustomException.class) @@ -81,13 +93,13 @@ class 게시글_좋아요_취소_테스트 { @Test void 게시글_좋아요를_성공적으로_취소한다() { // given - Post testPost = createPost(자유게시판, 테스트유저_1); - PostLikeResponse beforeResponse = postLikeService.likePost(테스트유저_1, testPost.getId()); + Post testPost = createPost(자유게시판, user); + PostLikeResponse beforeResponse = postLikeService.likePost(user, testPost.getId()); long beforeLikeCount = beforeResponse.likeCount(); // when PostDislikeResponse response = postLikeService.dislikePost( - 테스트유저_1, + user, testPost.getId() ); @@ -97,19 +109,19 @@ class 게시글_좋아요_취소_테스트 { () -> assertThat(response.likeCount()).isEqualTo(beforeLikeCount - 1), () -> assertThat(response.isLiked()).isFalse(), () -> assertThat(unlikedPost.getLikeCount()).isEqualTo(beforeLikeCount - 1), - () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUser(unlikedPost, 테스트유저_1)).isEmpty() + () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUser(unlikedPost, user)).isEmpty() ); } @Test void 좋아요하지_않은_게시글을_좋아요_취소하면_예외_응답을_반환한다() { // given - Post testPost = createPost(자유게시판, 테스트유저_1); + Post testPost = createPost(자유게시판, user); // when & then assertThatThrownBy(() -> postLikeService.dislikePost( - 테스트유저_1, + user, testPost.getId() )) .isInstanceOf(CustomException.class) diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java index fc7926698..67212e014 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java @@ -13,10 +13,12 @@ import com.example.solidconnection.community.post.repository.PostImageRepository; import com.example.solidconnection.service.RedisService; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.support.integration.BaseIntegrationTest; import com.example.solidconnection.type.BoardCode; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.util.RedisUtils; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -48,6 +50,16 @@ class PostQueryServiceTest extends BaseIntegrationTest { @Autowired private PostImageRepository postImageRepository; + @Autowired + private SiteUserFixture siteUserFixture; + + private SiteUser user; + + @BeforeEach + void setUp() { + user = siteUserFixture.사용자(1, "test1"); + } + @Test void 게시판_코드와_카테고리로_게시글_목록을_조회한다() { // given @@ -103,15 +115,15 @@ class PostQueryServiceTest extends BaseIntegrationTest { // given String expectedImageUrl = "test-image-url"; List imageUrls = List.of(expectedImageUrl); - Post testPost = createPost(자유게시판, 테스트유저_1, expectedImageUrl); - List comments = createComments(testPost, 테스트유저_1, List.of("첫번째 댓글", "두번째 댓글")); + Post testPost = createPost(자유게시판, user, expectedImageUrl); + List comments = createComments(testPost, user, List.of("첫번째 댓글", "두번째 댓글")); - String validateKey = redisUtils.getValidatePostViewCountRedisKey(테스트유저_1.getId(), testPost.getId()); + String validateKey = redisUtils.getValidatePostViewCountRedisKey(user.getId(), testPost.getId()); String viewCountKey = redisUtils.getPostViewCountRedisKey(testPost.getId()); // when PostFindResponse response = postQueryService.findPostById( - 테스트유저_1, + user, testPost.getId() ); @@ -128,9 +140,9 @@ class PostQueryServiceTest extends BaseIntegrationTest { () -> assertThat(response.postFindBoardResponse().code()).isEqualTo(자유게시판.getCode()), () -> assertThat(response.postFindBoardResponse().koreanName()).isEqualTo(자유게시판.getKoreanName()), - () -> assertThat(response.postFindSiteUserResponse().id()).isEqualTo(테스트유저_1.getId()), - () -> assertThat(response.postFindSiteUserResponse().nickname()).isEqualTo(테스트유저_1.getNickname()), - () -> assertThat(response.postFindSiteUserResponse().profileImageUrl()).isEqualTo(테스트유저_1.getProfileImageUrl()), + () -> assertThat(response.postFindSiteUserResponse().id()).isEqualTo(user.getId()), + () -> assertThat(response.postFindSiteUserResponse().nickname()).isEqualTo(user.getNickname()), + () -> assertThat(response.postFindSiteUserResponse().profileImageUrl()).isEqualTo(user.getProfileImageUrl()), () -> assertThat(response.postFindPostImageResponses()) .hasSize(imageUrls.size()) diff --git a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java index fdcf0ec8d..4f2ddf687 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java @@ -6,11 +6,10 @@ import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.community.post.service.PostLikeService; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.type.PostCategory; -import com.example.solidconnection.type.PreparationStatus; -import com.example.solidconnection.type.Role; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -31,43 +30,39 @@ class PostLikeCountConcurrencyTest { @Autowired private PostLikeService postLikeService; + @Autowired private PostRepository postRepository; + @Autowired private BoardRepository boardRepository; + @Autowired private SiteUserRepository siteUserRepository; + @Autowired + private SiteUserFixture siteUserFixture; + @Value("${view.count.scheduling.delay}") private int SCHEDULING_DELAY_MS; + private int THREAD_NUMS = 1000; private int THREAD_POOL_SIZE = 200; private int TIMEOUT_SECONDS = 10; private Post post; private Board board; - private SiteUser siteUser; + private SiteUser user; @BeforeEach void setUp() { board = createBoard(); boardRepository.save(board); - siteUser = createSiteUser(); - siteUserRepository.save(siteUser); - post = createPost(board, siteUser); + user = siteUserFixture.사용자(); + post = createPost(board, user); postRepository.save(post); } - private SiteUser createSiteUser() { - return new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - } - private Board createBoard() { return new Board( "FREE", "자유게시판"); diff --git a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java index beeb8b046..6c1a0e18f 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java @@ -6,11 +6,9 @@ import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.service.RedisService; 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.PostCategory; -import com.example.solidconnection.type.PreparationStatus; -import com.example.solidconnection.type.Role; import com.example.solidconnection.util.RedisUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -23,54 +21,48 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import static com.example.solidconnection.type.RedisConstants.*; +import static com.example.solidconnection.type.RedisConstants.VALIDATE_VIEW_COUNT_TTL; import static org.junit.jupiter.api.Assertions.assertEquals; @TestContainerSpringBootTest @DisplayName("게시글 조회수 동시성 테스트") -public class PostViewCountConcurrencyTest { +class PostViewCountConcurrencyTest { @Autowired private RedisService redisService; + @Autowired private PostRepository postRepository; + @Autowired private BoardRepository boardRepository; - @Autowired - private SiteUserRepository siteUserRepository; + @Autowired private RedisUtils redisUtils; + @Autowired + private SiteUserFixture siteUserFixture; + @Value("${view.count.scheduling.delay}") private int SCHEDULING_DELAY_MS; + private int THREAD_NUMS = 1000; private int THREAD_POOL_SIZE = 200; private int TIMEOUT_SECONDS = 10; private Post post; private Board board; - private SiteUser siteUser; + private SiteUser user; @BeforeEach - public void setUp() { + void setUp() { board = createBoard(); boardRepository.save(board); - siteUser = createSiteUser(); - siteUserRepository.save(siteUser); - post = createPost(board, siteUser); + user = siteUserFixture.사용자(); + post = createPost(board, user); postRepository.save(post); } - private SiteUser createSiteUser() { - return new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - } - private Board createBoard() { return new Board( "FREE", "자유게시판"); @@ -91,9 +83,9 @@ private Post createPost(Board board, SiteUser siteUser) { } @Test - public void 게시글을_조회할_때_조회수_동시성_문제를_해결한다() throws InterruptedException { + void 게시글을_조회할_때_조회수_동시성_문제를_해결한다() throws InterruptedException { - redisService.deleteKey(redisUtils.getValidatePostViewCountRedisKey(siteUser.getId(), post.getId())); + redisService.deleteKey(redisUtils.getValidatePostViewCountRedisKey(user.getId(), post.getId())); ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE); CountDownLatch doneSignal = new CountDownLatch(THREAD_NUMS); @@ -121,9 +113,9 @@ private Post createPost(Board board, SiteUser siteUser) { } @Test - public void 게시글을_조회할_때_조회수_조작_문제를_해결한다() throws InterruptedException { + void 게시글을_조회할_때_조회수_조작_문제를_해결한다() throws InterruptedException { - redisService.deleteKey(redisUtils.getValidatePostViewCountRedisKey(siteUser.getId(), post.getId())); + redisService.deleteKey(redisUtils.getValidatePostViewCountRedisKey(user.getId(), post.getId())); ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE); CountDownLatch doneSignal = new CountDownLatch(THREAD_NUMS); @@ -131,7 +123,7 @@ private Post createPost(Board board, SiteUser siteUser) { for (int i = 0; i < THREAD_NUMS; i++) { executorService.submit(() -> { try { - boolean isFirstTime = redisService.isPresent(redisUtils.getValidatePostViewCountRedisKey(siteUser.getId(), post.getId())); + boolean isFirstTime = redisService.isPresent(redisUtils.getValidatePostViewCountRedisKey(user.getId(), post.getId())); if (isFirstTime) { redisService.increaseViewCount(redisUtils.getPostViewCountRedisKey(post.getId())); } @@ -144,7 +136,7 @@ private Post createPost(Board board, SiteUser siteUser) { for (int i = 0; i < THREAD_NUMS; i++) { executorService.submit(() -> { try { - boolean isFirstTime = redisService.isPresent(redisUtils.getValidatePostViewCountRedisKey(siteUser.getId(), post.getId())); + boolean isFirstTime = redisService.isPresent(redisUtils.getValidatePostViewCountRedisKey(user.getId(), post.getId())); if (isFirstTime) { redisService.increaseViewCount(redisUtils.getPostViewCountRedisKey(post.getId())); } diff --git a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java index 4800a0153..d2cadca65 100644 --- a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java @@ -2,10 +2,8 @@ import com.example.solidconnection.application.service.ApplicationQueryService; 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.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -22,32 +20,25 @@ @TestContainerSpringBootTest @DisplayName("ThunderingHerd 테스트") -public class ThunderingHerdTest { +class ThunderingHerdTest { + @Autowired private ApplicationQueryService applicationQueryService; + @Autowired private RedisTemplate redisTemplate; + @Autowired - private SiteUserRepository siteUserRepository; + private SiteUserFixture siteUserFixture; + private int THREAD_NUMS = 1000; private int THREAD_POOL_SIZE = 200; private int TIMEOUT_SECONDS = 10; - private SiteUser siteUser; + private SiteUser user; @BeforeEach public void setUp() { - siteUser = createSiteUser(); - siteUserRepository.save(siteUser); - } - - private SiteUser createSiteUser() { - return new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); + user = siteUserFixture.사용자(); } @Test @@ -63,9 +54,9 @@ private SiteUser createSiteUser() { executorService.submit(() -> { try { List tasks = Arrays.asList( - () -> applicationQueryService.getApplicants(siteUser, "", ""), - () -> applicationQueryService.getApplicants(siteUser, "ASIA", ""), - () -> applicationQueryService.getApplicants(siteUser, "", "추오") + () -> applicationQueryService.getApplicants(user, "", ""), + () -> applicationQueryService.getApplicants(user, "ASIA", ""), + () -> applicationQueryService.getApplicants(user, "", "추오") ); Collections.shuffle(tasks); tasks.forEach(Runnable::run); diff --git a/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java b/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java index b517681aa..e0c1a006f 100644 --- a/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java +++ b/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java @@ -1,14 +1,11 @@ package com.example.solidconnection.custom.resolver; - import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.custom.security.authentication.SiteUserAuthentication; import com.example.solidconnection.custom.security.userdetails.SiteUserDetails; 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.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -32,7 +29,7 @@ class AuthorizedUserResolverTest { private AuthorizedUserResolver authorizedUserResolver; @Autowired - private SiteUserRepository siteUserRepository; + private SiteUserFixture siteUserFixture; @BeforeEach void setUp() { @@ -42,8 +39,8 @@ void setUp() { @Test void security_context_에_저장된_인증된_사용자를_반환한다() { // given - SiteUser siteUser = createAndSaveSiteUser(); - Authentication authentication = createAuthenticationWithUser(siteUser); + SiteUser user = siteUserFixture.사용자(); + Authentication authentication = createAuthenticationWithUser(user); SecurityContextHolder.getContext().setAuthentication(authentication); MethodParameter parameter = mock(MethodParameter.class); @@ -55,7 +52,7 @@ void setUp() { SiteUser resolveSiteUser = (SiteUser) authorizedUserResolver.resolveArgument(parameter, null, null, null); // then - assertThat(resolveSiteUser).isEqualTo(siteUser); + assertThat(resolveSiteUser).isEqualTo(user); } @Nested @@ -90,17 +87,6 @@ class security_context_에_저장된_사용자가_없는_경우 { } } - private SiteUser createAndSaveSiteUser() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - return siteUserRepository.save(siteUser); - } - private SiteUserAuthentication createAuthenticationWithUser(SiteUser siteUser) { SiteUserDetails userDetails = new SiteUserDetails(siteUser); return new SiteUserAuthentication("token", userDetails); diff --git a/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java b/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java index 0104c9ccd..b733acceb 100644 --- a/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java @@ -3,9 +3,8 @@ import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.custom.security.annotation.RequireAdminAccess; import com.example.solidconnection.siteuser.domain.SiteUser; +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.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -24,13 +23,16 @@ class AdminAuthorizationAspectTest { @Autowired private TestService testService; + @Autowired + private SiteUserFixture siteUserFixture; + @Test void 어드민_사용자는_어드민_전용_메소드에_접근할_수_있다() { // given - SiteUser adminUser = createSiteUser(Role.ADMIN); + SiteUser admin = siteUserFixture.관리자(); // when - boolean response = testService.adminOnlyMethod(adminUser); + boolean response = testService.adminOnlyMethod(admin); // then assertThat(response).isTrue(); @@ -39,10 +41,10 @@ class AdminAuthorizationAspectTest { @Test void 일반_사용자가_어드민_전용_메소드에_접근하면_예외_응답을_반환한다() { // given - SiteUser mentorUser = createSiteUser(Role.MENTOR); + SiteUser user = siteUserFixture.사용자(); // when & then - assertThatCode(() -> testService.adminOnlyMethod(mentorUser)) + assertThatCode(() -> testService.adminOnlyMethod(user)) .isInstanceOf(CustomException.class) .hasMessage(ACCESS_DENIED.getMessage()); } @@ -50,28 +52,18 @@ class AdminAuthorizationAspectTest { @Test void 어드민_어노테이션이_없는_메소드는_모두_접근_가능하다() { // given - SiteUser menteeUser = createSiteUser(Role.MENTEE); - SiteUser adminUser = createSiteUser(Role.ADMIN); + SiteUser user = siteUserFixture.사용자(); + SiteUser admin = siteUserFixture.관리자(); // when - boolean menteeResponse = testService.publicMethod(menteeUser); - boolean adminResponse = testService.publicMethod(adminUser); + boolean menteeResponse = testService.publicMethod(user); + boolean adminResponse = testService.publicMethod(admin); // then assertThat(menteeResponse).isTrue(); assertThat(adminResponse).isTrue(); } - private SiteUser createSiteUser(Role role) { - return new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - role - ); - } - @TestConfiguration static class TestConfig { diff --git a/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java b/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java index 423bec415..b8999e3f5 100644 --- a/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java @@ -5,10 +5,8 @@ import com.example.solidconnection.custom.security.authentication.SiteUserAuthentication; import com.example.solidconnection.custom.security.userdetails.SiteUserDetails; 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 io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.junit.jupiter.api.BeforeEach; @@ -38,14 +36,13 @@ class SiteUserAuthenticationProviderTest { private JwtProperties jwtProperties; @Autowired - private SiteUserRepository siteUserRepository; + private SiteUserFixture siteUserFixture; - private SiteUser siteUser; + private SiteUser user; @BeforeEach void setUp() { - siteUser = createSiteUser(); - siteUserRepository.save(siteUser); + user = siteUserFixture.사용자(); } @Test @@ -64,7 +61,7 @@ void setUp() { @Test void 유효한_토큰이면_정상적으로_인증_정보를_반환한다() { // given - String token = createValidToken(siteUser.getId()); + String token = createValidToken(user.getId()); SiteUserAuthentication auth = new SiteUserAuthentication(token); // when @@ -106,7 +103,7 @@ class 예외_응답을_반환하다 { @Test void 유효한_토큰이지만_해당되는_사용자가_없으면_예외_응답을_반환한다() { // given - long notExistingUserId = siteUser.getId() + 100; + long notExistingUserId = user.getId() + 100; String token = createValidToken(notExistingUserId); SiteUserAuthentication auth = new SiteUserAuthentication(token); @@ -128,7 +125,7 @@ private String createValidToken(long id) { private String createExpiredToken() { return Jwts.builder() - .setSubject(String.valueOf(siteUser.getId())) + .setSubject(String.valueOf(user.getId())) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() - 1000)) .signWith(SignatureAlgorithm.HS256, jwtProperties.secret()) @@ -143,14 +140,4 @@ private String createWrongSubjectTypeToken() { .signWith(SignatureAlgorithm.HS256, jwtProperties.secret()) .compact(); } - - private SiteUser createSiteUser() { - return new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - } } diff --git a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java index 0b2a0db73..718732a44 100644 --- a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java @@ -2,10 +2,9 @@ import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.siteuser.repository.SiteUserRepository; 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; @@ -26,14 +25,17 @@ class SiteUserDetailsServiceTest { @Autowired private SiteUserDetailsService userDetailsService; + @Autowired + private SiteUserFixture siteUserFixture; + @Autowired private SiteUserRepository siteUserRepository; @Test void 사용자_인증_정보를_반환한다() { // given - SiteUser siteUser = siteUserRepository.save(createSiteUser()); - String username = getUserName(siteUser); + SiteUser user = siteUserFixture.사용자(); + String username = getUserName(user); // when SiteUserDetails userDetails = (SiteUserDetails) userDetailsService.loadUserByUsername(username); @@ -41,7 +43,7 @@ class SiteUserDetailsServiceTest { // then assertAll( () -> assertThat(userDetails.getUsername()).isEqualTo(username), - () -> assertThat(userDetails.getSiteUser()).extracting("id").isEqualTo(siteUser.getId()) + () -> assertThat(userDetails.getSiteUser()).extracting("id").isEqualTo(user.getId()) ); } @@ -73,10 +75,10 @@ class 예외_응답을_반환한다 { @Test void 탈퇴한_사용자이면_예외_응답을_반환한다() { // given - SiteUser siteUser = createSiteUser(); - siteUser.setQuitedAt(LocalDate.now()); - siteUserRepository.save(siteUser); - String username = getUserName(siteUser); + SiteUser user = siteUserFixture.사용자(); + user.setQuitedAt(LocalDate.now()); + siteUserRepository.save(user); + String username = getUserName(user); // when & then assertThatCode(() -> userDetailsService.loadUserByUsername(username)) @@ -85,16 +87,6 @@ class 예외_응답을_반환한다 { } } - private SiteUser createSiteUser() { - return new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - } - private String getUserName(SiteUser siteUser) { return siteUser.getId().toString(); } diff --git a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java index b49b9cf27..6fe9b6d69 100644 --- a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java @@ -1,10 +1,8 @@ package com.example.solidconnection.custom.security.userdetails; 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.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -19,13 +17,13 @@ class SiteUserDetailsTest { @Autowired - private SiteUserRepository siteUserRepository; + private SiteUserFixture siteUserFixture; @Test void 사용자_권한을_정상적으로_반환한다() { // given - SiteUser siteUser = siteUserRepository.save(createSiteUser()); - SiteUserDetails siteUserDetails = new SiteUserDetails(siteUser); + SiteUser user = siteUserFixture.사용자(); + SiteUserDetails siteUserDetails = new SiteUserDetails(user); // when Collection authorities = siteUserDetails.getAuthorities(); @@ -33,16 +31,6 @@ class SiteUserDetailsTest { // then assertThat(authorities) .extracting("authority") - .containsExactly("ROLE_" + siteUser.getRole().name()); - } - - private SiteUser createSiteUser() { - return new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); + .containsExactly("ROLE_" + user.getRole().name()); } } diff --git a/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java b/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java index a8b1ac3d8..27ed7a617 100644 --- a/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java +++ b/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java @@ -15,13 +15,13 @@ import com.example.solidconnection.score.repository.GpaScoreRepository; import com.example.solidconnection.score.repository.LanguageTestScoreRepository; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; import com.example.solidconnection.type.ImgType; import com.example.solidconnection.type.LanguageTestType; -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; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -52,17 +52,26 @@ class ScoreServiceTest extends BaseIntegrationTest { @MockBean private S3Service s3Service; + @Autowired + private SiteUserFixture siteUserFixture; + + private SiteUser user; + + @BeforeEach + void setUp() { + user = siteUserFixture.사용자(); + } + @Test void GPA_점수_상태를_조회한다() { // given - SiteUser testUser = createSiteUser(); List scores = List.of( - createGpaScore(testUser, 3.5, 4.5), - createGpaScore(testUser, 3.8, 4.5) + createGpaScore(user, 3.5, 4.5), + createGpaScore(user, 3.8, 4.5) ); // when - GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(testUser); + GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(user); // then assertThat(response.gpaScoreStatusResponseList()) @@ -76,11 +85,8 @@ class ScoreServiceTest extends BaseIntegrationTest { @Test void GPA_점수가_없는_경우_빈_리스트를_반환한다() { - // given - SiteUser testUser = createSiteUser(); - // when - GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(testUser); + GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(user); // then assertThat(response.gpaScoreStatusResponseList()).isEmpty(); @@ -89,15 +95,14 @@ class ScoreServiceTest extends BaseIntegrationTest { @Test void 어학_시험_점수_상태를_조회한다() { // given - SiteUser testUser = createSiteUser(); List scores = List.of( - createLanguageTestScore(testUser, LanguageTestType.TOEIC, "100"), - createLanguageTestScore(testUser, LanguageTestType.TOEFL_IBT, "7.5") + createLanguageTestScore(user, LanguageTestType.TOEIC, "100"), + createLanguageTestScore(user, LanguageTestType.TOEFL_IBT, "7.5") ); - siteUserRepository.save(testUser); + siteUserRepository.save(user); // when - LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(testUser); + LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(user); // then assertThat(response.languageTestScoreStatusResponseList()) @@ -111,11 +116,8 @@ class ScoreServiceTest extends BaseIntegrationTest { @Test void 어학_시험_점수가_없는_경우_빈_리스트를_반환한다() { - // given - SiteUser testUser = createSiteUser(); - // when - LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(testUser); + LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(user); // then assertThat(response.languageTestScoreStatusResponseList()).isEmpty(); @@ -124,14 +126,13 @@ class ScoreServiceTest extends BaseIntegrationTest { @Test void GPA_점수를_등록한다() { // given - SiteUser testUser = createSiteUser(); GpaScoreRequest request = createGpaScoreRequest(); MockMultipartFile file = createFile(); String fileUrl = "/gpa-report.pdf"; given(s3Service.uploadFile(file, ImgType.GPA)).willReturn(new UploadedFileUrlResponse(fileUrl)); // when - long scoreId = scoreService.submitGpaScore(testUser, request, file); + long scoreId = scoreService.submitGpaScore(user, request, file); GpaScore savedScore = gpaScoreRepository.findById(scoreId).orElseThrow(); // then @@ -147,14 +148,13 @@ class ScoreServiceTest extends BaseIntegrationTest { @Test void 어학_시험_점수를_등록한다() { // given - SiteUser testUser = createSiteUser(); LanguageTestScoreRequest request = createLanguageTestScoreRequest(); MockMultipartFile file = createFile(); String fileUrl = "/gpa-report.pdf"; given(s3Service.uploadFile(file, ImgType.LANGUAGE_TEST)).willReturn(new UploadedFileUrlResponse(fileUrl)); // when - long scoreId = scoreService.submitLanguageTestScore(testUser, request, file); + long scoreId = scoreService.submitLanguageTestScore(user, request, file); LanguageTestScore savedScore = languageTestScoreRepository.findById(scoreId).orElseThrow(); // then @@ -167,17 +167,6 @@ class ScoreServiceTest extends BaseIntegrationTest { ); } - private SiteUser createSiteUser() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - return siteUserRepository.save(siteUser); - } - private GpaScore createGpaScore(SiteUser siteUser, double gpa, double gpaCriteria) { GpaScore gpaScore = new GpaScore( new Gpa(gpa, gpaCriteria, "/gpa-report.pdf"), diff --git a/src/test/java/com/example/solidconnection/siteuser/fixture/SiteUserFixture.java b/src/test/java/com/example/solidconnection/siteuser/fixture/SiteUserFixture.java new file mode 100644 index 000000000..000b7bc48 --- /dev/null +++ b/src/test/java/com/example/solidconnection/siteuser/fixture/SiteUserFixture.java @@ -0,0 +1,69 @@ +package com.example.solidconnection.siteuser.fixture; + +import com.example.solidconnection.siteuser.domain.AuthType; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.type.Role; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.test.context.TestComponent; + +@TestComponent +@RequiredArgsConstructor +public class SiteUserFixture { + + private final SiteUserFixtureBuilder siteUserFixtureBuilder; + + public SiteUser 사용자() { + return siteUserFixtureBuilder.siteUser() + .email("test@example.com") + .authType(AuthType.EMAIL) + .nickname("사용자") + .profileImageUrl("profileImageUrl") + .role(Role.MENTEE) + .password("password123") + .create(); + } + + public SiteUser 사용자(int index, String nickname) { + return siteUserFixtureBuilder.siteUser() + .email("test" + index + "@example.com") + .authType(AuthType.EMAIL) + .nickname(nickname) + .profileImageUrl("profileImageUrl") + .role(Role.MENTEE) + .password("password123") + .create(); + } + + public SiteUser 사용자(String email, AuthType authType) { + return siteUserFixtureBuilder.siteUser() + .email(email) + .authType(authType) + .nickname("사용자") + .profileImageUrl("profileImageUrl") + .role(Role.MENTEE) + .password("password123") + .create(); + } + + public SiteUser 사용자(String email, String password) { + return siteUserFixtureBuilder.siteUser() + .email(email) + .authType(AuthType.EMAIL) + .nickname("사용자") + .profileImageUrl("profileImageUrl") + .role(Role.MENTEE) + .password(password) + .create(); + } + + public SiteUser 관리자() { + return siteUserFixtureBuilder.siteUser() + .email("admin@example.com") + .authType(AuthType.EMAIL) + .nickname("관리자") + .profileImageUrl("profileImageUrl") + .role(Role.ADMIN) + .password("admin123") + .create(); + } +} diff --git a/src/test/java/com/example/solidconnection/siteuser/fixture/SiteUserFixtureBuilder.java b/src/test/java/com/example/solidconnection/siteuser/fixture/SiteUserFixtureBuilder.java new file mode 100644 index 000000000..f0d8bd406 --- /dev/null +++ b/src/test/java/com/example/solidconnection/siteuser/fixture/SiteUserFixtureBuilder.java @@ -0,0 +1,72 @@ +package com.example.solidconnection.siteuser.fixture; + +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.type.PreparationStatus; +import com.example.solidconnection.type.Role; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.test.context.TestComponent; +import org.springframework.security.crypto.password.PasswordEncoder; + +@TestComponent +@RequiredArgsConstructor +public class SiteUserFixtureBuilder { + + private final SiteUserRepository siteUserRepository; + private final PasswordEncoder passwordEncoder; + + private String email; + private AuthType authType; + private String nickname; + private String profileImageUrl; + private Role role; + private String password; + + public SiteUserFixtureBuilder siteUser() { + return new SiteUserFixtureBuilder(siteUserRepository, passwordEncoder); + } + + public SiteUserFixtureBuilder email(String email) { + this.email = email; + return this; + } + + public SiteUserFixtureBuilder authType(AuthType authType) { + this.authType = authType; + return this; + } + + public SiteUserFixtureBuilder nickname(String nickname) { + this.nickname = nickname; + return this; + } + + public SiteUserFixtureBuilder profileImageUrl(String profileImageUrl) { + this.profileImageUrl = profileImageUrl; + return this; + } + + public SiteUserFixtureBuilder role(Role role) { + this.role = role; + return this; + } + + public SiteUserFixtureBuilder password(String password) { + this.password = password; + return this; + } + + public SiteUser create() { + SiteUser siteUser = new SiteUser( + email, + nickname, + profileImageUrl, + PreparationStatus.CONSIDERING, + role, + authType, + passwordEncoder.encode(password) + ); + return siteUserRepository.save(siteUser); + } +} diff --git a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java index 95a887736..1c5680d33 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -3,17 +3,19 @@ import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.s3.S3Service; import com.example.solidconnection.s3.UploadedFileUrlResponse; +import com.example.solidconnection.siteuser.domain.AuthType; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.MyPageResponse; -import com.example.solidconnection.siteuser.dto.NicknameUpdateRequest; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; +import com.example.solidconnection.siteuser.fixture.SiteUserFixtureBuilder; import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.support.integration.BaseIntegrationTest; +import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.type.ImgType; -import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.university.domain.LikedUniversity; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; +import com.example.solidconnection.university.fixture.UniversityInfoForApplyFixture; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -38,8 +40,9 @@ import static org.mockito.BDDMockito.never; import static org.mockito.BDDMockito.then; +@TestContainerSpringBootTest @DisplayName("마이페이지 서비스 테스트") -class MyPageServiceTest extends BaseIntegrationTest { +class MyPageServiceTest { @Autowired private MyPageService myPageService; @@ -53,22 +56,37 @@ class MyPageServiceTest extends BaseIntegrationTest { @Autowired private LikedUniversityRepository likedUniversityRepository; + @Autowired + private SiteUserFixture siteUserFixture; + + @Autowired + private UniversityInfoForApplyFixture universityInfoForApplyFixture; + + @Autowired + private SiteUserFixtureBuilder siteUserFixtureBuilder; + + private SiteUser user; + + @BeforeEach + void setUp() { + user = siteUserFixture.사용자(); + } + @Test void 마이페이지_정보를_조회한다() { // given - SiteUser testUser = createSiteUser(); - int likedUniversityCount = createLikedUniversities(testUser); + int likedUniversityCount = createLikedUniversities(user); // when - MyPageResponse response = myPageService.getMyPageInfo(testUser); + MyPageResponse response = myPageService.getMyPageInfo(user); // then Assertions.assertAll( - () -> assertThat(response.nickname()).isEqualTo(testUser.getNickname()), - () -> assertThat(response.profileImageUrl()).isEqualTo(testUser.getProfileImageUrl()), - () -> assertThat(response.role()).isEqualTo(testUser.getRole()), - () -> assertThat(response.email()).isEqualTo(testUser.getEmail()), - () -> assertThat(response.likedPostCount()).isEqualTo(testUser.getPostLikeList().size()), + () -> assertThat(response.nickname()).isEqualTo(user.getNickname()), + () -> assertThat(response.profileImageUrl()).isEqualTo(user.getProfileImageUrl()), + () -> assertThat(response.role()).isEqualTo(user.getRole()), + () -> assertThat(response.email()).isEqualTo(user.getEmail()), + () -> assertThat(response.likedPostCount()).isEqualTo(user.getPostLikeList().size()), () -> assertThat(response.likedUniversityCount()).isEqualTo(likedUniversityCount) ); } @@ -76,21 +94,13 @@ class MyPageServiceTest extends BaseIntegrationTest { @Test void 관심_대학교_목록을_조회한다() { // given - SiteUser testUser = createSiteUser(); - int likedUniversityCount = createLikedUniversities(testUser); + int likedUniversityCount = createLikedUniversities(user); // when - List response = myPageService.getWishUniversity(testUser); + List response = myPageService.getWishUniversity(user); // then - assertThat(response) - .hasSize(likedUniversityCount) - .usingRecursiveFieldByFieldElementComparatorIgnoringFields("id") - .containsAll(List.of( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) - )); + assertThat(response).hasSize(likedUniversityCount); } @Nested @@ -99,29 +109,27 @@ class 프로필_이미지_수정_테스트 { @Test void 새로운_이미지로_성공적으로_업데이트한다() { // given - SiteUser testUser = createSiteUser(); String expectedUrl = "newProfileImageUrl"; MockMultipartFile imageFile = createValidImageFile(); given(s3Service.uploadFile(any(), eq(ImgType.PROFILE))) .willReturn(new UploadedFileUrlResponse(expectedUrl)); // when - myPageService.updateMyPageInfo(testUser, imageFile, "newNickname"); + myPageService.updateMyPageInfo(user, imageFile, "newNickname"); // then - assertThat(testUser.getProfileImageUrl()).isEqualTo(expectedUrl); + assertThat(user.getProfileImageUrl()).isEqualTo(expectedUrl); } @Test void 프로필을_처음_수정하는_것이면_이전_이미지를_삭제하지_않는다() { // given - SiteUser testUser = createSiteUser(); MockMultipartFile imageFile = createValidImageFile(); given(s3Service.uploadFile(any(), eq(ImgType.PROFILE))) .willReturn(new UploadedFileUrlResponse("newProfileImageUrl")); // when - myPageService.updateMyPageInfo(testUser, imageFile, "newNickname"); + myPageService.updateMyPageInfo(user, imageFile, "newNickname"); // then then(s3Service).should(never()).deleteExProfile(any()); @@ -130,16 +138,16 @@ class 프로필_이미지_수정_테스트 { @Test void 프로필을_처음_수정하는_것이_아니라면_이전_이미지를_삭제한다() { // given - SiteUser testUser = createSiteUserWithCustomProfile(); + SiteUser 커스텀_프로필_사용자 = createSiteUserWithCustomProfile(); MockMultipartFile imageFile = createValidImageFile(); given(s3Service.uploadFile(any(), eq(ImgType.PROFILE))) .willReturn(new UploadedFileUrlResponse("newProfileImageUrl")); // when - myPageService.updateMyPageInfo(testUser, imageFile, "newNickname"); + myPageService.updateMyPageInfo(커스텀_프로필_사용자, imageFile, "newNickname"); // then - then(s3Service).should().deleteExProfile(testUser); + then(s3Service).should().deleteExProfile(커스텀_프로필_사용자); } } @@ -155,15 +163,14 @@ void setUp() { @Test void 닉네임을_성공적으로_수정한다() { // given - SiteUser testUser = createSiteUser(); MockMultipartFile imageFile = createValidImageFile(); String newNickname = "newNickname"; // when - myPageService.updateMyPageInfo(testUser, imageFile, newNickname); + myPageService.updateMyPageInfo(user, imageFile, newNickname); // then - SiteUser updatedUser = siteUserRepository.findById(testUser.getId()).get(); + SiteUser updatedUser = siteUserRepository.findById(user.getId()).get(); assertThat(updatedUser.getNicknameModifiedAt()).isNotNull(); assertThat(updatedUser.getNickname()).isEqualTo(newNickname); } @@ -171,12 +178,10 @@ void setUp() { @Test void 중복된_닉네임으로_변경하면_예외_응답을_반환한다() { // given - createDuplicatedSiteUser(); - SiteUser testUser = createSiteUser(); - MockMultipartFile imageFile = createValidImageFile(); + SiteUser existingUser = siteUserFixture.사용자(1, "existing nickname"); // when & then - assertThatCode(() -> myPageService.updateMyPageInfo(testUser, imageFile, "duplicatedNickname")) + assertThatCode(() -> myPageService.updateMyPageInfo(user, null, existingUser.getNickname())) .isInstanceOf(CustomException.class) .hasMessage(NICKNAME_ALREADY_EXISTED.getMessage()); } @@ -184,58 +189,21 @@ void setUp() { @Test void 최소_대기기간이_지나지_않은_상태에서_변경하면_예외_응답을_반환한다() { // given - SiteUser testUser = createSiteUser(); MockMultipartFile imageFile = createValidImageFile(); LocalDateTime modifiedAt = LocalDateTime.now().minusDays(MIN_DAYS_BETWEEN_NICKNAME_CHANGES - 1); - testUser.setNicknameModifiedAt(modifiedAt); - siteUserRepository.save(testUser); - - NicknameUpdateRequest request = new NicknameUpdateRequest("newNickname"); + user.setNicknameModifiedAt(modifiedAt); // when & then - assertThatCode(() -> myPageService.updateMyPageInfo(testUser, imageFile, "nickname12")) + assertThatCode(() -> myPageService.updateMyPageInfo(user, imageFile, "nickname12")) .isInstanceOf(CustomException.class) .hasMessage(createExpectedErrorMessage(modifiedAt)); } } - private SiteUser createSiteUser() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - return siteUserRepository.save(siteUser); - } - - private SiteUser createSiteUserWithCustomProfile() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profile/profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - return siteUserRepository.save(siteUser); - } - - private void createDuplicatedSiteUser() { - SiteUser siteUser = new SiteUser( - "duplicated@example.com", - "duplicatedNickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - siteUserRepository.save(siteUser); - } - private int createLikedUniversities(SiteUser testUser) { - LikedUniversity likedUniversity1 = new LikedUniversity(null, 괌대학_A_지원_정보, testUser); - LikedUniversity likedUniversity2 = new LikedUniversity(null, 메이지대학_지원_정보, testUser); - LikedUniversity likedUniversity3 = new LikedUniversity(null, 코펜하겐IT대학_지원_정보, testUser); + LikedUniversity likedUniversity1 = new LikedUniversity(null, universityInfoForApplyFixture.괌대학_A_지원_정보(), testUser); + LikedUniversity likedUniversity2 = new LikedUniversity(null, universityInfoForApplyFixture.메이지대학_지원_정보(), testUser); + LikedUniversity likedUniversity3 = new LikedUniversity(null, universityInfoForApplyFixture.코펜하겐IT대학_지원_정보(), testUser); likedUniversityRepository.save(likedUniversity1); likedUniversityRepository.save(likedUniversity2); @@ -259,4 +227,15 @@ private String createExpectedErrorMessage(LocalDateTime modifiedAt) { ); return CAN_NOT_CHANGE_NICKNAME_YET.getMessage() + " : " + formatLastModifiedAt; } + + private SiteUser createSiteUserWithCustomProfile() { + return siteUserFixtureBuilder.siteUser() + .email("customProfile@example.com") + .authType(AuthType.EMAIL) + .nickname("커스텀프로필") + .profileImageUrl("profile/profileImageUrl") + .role(Role.MENTEE) + .password("customPassword123") + .create(); + } } diff --git a/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java index 6c9736198..665fb11da 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java @@ -2,10 +2,8 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.NicknameExistsResponse; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.PreparationStatus; -import com.example.solidconnection.type.Role; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; +import com.example.solidconnection.support.TestContainerSpringBootTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -14,20 +12,21 @@ import static org.assertj.core.api.Assertions.assertThat; +@TestContainerSpringBootTest @DisplayName("유저 서비스 테스트") -class SiteUserServiceTest extends BaseIntegrationTest { +class SiteUserServiceTest { @Autowired private SiteUserService siteUserService; @Autowired - private SiteUserRepository siteUserRepository; + private SiteUserFixture siteUserFixture; - private SiteUser siteUser; + private SiteUser user; @BeforeEach void setUp() { - siteUser = createSiteUser(); + user = siteUserFixture.사용자(); } @Nested @@ -36,7 +35,7 @@ class 닉네임_중복_검사 { @Test void 존재하는_닉네임이면_true를_반환한다() { // when - NicknameExistsResponse response = siteUserService.checkNicknameExists(siteUser.getNickname()); + NicknameExistsResponse response = siteUserService.checkNicknameExists(user.getNickname()); // then assertThat(response.exists()).isTrue(); @@ -51,15 +50,4 @@ class 닉네임_중복_검사 { assertThat(response.exists()).isFalse(); } } - - private SiteUser createSiteUser() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - return siteUserRepository.save(siteUser); - } } diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java index 3b2ab8c22..7f970108a 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java @@ -2,11 +2,9 @@ import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.PreparationStatus; -import com.example.solidconnection.type.Role; import com.example.solidconnection.university.domain.LikedUniversity; import com.example.solidconnection.university.domain.UniversityInfoForApply; import com.example.solidconnection.university.dto.IsLikeResponse; @@ -38,17 +36,17 @@ class UniversityLikeServiceTest { private LikedUniversityRepository likedUniversityRepository; @Autowired - private SiteUserRepository siteUserRepository; + private SiteUserFixture siteUserFixture; @Autowired private UniversityInfoForApplyFixture universityInfoForApplyFixture; - private SiteUser testUser; + private SiteUser user; private UniversityInfoForApply 괌대학_A_지원_정보; @BeforeEach void setUp() { - testUser = createSiteUser(); + user = siteUserFixture.사용자(); 괌대학_A_지원_정보 = universityInfoForApplyFixture.괌대학_A_지원_정보(); } @@ -58,13 +56,13 @@ class 대학_좋아요를_등록한다 { @Test void 성공적으로_좋아요를_등록한다() { // when - LikeResultResponse response = universityLikeService.likeUniversity(testUser, 괌대학_A_지원_정보.getId()); + LikeResultResponse response = universityLikeService.likeUniversity(user, 괌대학_A_지원_정보.getId()); // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE), () -> assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( - testUser, 괌대학_A_지원_정보 + user, 괌대학_A_지원_정보 )).isPresent() ); } @@ -72,10 +70,10 @@ class 대학_좋아요를_등록한다 { @Test void 이미_좋아요한_대학이면_예외_응답을_반환한다() { // given - saveLikedUniversity(testUser, 괌대학_A_지원_정보); + saveLikedUniversity(user, 괌대학_A_지원_정보); // when & then - assertThatCode(() -> universityLikeService.likeUniversity(testUser, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> universityLikeService.likeUniversity(user, 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) .hasMessage(ALREADY_LIKED_UNIVERSITY.getMessage()); } @@ -87,16 +85,16 @@ class 대학_좋아요를_취소한다 { @Test void 성공적으로_좋아요를_취소한다() { // given - saveLikedUniversity(testUser, 괌대학_A_지원_정보); + saveLikedUniversity(user, 괌대학_A_지원_정보); // when - LikeResultResponse response = universityLikeService.cancelLikeUniversity(testUser, 괌대학_A_지원_정보.getId()); + LikeResultResponse response = universityLikeService.cancelLikeUniversity(user, 괌대학_A_지원_정보.getId()); // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE), () -> assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( - testUser, 괌대학_A_지원_정보 + user, 괌대학_A_지원_정보 )).isEmpty() ); } @@ -104,7 +102,7 @@ class 대학_좋아요를_취소한다 { @Test void 좋아요하지_않은_대학이면_예외_응답을_반환한다() { // when & then - assertThatCode(() -> universityLikeService.cancelLikeUniversity(testUser, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> universityLikeService.cancelLikeUniversity(user, 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) .hasMessage(NOT_LIKED_UNIVERSITY.getMessage()); } @@ -116,7 +114,7 @@ class 대학_좋아요를_취소한다 { Long invalidUniversityId = 9999L; // when & then - assertThatCode(() -> universityLikeService.likeUniversity(testUser, invalidUniversityId)) + assertThatCode(() -> universityLikeService.likeUniversity(user, invalidUniversityId)) .isInstanceOf(CustomException.class) .hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } @@ -124,10 +122,10 @@ class 대학_좋아요를_취소한다 { @Test void 좋아요한_대학인지_확인한다() { // given - saveLikedUniversity(testUser, 괌대학_A_지원_정보); + saveLikedUniversity(user, 괌대학_A_지원_정보); // when - IsLikeResponse response = universityLikeService.getIsLiked(testUser, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = universityLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isTrue(); @@ -136,7 +134,7 @@ class 대학_좋아요를_취소한다 { @Test void 좋아요하지_않은_대학인지_확인한다() { // when - IsLikeResponse response = universityLikeService.getIsLiked(testUser, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = universityLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isFalse(); @@ -148,23 +146,11 @@ class 대학_좋아요를_취소한다 { Long invalidUniversityId = 9999L; // when & then - assertThatCode(() -> universityLikeService.getIsLiked(testUser, invalidUniversityId)) + assertThatCode(() -> universityLikeService.getIsLiked(user, invalidUniversityId)) .isInstanceOf(CustomException.class) .hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } - // todo : 추후 Fixture로 대체 필요 - private SiteUser createSiteUser() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - return siteUserRepository.save(siteUser); - } - private void saveLikedUniversity(SiteUser siteUser, UniversityInfoForApply universityInfoForApply) { LikedUniversity likedUniversity = LikedUniversity.builder() .siteUser(siteUser) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java index 7645794bf..ffacab33f 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java @@ -7,10 +7,8 @@ import com.example.solidconnection.repositories.InterestedCountyRepository; import com.example.solidconnection.repositories.InterestedRegionRepository; 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.university.domain.UniversityInfoForApply; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; import com.example.solidconnection.university.dto.UniversityRecommendsResponse; @@ -32,9 +30,6 @@ class UniversityRecommendServiceTest { @Autowired private UniversityRecommendService universityRecommendService; - @Autowired - private SiteUserRepository siteUserRepository; - @Autowired private InterestedRegionRepository interestedRegionRepository; @@ -44,6 +39,9 @@ class UniversityRecommendServiceTest { @Autowired private GeneralUniversityRecommendService generalUniversityRecommendService; + @Autowired + private SiteUserFixture siteUserFixture; + @Autowired private RegionFixture regionFixture; @@ -53,41 +51,37 @@ class UniversityRecommendServiceTest { @Autowired private UniversityInfoForApplyFixture universityInfoForApplyFixture; - private SiteUser testUser; + private SiteUser user; private UniversityInfoForApply 괌대학_A_지원_정보; private UniversityInfoForApply 괌대학_B_지원_정보; private UniversityInfoForApply 네바다주립대학_라스베이거스_지원_정보; private UniversityInfoForApply 메모리얼대학_세인트존스_A_지원_정보; private UniversityInfoForApply 서던덴마크대학교_지원_정보; private UniversityInfoForApply 코펜하겐IT대학_지원_정보; - private UniversityInfoForApply 그라츠대학_지원_정보; - private UniversityInfoForApply 그라츠공과대학_지원_정보; - private UniversityInfoForApply 린츠_카톨릭대학_지원_정보; - private UniversityInfoForApply 메이지대학_지원_정보; @BeforeEach void setUp() { - testUser = createSiteUser(); + user = siteUserFixture.사용자(); 괌대학_A_지원_정보 = universityInfoForApplyFixture.괌대학_A_지원_정보(); 괌대학_B_지원_정보 = universityInfoForApplyFixture.괌대학_B_지원_정보(); 네바다주립대학_라스베이거스_지원_정보 = universityInfoForApplyFixture.네바다주립대학_라스베이거스_지원_정보(); 메모리얼대학_세인트존스_A_지원_정보 = universityInfoForApplyFixture.메모리얼대학_세인트존스_A_지원_정보(); 서던덴마크대학교_지원_정보 = universityInfoForApplyFixture.서던덴마크대학교_지원_정보(); 코펜하겐IT대학_지원_정보 = universityInfoForApplyFixture.코펜하겐IT대학_지원_정보(); - 그라츠대학_지원_정보 = universityInfoForApplyFixture.그라츠대학_지원_정보(); - 그라츠공과대학_지원_정보 = universityInfoForApplyFixture.그라츠공과대학_지원_정보(); - 린츠_카톨릭대학_지원_정보 = universityInfoForApplyFixture.린츠_카톨릭대학_지원_정보(); - 메이지대학_지원_정보 = universityInfoForApplyFixture.메이지대학_지원_정보(); + universityInfoForApplyFixture.그라츠대학_지원_정보(); + universityInfoForApplyFixture.그라츠공과대학_지원_정보(); + universityInfoForApplyFixture.린츠_카톨릭대학_지원_정보(); + universityInfoForApplyFixture.메이지대학_지원_정보(); generalUniversityRecommendService.init(); } @Test void 관심_지역_설정한_사용자의_맞춤_추천_대학을_조회한다() { // given - interestedRegionRepository.save(new InterestedRegion(testUser, regionFixture.영미권())); + interestedRegionRepository.save(new InterestedRegion(user, regionFixture.영미권())); // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser); + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) @@ -103,10 +97,10 @@ void setUp() { @Test void 관심_국가_설정한_사용자의_맞춤_추천_대학을_조회한다() { // given - interestedCountyRepository.save(new InterestedCountry(testUser, countryFixture.덴마크())); + interestedCountyRepository.save(new InterestedCountry(user, countryFixture.덴마크())); // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser); + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) @@ -120,11 +114,11 @@ void setUp() { @Test void 관심_지역과_국가_모두_설정한_사용자의_맞춤_추천_대학을_조회한다() { // given - interestedRegionRepository.save(new InterestedRegion(testUser, regionFixture.영미권())); - interestedCountyRepository.save(new InterestedCountry(testUser, countryFixture.덴마크())); + interestedRegionRepository.save(new InterestedRegion(user, regionFixture.영미권())); + interestedCountyRepository.save(new InterestedCountry(user, countryFixture.덴마크())); // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser); + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) @@ -142,7 +136,7 @@ void setUp() { @Test void 관심사_미설정_사용자는_일반_추천_대학을_조회한다() { // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser); + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) @@ -168,16 +162,4 @@ void setUp() { .toList() ); } - - // todo : 추후 Fixture로 대체 필요 - private SiteUser createSiteUser() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - return siteUserRepository.save(siteUser); - } }