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 261cc3a..b632f12 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 @@ -40,17 +40,17 @@ public class QuizService { : quizRepository.findByIdNotInAndQuizLevel(solvedQuizIdList, quizLevel); } - public List getRandomQuizListUnderLimit(final List quizList) { - return quizList.size() <= QuizConstants.MAXIMUM_QUIZ_SIZE + public List getRandomQuizListUnderLimit(final List quizList, final Integer quizSize) { + return quizList.size() <= quizSize ? quizList - : createRandomQuizListUnderLimit(quizList); + : createRandomQuizListUnderLimit(quizList, quizSize); } - private List createRandomQuizListUnderLimit(final List quizList) { + private List createRandomQuizListUnderLimit(final List quizList, final Integer quizSize) { final Random rand = new Random(); final List randomQuizList = new ArrayList<>(); - for (int i = 0; i < QuizConstants.MAXIMUM_QUIZ_SIZE; i++) { + for (int i = 0; i < quizSize; i++) { final int randomIndex = rand.nextInt(quizList.size()); final Quiz quiz = quizList.get(randomIndex); randomQuizList.add(quiz); 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 de6870b..9cb1af9 100644 --- a/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java +++ b/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java @@ -39,7 +39,7 @@ public class SendQuizCronJob { final List unsolvedQuizList = quizService.getUnsolvedQuizList(user.getId(), user.getQuizLevel()); final boolean isLastMail = isLastMail(unsolvedQuizList, user.getQuizSize()); - final List randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList); + final List randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize()); if (isLastMail) { userService.disableUser(user); } 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 bf3bc85..044aa63 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 @@ -41,6 +41,7 @@ class QuizServiceTest { private final Long userId = -1L; private final QuizLevel quizLevel = QuizLevel.NEW; + private final int quizSize = 3; @BeforeEach public void init() { @@ -103,19 +104,19 @@ class QuizServiceTest { } @Test - public void getRandomQuizListUnderLimitSuccess_Under3() { + public void getRandomQuizListUnderLimitSuccess_UnderLimit() { // given final List unsolvedQuizList = Collections.singletonList(quiz(4L)); // when - final List result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList); + final List result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, quizSize); // then assertThat(result.size()).isEqualTo(unsolvedQuizList.size()); } @Test - public void getRandomQuizListUnderLimitSuccess_Over3() { + public void getRandomQuizListUnderLimitSuccess_OverLimit() { // given final List unsolvedQuizList = new ArrayList<>(); unsolvedQuizList.add(quiz(1L)); @@ -124,7 +125,7 @@ class QuizServiceTest { unsolvedQuizList.add(quiz(4L)); // when - final List result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList); + final List result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, quizSize); // then assertThat(result.size()).isEqualTo(QuizConstants.MAXIMUM_QUIZ_SIZE); 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 46a985b..524cf65 100644 --- a/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java +++ b/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java @@ -63,7 +63,7 @@ class SendQuizCronJobTest { // verify verify(quizService, times(0)).getUnsolvedQuizList(user.getId(), user.getQuizLevel()); - verify(quizService, times(0)).getRandomQuizListUnderLimit(anyList()); + verify(quizService, times(0)).getRandomQuizListUnderLimit(anyList(), user.getQuizSize()); verify(userService, times(0)).disableUser(user); verify(mailService, times(0)).sendMail(anyString(), anyList(), anyBoolean()); verify(solvedQuizService, times(0)).addSolvedQuizList(any(User.class), anyList()); @@ -83,7 +83,7 @@ class SendQuizCronJobTest { .getUnsolvedQuizList(user.getId(), user.getQuizLevel()); doReturn(randomQuizList) .when(quizService) - .getRandomQuizListUnderLimit(unsolvedQuizList); + .getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize()); // when target.sendQuizMailEveryWeek(); @@ -92,7 +92,7 @@ class SendQuizCronJobTest { // verify verify(quizService, times(1)).getUnsolvedQuizList(user.getId(), user.getQuizLevel()); - verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList); + verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize()); verify(userService, times(0)).disableUser(user); verify(mailService, times(1)).sendMail(user.getEmail(), randomQuizList, false); verify(solvedQuizService, times(1)).addSolvedQuizList(user, randomQuizList); @@ -112,7 +112,7 @@ class SendQuizCronJobTest { .getUnsolvedQuizList(user.getId(), user.getQuizLevel()); doReturn(randomQuizList) .when(quizService) - .getRandomQuizListUnderLimit(unsolvedQuizList); + .getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize()); // when target.sendQuizMailEveryWeek(); @@ -121,7 +121,7 @@ class SendQuizCronJobTest { // verify verify(quizService, times(1)).getUnsolvedQuizList(user.getId(), user.getQuizLevel()); - verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList); + verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize()); verify(userService, times(1)).disableUser(user); verify(mailService, times(1)).sendMail(user.getEmail(), randomQuizList, true); verify(solvedQuizService, times(1)).addSolvedQuizList(user, randomQuizList);