Apply QuizSize on SendMail

This commit is contained in:
MangKyu
2021-12-16 22:49:35 +09:00
parent fd1fa87c51
commit 3361e3ea98
4 changed files with 16 additions and 15 deletions

View File

@@ -40,17 +40,17 @@ public class QuizService {
: quizRepository.findByIdNotInAndQuizLevel(solvedQuizIdList, quizLevel);
}
public List<Quiz> getRandomQuizListUnderLimit(final List<Quiz> quizList) {
return quizList.size() <= QuizConstants.MAXIMUM_QUIZ_SIZE
public List<Quiz> getRandomQuizListUnderLimit(final List<Quiz> quizList, final Integer quizSize) {
return quizList.size() <= quizSize
? quizList
: createRandomQuizListUnderLimit(quizList);
: createRandomQuizListUnderLimit(quizList, quizSize);
}
private List<Quiz> createRandomQuizListUnderLimit(final List<Quiz> quizList) {
private List<Quiz> createRandomQuizListUnderLimit(final List<Quiz> quizList, final Integer quizSize) {
final Random rand = new Random();
final List<Quiz> 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);

View File

@@ -39,7 +39,7 @@ public class SendQuizCronJob {
final List<Quiz> unsolvedQuizList = quizService.getUnsolvedQuizList(user.getId(), user.getQuizLevel());
final boolean isLastMail = isLastMail(unsolvedQuizList, user.getQuizSize());
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList);
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize());
if (isLastMail) {
userService.disableUser(user);
}

View File

@@ -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<Quiz> unsolvedQuizList = Collections.singletonList(quiz(4L));
// when
final List<Quiz> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList);
final List<Quiz> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, quizSize);
// then
assertThat(result.size()).isEqualTo(unsolvedQuizList.size());
}
@Test
public void getRandomQuizListUnderLimitSuccess_Over3() {
public void getRandomQuizListUnderLimitSuccess_OverLimit() {
// given
final List<Quiz> unsolvedQuizList = new ArrayList<>();
unsolvedQuizList.add(quiz(1L));
@@ -124,7 +125,7 @@ class QuizServiceTest {
unsolvedQuizList.add(quiz(4L));
// when
final List<Quiz> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList);
final List<Quiz> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, quizSize);
// then
assertThat(result.size()).isEqualTo(QuizConstants.MAXIMUM_QUIZ_SIZE);

View File

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