From 71720804a3ee3f1e92abd1f606633a9b04818801 Mon Sep 17 00:00:00 2001 From: sewon Date: Wed, 28 Aug 2024 12:49:38 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=EC=A7=80=EC=9B=90=EC=84=9C?= =?UTF-8?q?=EC=9D=98=202,3=20=EC=84=A0=ED=83=9D=EC=A7=80=20=ED=95=84?= =?UTF-8?q?=EC=88=98=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EC=95=84=EB=8F=84=20=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ApplicationSubmissionService.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java index 753bc89cc..0f22be85f 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -68,7 +68,7 @@ public boolean submitScore(String email, ScoreRequest scoreRequest) { * */ @Transactional public boolean submitUniversityChoice(String email, UniversityChoiceRequest universityChoiceRequest) { - validateNoDuplicateUniversityChoices(universityChoiceRequest); + validateUniversityChoices(universityChoiceRequest); // 성적 제출한 적이 한번도 없는 경우 Application existingApplication = applicationRepository.findTop1BySiteUser_EmailOrderByTermDesc(email) @@ -83,14 +83,16 @@ public boolean submitUniversityChoice(String email, UniversityChoiceRequest univ }) .orElse(existingApplication); // 금학기에 이미 성적 제출한 경우 기존 객체 사용 + validateUpdateLimitNotExceed(application); + UniversityInfoForApply firstChoiceUniversity = universityInfoForApplyRepository .getUniversityInfoForApplyByIdAndTerm(universityChoiceRequest.firstChoiceUniversityId(), term); - UniversityInfoForApply secondChoiceUniversity = universityInfoForApplyRepository - .getUniversityInfoForApplyByIdAndTerm(universityChoiceRequest.secondChoiceUniversityId(), term); - UniversityInfoForApply thirdChoiceUniversity = universityInfoForApplyRepository - .getUniversityInfoForApplyByIdAndTerm(universityChoiceRequest.thirdChoiceUniversityId(), term); - - validateUpdateLimitNotExceed(application); + UniversityInfoForApply secondChoiceUniversity = Optional.ofNullable(universityChoiceRequest.secondChoiceUniversityId()) + .map(id -> universityInfoForApplyRepository.getUniversityInfoForApplyByIdAndTerm(id, term)) + .orElse(null); + UniversityInfoForApply thirdChoiceUniversity = Optional.ofNullable(universityChoiceRequest.thirdChoiceUniversityId()) + .map(id -> universityInfoForApplyRepository.getUniversityInfoForApplyByIdAndTerm(id, term)) + .orElse(null); application.updateUniversityChoice(firstChoiceUniversity, secondChoiceUniversity, thirdChoiceUniversity, getRandomNickname()); return true; } @@ -109,14 +111,21 @@ private void validateUpdateLimitNotExceed(Application application) { } } - private void validateNoDuplicateUniversityChoices(UniversityChoiceRequest universityChoiceRequest) { + // 입력값 유효성 검증 + private void validateUniversityChoices(UniversityChoiceRequest universityChoiceRequest) { Set uniqueUniversityIds = new HashSet<>(); - uniqueUniversityIds.add(universityChoiceRequest.firstChoiceUniversityId()); - uniqueUniversityIds.add(universityChoiceRequest.secondChoiceUniversityId()); - uniqueUniversityIds.add(universityChoiceRequest.thirdChoiceUniversityId()); + if (universityChoiceRequest.secondChoiceUniversityId() != null) { + addUniversityChoice(uniqueUniversityIds, universityChoiceRequest.secondChoiceUniversityId()); + } + if (universityChoiceRequest.thirdChoiceUniversityId() != null) { + addUniversityChoice(uniqueUniversityIds, universityChoiceRequest.thirdChoiceUniversityId()); + } + } - if (uniqueUniversityIds.size() < 3) { + private void addUniversityChoice(Set uniqueUniversityIds, Long universityId) { + boolean notAdded = !uniqueUniversityIds.add(universityId); + if (notAdded) { throw new CustomException(CANT_APPLY_FOR_SAME_UNIVERSITY); } } From 83861fb509d04a14d2a0dc8016af55d891262186 Mon Sep 17 00:00:00 2001 From: sewon Date: Wed, 28 Aug 2024 12:50:24 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test:=20=EC=A7=80=EC=9B=90=EC=84=9C=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B0=92=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unit/service/ApplicationServiceTest.java | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/example/solidconnection/unit/service/ApplicationServiceTest.java b/src/test/java/com/example/solidconnection/unit/service/ApplicationServiceTest.java index d967c90bf..7688478fc 100644 --- a/src/test/java/com/example/solidconnection/unit/service/ApplicationServiceTest.java +++ b/src/test/java/com/example/solidconnection/unit/service/ApplicationServiceTest.java @@ -16,6 +16,8 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -23,6 +25,7 @@ import java.util.Optional; +import static com.example.solidconnection.custom.exception.ErrorCode.CANT_APPLY_FOR_SAME_UNIVERSITY; import static com.example.solidconnection.custom.exception.ErrorCode.SCORE_SHOULD_SUBMITTED_FIRST; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -116,7 +119,9 @@ private Application createApplication(String term) { verify(applicationRepository, times(0)).save(any(Application.class)); } - // 예외테스트 + /** + * 지망대학 제출 + */ @Test void 지망대학_제출할_때_성적_제출이력이_없다면_예외_응답을_반환한다() { // given @@ -171,4 +176,48 @@ private Application createApplication(String term) { verify(siteUserRepository, times(0)).getByEmail(siteUser.getEmail()); verify(applicationRepository, times(0)).save(any(Application.class)); } + + @ParameterizedTest + @CsvSource({ + "1, 2, 3", + "1, , 3", + "1, 2, ", + "1, , " + }) + void 지망대학_제출할_때_2지망과_3지망은_NULL_허용한다(Long firstChoice, Long secondChoice, Long thirdChoice) { + // Given + UniversityChoiceRequest universityChoiceRequest = new UniversityChoiceRequest(firstChoice, secondChoice, thirdChoice); + when(applicationRepository.findTop1BySiteUser_EmailOrderByTermDesc(siteUser.getEmail())) + .thenReturn(Optional.of(application)); + + // When + applicationSubmissionService.submitUniversityChoice(siteUser.getEmail(), universityChoiceRequest); + + // Then + verify(applicationRepository, times(1)).findTop1BySiteUser_EmailOrderByTermDesc(siteUser.getEmail()); + verify(siteUserRepository, times(0)).getByEmail(siteUser.getEmail()); + verify(applicationRepository, times(0)).save(any(Application.class)); + } + + @ParameterizedTest + @CsvSource({ + "1, 1, 1", + "1, 2, 1", + "1, 1, 2", + "1, , 1", + "1, 1, " + }) + void 지망대학_제출할_때_선택지가_중복된다면_예외_응답을_반환한다(Long firstChoice, Long secondChoice, Long thirdChoice) { + // given + UniversityChoiceRequest universityChoiceRequest = new UniversityChoiceRequest(firstChoice, secondChoice, thirdChoice); + + // when, then + CustomException exception = assertThrows(CustomException.class, () -> { + applicationSubmissionService.submitUniversityChoice(siteUser.getEmail(), universityChoiceRequest); + }); + assertThat(exception.getMessage()) + .isEqualTo(CANT_APPLY_FOR_SAME_UNIVERSITY.getMessage()); + assertThat(exception.getCode()) + .isEqualTo(CANT_APPLY_FOR_SAME_UNIVERSITY.getCode()); + } }