diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/entity/Quizzes.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/entity/Quizzes.java new file mode 100644 index 0000000..75c8c72 --- /dev/null +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/entity/Quizzes.java @@ -0,0 +1,30 @@ +/* + * + * Quizzies.java 2023-02-18 + * + * Copyright 2023 WorksMobile Corp. All rights Reserved. + * WorksMobile PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + */ + +package com.mangkyu.employment.interview.app.quiz.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Quizzes { + + private List quizList; + + public boolean isLastMail(final Integer quizSize) { + return quizList.size() <= quizSize; + } +} diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/service/QuizService.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/service/QuizService.java index 0cd13f7..9401c40 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/quiz/service/QuizService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/service/QuizService.java @@ -3,6 +3,7 @@ package com.mangkyu.employment.interview.app.quiz.service; import com.mangkyu.employment.interview.app.quiz.controller.*; import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.entity.Quizzes; import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository; import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository; import com.mangkyu.employment.interview.enums.common.EnumMapperKey; @@ -63,13 +64,13 @@ public class QuizService { .build(); } - public List getUnsolvedQuizList(final Long userId, final QuizLevel quizLevel, final Set quizCategorySet) { + public Quizzes getUnsolvedQuizList(final Long userId, final QuizLevel quizLevel, final Set quizCategorySet) { final Set solvedQuizIdList = solvedQuizRepository.findAllByMember_Id(userId) .stream() .map(v -> v.getQuiz().getId()) .collect(Collectors.toSet()); - return quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel); + return new Quizzes(quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel)); } public List getRandomQuizListUnderLimit(final List quizList, final Integer quizSize) { diff --git a/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java b/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java index 8fc055c..645dc82 100644 --- a/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java +++ b/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java @@ -3,6 +3,7 @@ package com.mangkyu.employment.interview.cron; import com.mangkyu.employment.interview.app.mail.service.MailService; import com.mangkyu.employment.interview.app.member.entity.Member; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.entity.Quizzes; import com.mangkyu.employment.interview.app.quiz.service.QuizService; import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService; import com.mangkyu.employment.interview.app.member.service.GetMemberService; @@ -45,10 +46,10 @@ public class SendQuizCronJob { } private void sendUnsolvedQuizForUser(final Member member) { - final List unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet()); - final boolean isLastMail = isLastMail(unsolvedQuizList, member.getQuizSize()); + final Quizzes unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet()); + final boolean isLastMail = unsolvedQuizList.isLastMail(member.getQuizSize()); - final List randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize()); + final List randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList.getQuizList(), member.getQuizSize()); if (isLastMail) { member.disableUser(); } @@ -57,8 +58,4 @@ public class SendQuizCronJob { solvedQuizService.addSolvedQuizList(member, randomQuizList); } - private boolean isLastMail(final List quizList, final Integer quizSize) { - return quizList.size() <= quizSize; - } - } diff --git a/src/test/java/com/mangkyu/employment/interview/app/quiz/entity/QuizzesTest.java b/src/test/java/com/mangkyu/employment/interview/app/quiz/entity/QuizzesTest.java new file mode 100644 index 0000000..69243a4 --- /dev/null +++ b/src/test/java/com/mangkyu/employment/interview/app/quiz/entity/QuizzesTest.java @@ -0,0 +1,42 @@ +package com.mangkyu.employment.interview.app.quiz.entity; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class QuizzesTest { + + @Test + void 마지막메일_True(){ + // given + Quizzes quizzes = quizzes(); + + // when + boolean result = quizzes.isLastMail(3); + + // then + assertThat(result).isTrue(); + } + + @Test + void 마지막메일_False(){ + // given + Quizzes quizzes = quizzes(); + + // when + boolean result = quizzes.isLastMail(1); + + // then + assertThat(result).isFalse(); + } + + private Quizzes quizzes() { + return new Quizzes(List.of(new Quiz(), new Quiz())); + } + +} \ No newline at end of file diff --git a/src/test/java/com/mangkyu/employment/interview/app/quiz/service/QuizServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/quiz/service/QuizServiceTest.java index 31e44db..9c36e47 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/quiz/service/QuizServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/quiz/service/QuizServiceTest.java @@ -2,6 +2,7 @@ package com.mangkyu.employment.interview.app.quiz.service; import com.mangkyu.employment.interview.app.quiz.controller.*; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.entity.Quizzes; import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository; import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz; import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository; @@ -188,10 +189,10 @@ class QuizServiceTest { doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel); // when - final List result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet); + final Quizzes quizzes = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet); // then - assertThat(result.size()).isEqualTo(unsolvedQuizList.size()); + assertThat(quizzes.getQuizList().size()).isEqualTo(unsolvedQuizList.size()); } @Test @@ -209,10 +210,10 @@ class QuizServiceTest { doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), quizCategorySet, quizLevel); // when - final List result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet); + final Quizzes result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet); // then - assertThat(result.size()).isEqualTo(unsolvedQuizList.size()); + assertThat(result.getQuizList().size()).isEqualTo(unsolvedQuizList.size()); } @Test diff --git a/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java b/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java index b3cdc80..bc024a7 100644 --- a/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java +++ b/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java @@ -3,6 +3,7 @@ package com.mangkyu.employment.interview.cron; import com.mangkyu.employment.interview.app.mail.service.MailService; import com.mangkyu.employment.interview.app.member.entity.Member; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.entity.Quizzes; import com.mangkyu.employment.interview.app.quiz.service.QuizService; import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService; import com.mangkyu.employment.interview.app.member.service.GetMemberService; @@ -81,7 +82,7 @@ class SendQuizCronJobTest { doReturn(memberList) .when(memberService) .getEnabledUserList(quizDay); - doReturn(unsolvedQuizList) + doReturn(new Quizzes(unsolvedQuizList)) .when(quizService) .getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet()); doReturn(randomQuizList) @@ -109,7 +110,7 @@ class SendQuizCronJobTest { doReturn(memberList) .when(memberService) .getEnabledUserList(quizDay); - doReturn(unsolvedQuizList) + doReturn(new Quizzes(unsolvedQuizList)) .when(quizService) .getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet()); doReturn(randomQuizList)