From 5e4fa297fd48ccd7e04f3f1e16206dd96076375a Mon Sep 17 00:00:00 2001 From: devMuromi Date: Sat, 7 Sep 2024 21:00:14 +0900 Subject: [PATCH 1/3] =?UTF-8?q?test:=20application=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=8B=9C=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EC=B6=94=EA=B0=80,=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9E=90=EA=B0=80=5F=EC=84=A0=ED=83=9D=ED=95=9C=5F=EB=8C=80?= =?UTF-8?q?=ED=95=99=EC=9D=98=5F=EC=A7=80=EC=9B=90=EC=9E=90=EB=8A=94=5F?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=90=98=EC=A7=80=5F=EC=95=8A=EB=8A=94?= =?UTF-8?q?=EB=8B=A4()=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e2e/ApplicantsQueryTest.java | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java index 7dd8b63f9..69c20091c 100644 --- a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java +++ b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java @@ -39,11 +39,13 @@ class ApplicantsQueryTest extends UniversityDataSetUpEndToEndTest { TokenService tokenService; private String accessToken; + private String adminAccessToken; private Application 나의_지원정보; private Application 사용자1_지원정보; private Application 사용자2_지원정보; private Application 사용자3_지원정보; private Application 사용자4_이전학기_지원정보; + private Application 사용자5_관리자_지원정보; @Value("${university.term}") private String term; @@ -60,11 +62,16 @@ public void setUpUserAndToken() { String refreshToken = tokenService.generateToken(email, TokenType.REFRESH); tokenService.saveToken(refreshToken, TokenType.REFRESH); + adminAccessToken = tokenService.generateToken("email5", TokenType.ACCESS); + String adminRefreshToken = tokenService.generateToken("email5", TokenType.REFRESH); + tokenService.saveToken(adminRefreshToken, TokenType.REFRESH); + // setUp - 사용자 정보 저장 SiteUser 사용자1 = siteUserRepository.save(createSiteUserByEmail("email1")); SiteUser 사용자2 = siteUserRepository.save(createSiteUserByEmail("email2")); SiteUser 사용자3 = siteUserRepository.save(createSiteUserByEmail("email3")); SiteUser 사용자4_이전학기_지원자 = siteUserRepository.save(createSiteUserByEmail("email4")); + SiteUser 사용자5_관리자 = siteUserRepository.save(createSiteUserByEmail("email5")); // setUp - 지원 정보 저장 Gpa gpa = createDummyGpa(); @@ -74,6 +81,7 @@ public void setUpUserAndToken() { 사용자2_지원정보 = new Application(사용자2, gpa, languageTest, term); 사용자3_지원정보 = new Application(사용자3, gpa, languageTest, term); 사용자4_이전학기_지원정보 = new Application(사용자4_이전학기_지원자, gpa, languageTest, beforeTerm); + 사용자5_관리자_지원정보 = new Application(사용자5_관리자, gpa, languageTest, term); 나의_지원정보.updateUniversityChoice(괌대학_B_지원_정보, 괌대학_A_지원_정보, 린츠_카톨릭대학_지원_정보, "0"); 사용자1_지원정보.updateUniversityChoice(괌대학_A_지원_정보, 괌대학_B_지원_정보, 그라츠공과대학_지원_정보, "1"); 사용자2_지원정보.updateUniversityChoice(메이지대학_지원_정보, 그라츠대학_지원_정보, 서던덴마크대학교_지원_정보, "2"); @@ -84,7 +92,8 @@ public void setUpUserAndToken() { 사용자2_지원정보.setVerifyStatus(VerifyStatus.APPROVED); 사용자3_지원정보.setVerifyStatus(VerifyStatus.APPROVED); 사용자4_이전학기_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보)); + 사용자5_관리자_지원정보.setVerifyStatus(VerifyStatus.APPROVED); + applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보, 사용자5_관리자_지원정보)); } @Test @@ -245,6 +254,8 @@ public void setUpUserAndToken() { .statusCode(200) .extract().as(ApplicationsResponse.class); + Integer choicedUniversityCount = 3; + List firstChoiceApplicants = response.firstChoice(); List secondChoiceApplicants = response.secondChoice(); List thirdChoiceApplicants = response.thirdChoice(); @@ -270,8 +281,29 @@ public void setUpUserAndToken() { UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, List.of(ApplicantResponse.of(나의_지원정보, true)))); - assertThat(firstChoiceApplicants.size()).isEqualTo(3); - assertThat(secondChoiceApplicants.size()).isEqualTo(3); - assertThat(thirdChoiceApplicants.size()).isEqualTo(3); + assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + } + + @Test + void 관리자가_선택한_대학의_지원자는_조회되지_않는다() { + ApplicationsResponse response = RestAssured.given().log().all() + .header("Authorization", "Bearer " + adminAccessToken) + .when().log().all() + .get("/application/competitors") + .then().log().all() + .statusCode(200) + .extract().as(ApplicationsResponse.class); + + List firstChoiceApplicants = response.firstChoice(); + List secondChoiceApplicants = response.secondChoice(); + List thirdChoiceApplicants = response.thirdChoice(); + + assertThat(firstChoiceApplicants.size()).isEqualTo(0); + assertThat(secondChoiceApplicants.size()).isEqualTo(0); + assertThat(thirdChoiceApplicants.size()).isEqualTo(0); } + + } From beabd6ac3f7c294a33bdd09a5bb54b399b8b4982 Mon Sep 17 00:00:00 2001 From: devMuromi Date: Sat, 7 Sep 2024 21:00:42 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20application=EC=9D=98=20choiceUnivers?= =?UTF-8?q?ity=EA=B0=80=20null=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20=EA=B3=A0?= =?UTF-8?q?=EB=A0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ApplicationQueryService.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java index fff928f05..66ae84918 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java @@ -19,9 +19,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.function.Function; +import java.util.stream.Collectors; import static com.example.solidconnection.custom.exception.ErrorCode.APPLICATION_NOT_APPROVED; @@ -64,12 +67,19 @@ public ApplicationsResponse getApplicantsByUserApplications(String email) { SiteUser siteUser = siteUserRepository.getByEmail(email); Application userLatestApplication = applicationRepository.getApplicationBySiteUserAndTerm(siteUser, term); - List userAppliedUniversities = List.of( - userLatestApplication.getFirstChoiceUniversity().getUniversity(), - userLatestApplication.getSecondChoiceUniversity().getUniversity(), - userLatestApplication.getThirdChoiceUniversity().getUniversity() - ); - + List userAppliedUniversities = Arrays.asList( + Optional.ofNullable(userLatestApplication.getFirstChoiceUniversity()) + .map(UniversityInfoForApply::getUniversity) + .orElse(null), + Optional.ofNullable(userLatestApplication.getSecondChoiceUniversity()) + .map(UniversityInfoForApply::getUniversity) + .orElse(null), + Optional.ofNullable(userLatestApplication.getThirdChoiceUniversity()) + .map(UniversityInfoForApply::getUniversity) + .orElse(null) + ).stream() + .filter(Objects::nonNull) + .collect(Collectors.toList()); List firstChoiceApplicants = getFirstChoiceApplicants(userAppliedUniversities, siteUser, term); List secondChoiceApplicants = getSecondChoiceApplicants(userAppliedUniversities, siteUser, term); From 83502c85b25c8db2c774c17ee952124a2bf2ccca Mon Sep 17 00:00:00 2001 From: devMuromi Date: Sun, 8 Sep 2024 10:50:51 +0900 Subject: [PATCH 3/3] =?UTF-8?q?test:=20/application/competitors=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=AA=85=20'?= =?UTF-8?q?=EA=B2=BD=EC=9F=81=EC=9E=90~'=EB=A1=9C=20=EB=B3=80=EA=B2=BD,=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=EB=8C=80=ED=95=99=EC=A4=91=20=EC=9D=BC?= =?UTF-8?q?=EB=B6=80=EB=A7=8C=20null=EC=9D=BC=EB=95=8C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 테스트 사용자6 추가 경쟁자를_조회한다() 이름 변경 지원_대학중_미선택이_있을_떄_경쟁자를_조회한다() 추가 지원_대학이_모두_미선택일_때_경쟁자를_조회한다() 이름 변경 --- .../e2e/ApplicantsQueryTest.java | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java index 69c20091c..2f69d6cf7 100644 --- a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java +++ b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java @@ -40,12 +40,14 @@ class ApplicantsQueryTest extends UniversityDataSetUpEndToEndTest { private String accessToken; private String adminAccessToken; + private String user6AccessToken; private Application 나의_지원정보; private Application 사용자1_지원정보; private Application 사용자2_지원정보; private Application 사용자3_지원정보; private Application 사용자4_이전학기_지원정보; private Application 사용자5_관리자_지원정보; + private Application 사용자6_지원정보; @Value("${university.term}") private String term; @@ -66,12 +68,17 @@ public void setUpUserAndToken() { String adminRefreshToken = tokenService.generateToken("email5", TokenType.REFRESH); tokenService.saveToken(adminRefreshToken, TokenType.REFRESH); + user6AccessToken = tokenService.generateToken("email6", TokenType.ACCESS); + String user6RefreshToken = tokenService.generateToken("email6", TokenType.REFRESH); + tokenService.saveToken(user6RefreshToken, TokenType.REFRESH); + // setUp - 사용자 정보 저장 SiteUser 사용자1 = siteUserRepository.save(createSiteUserByEmail("email1")); SiteUser 사용자2 = siteUserRepository.save(createSiteUserByEmail("email2")); SiteUser 사용자3 = siteUserRepository.save(createSiteUserByEmail("email3")); SiteUser 사용자4_이전학기_지원자 = siteUserRepository.save(createSiteUserByEmail("email4")); SiteUser 사용자5_관리자 = siteUserRepository.save(createSiteUserByEmail("email5")); + SiteUser 사용자6 = siteUserRepository.save(createSiteUserByEmail("email6")); // setUp - 지원 정보 저장 Gpa gpa = createDummyGpa(); @@ -82,18 +89,21 @@ public void setUpUserAndToken() { 사용자3_지원정보 = new Application(사용자3, gpa, languageTest, term); 사용자4_이전학기_지원정보 = new Application(사용자4_이전학기_지원자, gpa, languageTest, beforeTerm); 사용자5_관리자_지원정보 = new Application(사용자5_관리자, gpa, languageTest, term); + 사용자6_지원정보 = new Application(사용자6, gpa, languageTest, term); 나의_지원정보.updateUniversityChoice(괌대학_B_지원_정보, 괌대학_A_지원_정보, 린츠_카톨릭대학_지원_정보, "0"); 사용자1_지원정보.updateUniversityChoice(괌대학_A_지원_정보, 괌대학_B_지원_정보, 그라츠공과대학_지원_정보, "1"); 사용자2_지원정보.updateUniversityChoice(메이지대학_지원_정보, 그라츠대학_지원_정보, 서던덴마크대학교_지원_정보, "2"); 사용자3_지원정보.updateUniversityChoice(네바다주립대학_라스베이거스_지원_정보, 그라츠공과대학_지원_정보, 메이지대학_지원_정보, "3"); 사용자4_이전학기_지원정보.updateUniversityChoice(네바다주립대학_라스베이거스_지원_정보, 그라츠공과대학_지원_정보, 메이지대학_지원_정보, "4"); + 사용자6_지원정보.updateUniversityChoice(코펜하겐IT대학_지원_정보, null, null, "6"); 나의_지원정보.setVerifyStatus(VerifyStatus.APPROVED); 사용자1_지원정보.setVerifyStatus(VerifyStatus.APPROVED); 사용자2_지원정보.setVerifyStatus(VerifyStatus.APPROVED); 사용자3_지원정보.setVerifyStatus(VerifyStatus.APPROVED); 사용자4_이전학기_지원정보.setVerifyStatus(VerifyStatus.APPROVED); 사용자5_관리자_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보, 사용자5_관리자_지원정보)); + 사용자6_지원정보.setVerifyStatus(VerifyStatus.APPROVED); + applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보, 사용자5_관리자_지원정보, 사용자6_지원정보)); } @Test @@ -245,7 +255,7 @@ public void setUpUserAndToken() { } @Test - void 내가_지원한_대학의_지원자를_조회한다() { + void 경쟁자를_조회한다() { ApplicationsResponse response = RestAssured.given().log().all() .header("Authorization", "Bearer " + accessToken) .when().log().all() @@ -280,30 +290,52 @@ public void setUpUserAndToken() { List.of()), UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, List.of(ApplicantResponse.of(나의_지원정보, true)))); - + assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); } @Test - void 관리자가_선택한_대학의_지원자는_조회되지_않는다() { + void 지원_대학중_미선택이_있을_떄_경쟁자를_조회한다() { ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + adminAccessToken) + .header("Authorization", "Bearer " + user6AccessToken) .when().log().all() .get("/application/competitors") .then().log().all() .statusCode(200) .extract().as(ApplicationsResponse.class); + Integer choicedUniversityCount = 1; + List firstChoiceApplicants = response.firstChoice(); List secondChoiceApplicants = response.secondChoice(); List thirdChoiceApplicants = response.thirdChoice(); - assertThat(firstChoiceApplicants.size()).isEqualTo(0); - assertThat(secondChoiceApplicants.size()).isEqualTo(0); - assertThat(thirdChoiceApplicants.size()).isEqualTo(0); + assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); } + @Test + void 지원_대학이_모두_미선택일_때_경쟁자를_조회한다() { + ApplicationsResponse response = RestAssured.given().log().all() + .header("Authorization", "Bearer " + adminAccessToken) + .when().log().all() + .get("/application/competitors") + .then().log().all() + .statusCode(200) + .extract().as(ApplicationsResponse.class); + + Integer choicedUniversityCount = 0; + + List firstChoiceApplicants = response.firstChoice(); + List secondChoiceApplicants = response.secondChoice(); + List thirdChoiceApplicants = response.thirdChoice(); + + assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); + } }