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 @@ -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;

Expand Down Expand Up @@ -64,12 +67,19 @@ public ApplicationsResponse getApplicantsByUserApplications(String email) {
SiteUser siteUser = siteUserRepository.getByEmail(email);

Application userLatestApplication = applicationRepository.getApplicationBySiteUserAndTerm(siteUser, term);
List<University> userAppliedUniversities = List.of(
userLatestApplication.getFirstChoiceUniversity().getUniversity(),
userLatestApplication.getSecondChoiceUniversity().getUniversity(),
userLatestApplication.getThirdChoiceUniversity().getUniversity()
);

List<University> 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<UniversityApplicantsResponse> firstChoiceApplicants = getFirstChoiceApplicants(userAppliedUniversities, siteUser, term);
List<UniversityApplicantsResponse> secondChoiceApplicants = getSecondChoiceApplicants(userAppliedUniversities, siteUser, term);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,15 @@ class ApplicantsQueryTest extends UniversityDataSetUpEndToEndTest {
TokenService tokenService;

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;
Expand All @@ -60,11 +64,21 @@ 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);

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();
Expand All @@ -74,17 +88,22 @@ 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);
사용자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);
applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보));
사용자5_관리자_지원정보.setVerifyStatus(VerifyStatus.APPROVED);
사용자6_지원정보.setVerifyStatus(VerifyStatus.APPROVED);
applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보, 사용자5_관리자_지원정보, 사용자6_지원정보));
}

@Test
Expand Down Expand Up @@ -236,7 +255,7 @@ public void setUpUserAndToken() {
}

@Test
void 내가_지원한_대학의_지원자를_조회한다() {
void 경쟁자를_조회한다() {
ApplicationsResponse response = RestAssured.given().log().all()
.header("Authorization", "Bearer " + accessToken)
.when().log().all()
Expand All @@ -245,6 +264,8 @@ public void setUpUserAndToken() {
.statusCode(200)
.extract().as(ApplicationsResponse.class);

Integer choicedUniversityCount = 3;

List<UniversityApplicantsResponse> firstChoiceApplicants = response.firstChoice();
List<UniversityApplicantsResponse> secondChoiceApplicants = response.secondChoice();
List<UniversityApplicantsResponse> thirdChoiceApplicants = response.thirdChoice();
Expand All @@ -269,9 +290,52 @@ public void setUpUserAndToken() {
List.of()),
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 " + user6AccessToken)
.when().log().all()
.get("/application/competitors")
.then().log().all()
.statusCode(200)
.extract().as(ApplicationsResponse.class);

Integer choicedUniversityCount = 1;

List<UniversityApplicantsResponse> firstChoiceApplicants = response.firstChoice();
List<UniversityApplicantsResponse> secondChoiceApplicants = response.secondChoice();
List<UniversityApplicantsResponse> thirdChoiceApplicants = response.thirdChoice();

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<UniversityApplicantsResponse> firstChoiceApplicants = response.firstChoice();
List<UniversityApplicantsResponse> secondChoiceApplicants = response.secondChoice();
List<UniversityApplicantsResponse> thirdChoiceApplicants = response.thirdChoice();

assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount);
assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount);
assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount);
}

}