Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -4,14 +4,13 @@
import com.example.solidconnection.admin.dto.GpaScoreSearchResponse;
import com.example.solidconnection.admin.dto.GpaScoreUpdateRequest;
import com.example.solidconnection.admin.dto.ScoreSearchCondition;
import com.example.solidconnection.application.domain.Gpa;
import com.example.solidconnection.application.domain.VerifyStatus;
import com.example.solidconnection.common.exception.CustomException;
import com.example.solidconnection.score.domain.GpaScore;
import com.example.solidconnection.score.repository.GpaScoreRepository;
import com.example.solidconnection.score.fixture.GpaScoreFixture;
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.support.TestContainerSpringBootTest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
Expand All @@ -29,17 +28,18 @@
import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode;
import static org.junit.jupiter.api.Assertions.assertAll;

@TestContainerSpringBootTest
@DisplayName("학점 검증 관리자 서비스 테스트")
class AdminGpaScoreServiceTest extends BaseIntegrationTest {
class AdminGpaScoreServiceTest {

@Autowired
private AdminGpaScoreService adminGpaScoreService;

@Autowired
private GpaScoreRepository gpaScoreRepository;
private SiteUserFixture siteUserFixture;

@Autowired
private SiteUserFixture siteUserFixture;
private GpaScoreFixture gpaScoreFixture;

private GpaScore gpaScore1;
private GpaScore gpaScore2;
Expand All @@ -50,9 +50,9 @@ void setUp() {
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);
gpaScore1 = gpaScoreFixture.GPA_점수(VerifyStatus.PENDING, user1);
gpaScore2 = gpaScoreFixture.GPA_점수(VerifyStatus.PENDING, user2);
gpaScore3 = gpaScoreFixture.GPA_점수(VerifyStatus.REJECTED, user3);
}

@Nested
Expand All @@ -69,19 +69,10 @@ class 지원한_GPA_목록_조회 {
Page<GpaScoreSearchResponse> response = adminGpaScoreService.searchGpaScores(condition, pageable);

// then
assertThat(response.getContent()).hasSize(expectedGpaScores.size());
Copy link
Collaborator

@nayonsoso nayonsoso May 21, 2025

Choose a reason for hiding this comment

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

어드민쪽 조회 테스트 시 너무 자세히 검증하던 then절을 좀 간소화했습니다! size()정도만 검증해도 괜찮을까요?

이 테스트 코드에서 검증하려는 것은, "verifyStatus으로 조회했을 때 잘 되는가?" 라고 생각해요.
아래와 같이 응답의 모든 status가 PENDIND임을 확인해주는게 필요할 것 같습니다.
다른곳들도 마찬가지이고요! 🫨

Suggested change
assertThat(response.getContent()).hasSize(expectedGpaScores.size());
assertThat(response.getContent()).hasSize(expectedGpaScores.size());
assertThat(response.getContent()).hasSize(expectedGpaScores.size());
assertThat(response.getContent())
.extracting(content -> content.gpaScoreStatusResponse().verifyStatus())
.containsOnly(VerifyStatus.PENDING);

Copy link
Contributor Author

@Gyuhyeok99 Gyuhyeok99 May 21, 2025

Choose a reason for hiding this comment

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

그렇네요 좋은 거 같습니다! 추가로 닉네임으로 검증하는 것도 필요할 거 같아서 그것만 추가해주었습니다!
(8ca6823)

assertThat(response.getContent())
.hasSize(expectedGpaScores.size())
.zipSatisfy(expectedGpaScores, (actual, expected) -> assertAll(
() -> assertThat(actual.gpaScoreStatusResponse().id()).isEqualTo(expected.getId()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpa()).isEqualTo(expected.getGpa().getGpa()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpaCriteria()).isEqualTo(expected.getGpa().getGpaCriteria()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpaReportUrl()).isEqualTo(expected.getGpa().getGpaReportUrl()),
() -> assertThat(actual.gpaScoreStatusResponse().verifyStatus()).isEqualTo(expected.getVerifyStatus()),

() -> assertThat(actual.siteUserResponse().id()).isEqualTo(expected.getSiteUser().getId()),
() -> assertThat(actual.siteUserResponse().profileImageUrl()).isEqualTo(expected.getSiteUser().getProfileImageUrl()),
() -> assertThat(actual.siteUserResponse().nickname()).isEqualTo(expected.getSiteUser().getNickname())
));
.extracting(content -> content.gpaScoreStatusResponse().verifyStatus())
.containsOnly(VerifyStatus.PENDING);
}

@Test
Expand All @@ -95,19 +86,10 @@ class 지원한_GPA_목록_조회 {
Page<GpaScoreSearchResponse> response = adminGpaScoreService.searchGpaScores(condition, pageable);

// then
assertThat(response.getContent()).hasSize(expectedGpaScores.size());
assertThat(response.getContent())
.hasSize(expectedGpaScores.size())
.zipSatisfy(expectedGpaScores, (actual, expected) -> assertAll(
() -> assertThat(actual.gpaScoreStatusResponse().id()).isEqualTo(expected.getId()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpa()).isEqualTo(expected.getGpa().getGpa()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpaCriteria()).isEqualTo(expected.getGpa().getGpaCriteria()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpaReportUrl()).isEqualTo(expected.getGpa().getGpaReportUrl()),
() -> assertThat(actual.gpaScoreStatusResponse().verifyStatus()).isEqualTo(expected.getVerifyStatus()),

() -> assertThat(actual.siteUserResponse().id()).isEqualTo(expected.getSiteUser().getId()),
() -> assertThat(actual.siteUserResponse().profileImageUrl()).isEqualTo(expected.getSiteUser().getProfileImageUrl()),
() -> assertThat(actual.siteUserResponse().nickname()).isEqualTo(expected.getSiteUser().getNickname())
));
.extracting(content -> content.siteUserResponse().nickname())
.containsOnly("test1", "test2", "test3");
}

@Test
Expand All @@ -121,19 +103,13 @@ class 지원한_GPA_목록_조회 {
Page<GpaScoreSearchResponse> response = adminGpaScoreService.searchGpaScores(condition, pageable);

// then
assertThat(response.getContent()).hasSize(expectedGpaScores.size());
assertThat(response.getContent())
.extracting(content -> content.gpaScoreStatusResponse().verifyStatus())
.containsOnly(VerifyStatus.PENDING);
assertThat(response.getContent())
.hasSize(expectedGpaScores.size())
.zipSatisfy(expectedGpaScores, (actual, expected) -> assertAll(
() -> assertThat(actual.gpaScoreStatusResponse().id()).isEqualTo(expected.getId()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpa()).isEqualTo(expected.getGpa().getGpa()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpaCriteria()).isEqualTo(expected.getGpa().getGpaCriteria()),
() -> assertThat(actual.gpaScoreStatusResponse().gpaResponse().gpaReportUrl()).isEqualTo(expected.getGpa().getGpaReportUrl()),
() -> assertThat(actual.gpaScoreStatusResponse().verifyStatus()).isEqualTo(expected.getVerifyStatus()),

() -> assertThat(actual.siteUserResponse().id()).isEqualTo(expected.getSiteUser().getId()),
() -> assertThat(actual.siteUserResponse().profileImageUrl()).isEqualTo(expected.getSiteUser().getProfileImageUrl()),
() -> assertThat(actual.siteUserResponse().nickname()).isEqualTo(expected.getSiteUser().getNickname())
));
.extracting(content -> content.siteUserResponse().nickname())
.containsOnly("test1");
}
}

Expand Down Expand Up @@ -203,13 +179,4 @@ class GPA_점수_검증_및_수정 {
.hasMessage(GPA_SCORE_NOT_FOUND.getMessage());
}
}

private GpaScore createGpaScore(SiteUser siteUser, VerifyStatus status) {
GpaScore gpaScore = new GpaScore(
new Gpa(4.0, 4.5, "/gpa-report.pdf"),
siteUser
);
gpaScore.setVerifyStatus(status);
return gpaScoreRepository.save(gpaScore);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@
import com.example.solidconnection.admin.dto.LanguageTestScoreSearchResponse;
import com.example.solidconnection.admin.dto.LanguageTestScoreUpdateRequest;
import com.example.solidconnection.admin.dto.ScoreSearchCondition;
import com.example.solidconnection.application.domain.LanguageTest;
import com.example.solidconnection.application.domain.VerifyStatus;
import com.example.solidconnection.common.exception.CustomException;
import com.example.solidconnection.score.domain.LanguageTestScore;
import com.example.solidconnection.score.repository.LanguageTestScoreRepository;
import com.example.solidconnection.score.fixture.LanguageTestScoreFixture;
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.support.TestContainerSpringBootTest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
Expand All @@ -30,17 +29,18 @@
import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode;
import static org.junit.jupiter.api.Assertions.assertAll;

@TestContainerSpringBootTest
@DisplayName("어학 검증 관리자 서비스 테스트")
class AdminLanguageTestScoreServiceTest extends BaseIntegrationTest {
class AdminLanguageTestScoreServiceTest {

@Autowired
private AdminLanguageTestScoreService adminLanguageTestScoreService;

@Autowired
private LanguageTestScoreRepository languageTestScoreRepository;
private SiteUserFixture siteUserFixture;

@Autowired
private SiteUserFixture siteUserFixture;
private LanguageTestScoreFixture languageTestScoreFixture;

private LanguageTestScore languageTestScore1;
private LanguageTestScore languageTestScore2;
Expand All @@ -51,9 +51,9 @@ void setUp() {
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);
languageTestScore1 = languageTestScoreFixture.어학_점수(VerifyStatus.PENDING, user1);
languageTestScore2 = languageTestScoreFixture.어학_점수(VerifyStatus.PENDING, user2);
languageTestScore3 = languageTestScoreFixture.어학_점수(VerifyStatus.REJECTED, user3);
}

@Nested
Expand All @@ -70,22 +70,10 @@ class 지원한_어학_목록_조회 {
Page<LanguageTestScoreSearchResponse> response = adminLanguageTestScoreService.searchLanguageTestScores(condition, pageable);

// then
assertThat(response.getContent()).hasSize(expectedLanguageTestScores.size());
assertThat(response.getContent())
.hasSize(expectedLanguageTestScores.size())
.zipSatisfy(expectedLanguageTestScores, (actual, expected) -> assertAll(
() -> assertThat(actual.languageTestScoreStatusResponse().id()).isEqualTo(expected.getId()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestType())
.isEqualTo(expected.getLanguageTest().getLanguageTestType()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestScore())
.isEqualTo(expected.getLanguageTest().getLanguageTestScore()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestReportUrl())
.isEqualTo(expected.getLanguageTest().getLanguageTestReportUrl()),
() -> assertThat(actual.languageTestScoreStatusResponse().verifyStatus()).isEqualTo(expected.getVerifyStatus()),

() -> assertThat(actual.siteUserResponse().id()).isEqualTo(expected.getSiteUser().getId()),
() -> assertThat(actual.siteUserResponse().profileImageUrl()).isEqualTo(expected.getSiteUser().getProfileImageUrl()),
() -> assertThat(actual.siteUserResponse().nickname()).isEqualTo(expected.getSiteUser().getNickname())
));
.extracting(content -> content.languageTestScoreStatusResponse().verifyStatus())
.containsOnly(VerifyStatus.PENDING);
}

@Test
Expand All @@ -99,22 +87,10 @@ class 지원한_어학_목록_조회 {
Page<LanguageTestScoreSearchResponse> response = adminLanguageTestScoreService.searchLanguageTestScores(condition, pageable);

// then
assertThat(response.getContent()).hasSize(expectedLanguageTestScores.size());
assertThat(response.getContent())
.hasSize(expectedLanguageTestScores.size())
.zipSatisfy(expectedLanguageTestScores, (actual, expected) -> assertAll(
() -> assertThat(actual.languageTestScoreStatusResponse().id()).isEqualTo(expected.getId()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestType())
.isEqualTo(expected.getLanguageTest().getLanguageTestType()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestScore())
.isEqualTo(expected.getLanguageTest().getLanguageTestScore()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestReportUrl())
.isEqualTo(expected.getLanguageTest().getLanguageTestReportUrl()),
() -> assertThat(actual.languageTestScoreStatusResponse().verifyStatus()).isEqualTo(expected.getVerifyStatus()),

() -> assertThat(actual.siteUserResponse().id()).isEqualTo(expected.getSiteUser().getId()),
() -> assertThat(actual.siteUserResponse().profileImageUrl()).isEqualTo(expected.getSiteUser().getProfileImageUrl()),
() -> assertThat(actual.siteUserResponse().nickname()).isEqualTo(expected.getSiteUser().getNickname())
));
.extracting(content -> content.siteUserResponse().nickname())
.containsOnly("test1", "test2", "test3");
}

@Test
Expand All @@ -128,22 +104,13 @@ class 지원한_어학_목록_조회 {
Page<LanguageTestScoreSearchResponse> response = adminLanguageTestScoreService.searchLanguageTestScores(condition, pageable);

// then
assertThat(response.getContent()).hasSize(expectedLanguageTestScores.size());
assertThat(response.getContent())
.extracting(content -> content.languageTestScoreStatusResponse().verifyStatus())
.containsOnly(VerifyStatus.PENDING);
assertThat(response.getContent())
.hasSize(expectedLanguageTestScores.size())
.zipSatisfy(expectedLanguageTestScores, (actual, expected) -> assertAll(
() -> assertThat(actual.languageTestScoreStatusResponse().id()).isEqualTo(expected.getId()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestType())
.isEqualTo(expected.getLanguageTest().getLanguageTestType()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestScore())
.isEqualTo(expected.getLanguageTest().getLanguageTestScore()),
() -> assertThat(actual.languageTestScoreStatusResponse().languageTestResponse().languageTestReportUrl())
.isEqualTo(expected.getLanguageTest().getLanguageTestReportUrl()),
() -> assertThat(actual.languageTestScoreStatusResponse().verifyStatus()).isEqualTo(expected.getVerifyStatus()),

() -> assertThat(actual.siteUserResponse().id()).isEqualTo(expected.getSiteUser().getId()),
() -> assertThat(actual.siteUserResponse().profileImageUrl()).isEqualTo(expected.getSiteUser().getProfileImageUrl()),
() -> assertThat(actual.siteUserResponse().nickname()).isEqualTo(expected.getSiteUser().getNickname())
));
.extracting(content -> content.siteUserResponse().nickname())
.containsOnly("test1");
}
}

Expand Down Expand Up @@ -213,13 +180,4 @@ class 어학점수_검증_및_수정 {
.hasMessage(LANGUAGE_TEST_SCORE_NOT_FOUND.getMessage());
}
}

private LanguageTestScore createLanguageTestScore(SiteUser siteUser, VerifyStatus status) {
LanguageTestScore languageTestScore = new LanguageTestScore(
new LanguageTest(TOEIC, "500", "/toeic-report.pdf"),
siteUser
);
languageTestScore.setVerifyStatus(status);
return languageTestScoreRepository.save(languageTestScore);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.solidconnection.score.fixture;

import com.example.solidconnection.application.domain.Gpa;
import com.example.solidconnection.application.domain.VerifyStatus;
import com.example.solidconnection.score.domain.GpaScore;
import com.example.solidconnection.siteuser.domain.SiteUser;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.test.context.TestComponent;

@TestComponent
@RequiredArgsConstructor
public class GpaScoreFixture {

private final GpaScoreFixtureBuilder gpaScoreFixtureBuilder;

public GpaScore GPA_점수 (VerifyStatus verifyStatus, SiteUser siteUser) {
return gpaScoreFixtureBuilder.gpaScore()
.gpa(new Gpa(4.0, 4.5, "/gpa-report.pdf"))
.verifyStatus(verifyStatus)
.siteUser(siteUser)
.create();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.example.solidconnection.score.fixture;

import com.example.solidconnection.application.domain.Gpa;
import com.example.solidconnection.application.domain.VerifyStatus;
import com.example.solidconnection.score.domain.GpaScore;
import com.example.solidconnection.score.repository.GpaScoreRepository;
import com.example.solidconnection.siteuser.domain.SiteUser;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.test.context.TestComponent;

@TestComponent
@RequiredArgsConstructor
public class GpaScoreFixtureBuilder {

private final GpaScoreRepository gpaScoreRepository;

private Gpa gpa;
private VerifyStatus verifyStatus;
private SiteUser siteUser;

public GpaScoreFixtureBuilder gpaScore() {
return new GpaScoreFixtureBuilder(gpaScoreRepository);
}

public GpaScoreFixtureBuilder gpa(Gpa gpa) {
this.gpa = gpa;
return this;
}

public GpaScoreFixtureBuilder verifyStatus(VerifyStatus verifyStatus) {
this.verifyStatus = verifyStatus;
return this;
}

public GpaScoreFixtureBuilder siteUser(SiteUser siteUser) {
this.siteUser = siteUser;
return this;
}

public GpaScore create() {
GpaScore gpaScore = new GpaScore(gpa, siteUser);
gpaScore.setSiteUser(siteUser);
gpaScore.setVerifyStatus(verifyStatus);
return gpaScoreRepository.save(gpaScore);
}
}
Loading
Loading