From e61186446d7c4c918631989cee52d206a6683ee1 Mon Sep 17 00:00:00 2001 From: NaMinhyeok Date: Thu, 20 Feb 2025 14:33:27 +0900 Subject: [PATCH] =?UTF-8?q?[#124]=20feat:=20=EC=98=A8=EB=B3=B4=EB=94=A9=20?= =?UTF-8?q?=EC=84=A4=EB=AC=B8=20=EC=A0=9C=EC=B6=9C=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/survey/service/SurveyService.java | 2 + .../survey/service/SurveyServiceTest.java | 102 ++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/survey/service/SurveyService.java b/jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/survey/service/SurveyService.java index f2f1ea7..008a61c 100644 --- a/jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/survey/service/SurveyService.java +++ b/jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/survey/service/SurveyService.java @@ -256,6 +256,7 @@ private Map createSurveyToSelectedOption( List submissionResults, Map surveyMap) { Map surveyOptionMap = submissionResults.stream() + .distinct() .map( submission -> { Survey survey = surveyMap.get(submission.surveyId()); @@ -266,6 +267,7 @@ private Map createSurveyToSelectedOption( return Map.entry(survey, option); }) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + // (existingOption, newOption) -> newOption)); return surveyOptionMap; } } diff --git a/jaknaeso-core/src/test/java/org/nexters/jaknaesocore/domain/survey/service/SurveyServiceTest.java b/jaknaeso-core/src/test/java/org/nexters/jaknaesocore/domain/survey/service/SurveyServiceTest.java index 20ea830..dfc0c2b 100644 --- a/jaknaeso-core/src/test/java/org/nexters/jaknaesocore/domain/survey/service/SurveyServiceTest.java +++ b/jaknaeso-core/src/test/java/org/nexters/jaknaesocore/domain/survey/service/SurveyServiceTest.java @@ -663,6 +663,108 @@ void getNextSurvey() { submittedAt.toLocalDate())); } + @Transactional + @Test + void 온보딩_설문을_제출할_때_동일한_설문에_대한_요청이_있으면_후순위_요청이_저장된다() { + // given + Member member = Member.create("나민혁", "test@test.com"); + memberRepository.save(member); + SurveyBundle surveyBundle = new SurveyBundle(); + + final ValueCharacter valueCharacter = + valueCharacterRepository.save( + ValueCharacter.builder() + .name("아낌없이 주는 보금자리 유형") + .description("보금자리 유형 설명") + .keyword(Keyword.BENEVOLENCE) + .build()); + + surveyBundleRepository.save(surveyBundle); + + OnboardingSurvey survey1 = + new OnboardingSurvey( + "새로운 아이디어를 갖고 창의적인 것이 그/그녀에게 중요하다. 그/그녀는 일을 자신만의 독특한 방식으로 하는 것을 좋아한다.", surveyBundle); + OnboardingSurvey survey2 = + new OnboardingSurvey("그/그녀에게 부자가 되는 것은 중요하다. 많은 돈과 비싼 물건들을 가지길 원한다.", surveyBundle); + OnboardingSurvey survey3 = + new OnboardingSurvey( + "세상의 모든 사람들이 평등하게 대우받아야 한다고 생각한다. 그/그녀는 모든 사람이 인생에서 동등한 기회를 가져야 한다고 믿는다.", + surveyBundle); + OnboardingSurvey survey4 = + new OnboardingSurvey( + "그/그녀에게 자신의 능력을 보여주는 것이 매우 중요하다. 사람들이 자신이 하는 일을 인정해주길 바란다.", surveyBundle); + + surveyRepository.saveAll(List.of(survey1, survey2, survey3, survey4)); + + List scores1 = + List.of( + KeywordScore.builder().keyword(Keyword.ADVENTURE).score(BigDecimal.ONE).build(), + KeywordScore.builder().keyword(Keyword.BENEVOLENCE).score(BigDecimal.TWO).build()); + List scores2 = + List.of( + KeywordScore.builder() + .keyword(Keyword.ADVENTURE) + .score(BigDecimal.valueOf(-1)) + .build()); + + SurveyOption option0 = + SurveyOption.builder().survey(survey1).scores(scores1).content("전혀 나와 같지않다.").build(); + SurveyOption option1 = + SurveyOption.builder().survey(survey1).scores(scores1).content("전혀 나와 같지않다.").build(); + SurveyOption option2 = + SurveyOption.builder().survey(survey2).scores(scores1).content("나와 같지 않다.").build(); + SurveyOption option3 = + SurveyOption.builder().survey(survey3).scores(scores2).content("나와 조금 같다.").build(); + SurveyOption option4 = + SurveyOption.builder().survey(survey4).scores(scores2).content("나와 같다.").build(); + + surveyOptionRepository.saveAll(List.of(option0, option1, option2, option3, option4)); + LocalDateTime submittedAt = LocalDateTime.of(2025, 2, 13, 18, 25, 0); + + OnboardingSubmissionsCommand command = + new OnboardingSubmissionsCommand( + List.of( + new OnboardingSubmissionResult(survey1.getId(), option0.getId()), + new OnboardingSubmissionResult(survey1.getId(), option1.getId()), + new OnboardingSubmissionResult(survey2.getId(), option2.getId()), + new OnboardingSubmissionResult(survey3.getId(), option3.getId()), + new OnboardingSubmissionResult(survey4.getId(), option4.getId())), + member.getId()); + // when + surveyService.submitOnboardingSurvey(command, submittedAt); + // then + List submissions = surveySubmissionRepository.findAll(); + + then(submissions).hasSize(4); + then(submissions) + .extracting("member.id", "survey.id", "selectedOption.id", "submittedAt") + .containsExactlyInAnyOrder( + tuple(member.getId(), survey1.getId(), option1.getId(), submittedAt), + tuple(member.getId(), survey2.getId(), option2.getId(), submittedAt), + tuple(member.getId(), survey3.getId(), option3.getId(), submittedAt), + tuple(member.getId(), survey4.getId(), option4.getId(), submittedAt)); + then(member).extracting("completedOnboardingAt").isEqualTo(submittedAt); + then(characterRecordRepository.findAll()) + .hasSize(1) + .extracting( + "ordinalNumber", + "characterNo", + "member.id", + "surveyBundle.id", + "valueCharacter.id", + "startDate", + "endDate") + .containsExactly( + tuple( + 1, + "첫번째 캐릭터", + member.getId(), + surveyBundle.getId(), + valueCharacter.getId(), + submittedAt.toLocalDate(), + submittedAt.toLocalDate())); + } + @Test void 온보딩을_이미_완료했으면_진행할_수_없다() { // given