Update using Quizzes
This commit is contained in:
@@ -14,7 +14,9 @@ import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
@@ -27,4 +29,29 @@ public class Quizzes {
|
||||
public boolean isLastMail(final Integer quizSize) {
|
||||
return quizList.size() <= quizSize;
|
||||
}
|
||||
|
||||
|
||||
public List<Quiz> getRandomQuizListUnderLimit(final Integer quizSize) {
|
||||
return quizList.size() <= quizSize
|
||||
? quizList
|
||||
: createRandomQuizListUnderLimit(quizList, quizSize);
|
||||
}
|
||||
|
||||
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 < quizSize; i++) {
|
||||
final int randomIndex = rand.nextInt(quizList.size());
|
||||
final Quiz quiz = quizList.get(randomIndex);
|
||||
randomQuizList.add(quiz);
|
||||
quizList.remove(quiz);
|
||||
}
|
||||
|
||||
return randomQuizList;
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return quizList.size();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,26 +73,6 @@ public class QuizService {
|
||||
return new Quizzes(quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel));
|
||||
}
|
||||
|
||||
public List<Quiz> getRandomQuizListUnderLimit(final List<Quiz> quizList, final Integer quizSize) {
|
||||
return quizList.size() <= quizSize
|
||||
? quizList
|
||||
: createRandomQuizListUnderLimit(quizList, quizSize);
|
||||
}
|
||||
|
||||
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 < quizSize; i++) {
|
||||
final int randomIndex = rand.nextInt(quizList.size());
|
||||
final Quiz quiz = quizList.get(randomIndex);
|
||||
randomQuizList.add(quiz);
|
||||
quizList.remove(quiz);
|
||||
}
|
||||
|
||||
return randomQuizList;
|
||||
}
|
||||
|
||||
public List<QuizCategoryResponse> getQuizCategoryList() {
|
||||
final List<EnumMapperValue> enumMapperValueList = enumMapperFactory.get(EnumMapperKey.QUIZ_CATEGORY).stream().filter(EnumMapperValue::isExpose).collect(Collectors.toList());
|
||||
return enumMapperValueList.stream()
|
||||
|
||||
@@ -2,11 +2,11 @@ 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.member.service.GetMemberService;
|
||||
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;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizDay;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -46,10 +46,10 @@ public class SendQuizCronJob {
|
||||
}
|
||||
|
||||
private void sendUnsolvedQuizForUser(final Member member) {
|
||||
final Quizzes unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||
final boolean isLastMail = unsolvedQuizList.isLastMail(member.getQuizSize());
|
||||
final Quizzes quizzes = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||
final boolean isLastMail = quizzes.isLastMail(member.getQuizSize());
|
||||
|
||||
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList.getQuizList(), member.getQuizSize());
|
||||
final List<Quiz> randomQuizList = quizzes.getRandomQuizListUnderLimit(member.getQuizSize());
|
||||
if (isLastMail) {
|
||||
member.disableUser();
|
||||
}
|
||||
|
||||
@@ -1,23 +1,53 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.entity;
|
||||
|
||||
import com.mangkyu.employment.interview.enums.value.QuizCategory;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizLevel;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class QuizzesTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void getRandomQuizListUnderLimitSuccess_UnderLimit() {
|
||||
// given
|
||||
final Quizzes quizzes = new Quizzes(List.of(quiz(4L)));
|
||||
|
||||
// when
|
||||
final List<Quiz> result = quizzes.getRandomQuizListUnderLimit(3);
|
||||
|
||||
// then
|
||||
assertThat(result.size()).isEqualTo(quizzes.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRandomQuizListUnderLimitSuccess_OverLimit() {
|
||||
// given
|
||||
final Quizzes quizzes = quizzes();
|
||||
|
||||
// when
|
||||
final List<Quiz> result = quizzes.getRandomQuizListUnderLimit(3);
|
||||
|
||||
// then
|
||||
assertThat(result.size()).isEqualTo(3);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void 마지막메일_True(){
|
||||
// given
|
||||
Quizzes quizzes = quizzes();
|
||||
|
||||
// when
|
||||
boolean result = quizzes.isLastMail(3);
|
||||
boolean result = quizzes.isLastMail(5);
|
||||
|
||||
// then
|
||||
assertThat(result).isTrue();
|
||||
@@ -35,8 +65,29 @@ class QuizzesTest {
|
||||
assertThat(result).isFalse();
|
||||
}
|
||||
|
||||
private Quiz quiz(final long id) {
|
||||
final Quiz quiz = Quiz.builder()
|
||||
.title("quiz")
|
||||
.quizLevel(Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR))
|
||||
.quizCategory(QuizCategory.JAVA)
|
||||
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
|
||||
.build();
|
||||
|
||||
ReflectionTestUtils.setField(quiz, "id", id);
|
||||
ReflectionTestUtils.setField(quiz, "resourceId", UUID.randomUUID().toString());
|
||||
ReflectionTestUtils.setField(quiz, "createdAt", LocalDateTime.now());
|
||||
return quiz;
|
||||
}
|
||||
|
||||
private Quizzes quizzes() {
|
||||
return new Quizzes(List.of(new Quiz(), new Quiz()));
|
||||
final List<Quiz> unsolvedQuizList = new ArrayList<>();
|
||||
|
||||
unsolvedQuizList.add(quiz(1L));
|
||||
unsolvedQuizList.add(quiz(2L));
|
||||
unsolvedQuizList.add(quiz(3L));
|
||||
unsolvedQuizList.add(quiz(4L));
|
||||
|
||||
return new Quizzes(unsolvedQuizList);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -53,7 +53,6 @@ class QuizServiceTest {
|
||||
|
||||
private final Long userId = -1L;
|
||||
private final QuizLevel quizLevel = QuizLevel.NEW;
|
||||
private final int quizSize = 3;
|
||||
|
||||
@Test
|
||||
public void searchQuizList() {
|
||||
@@ -216,30 +215,6 @@ class QuizServiceTest {
|
||||
assertThat(result.getQuizList().size()).isEqualTo(unsolvedQuizList.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRandomQuizListUnderLimitSuccess_UnderLimit() {
|
||||
// given
|
||||
final List<Quiz> unsolvedQuizList = Collections.singletonList(quiz(4L));
|
||||
|
||||
// when
|
||||
final List<Quiz> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, quizSize);
|
||||
|
||||
// then
|
||||
assertThat(result.size()).isEqualTo(unsolvedQuizList.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRandomQuizListUnderLimitSuccess_OverLimit() {
|
||||
// given
|
||||
final List<Quiz> unsolvedQuizList = quizList();
|
||||
|
||||
// when
|
||||
final List<Quiz> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, quizSize);
|
||||
|
||||
// then
|
||||
assertThat(result.size()).isEqualTo(quizSize);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getQuizCategoryResponseList() {
|
||||
// given
|
||||
|
||||
@@ -2,11 +2,11 @@ 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.member.service.GetMemberService;
|
||||
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;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizDay;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizLevel;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -18,7 +18,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
@@ -50,14 +49,14 @@ class SendQuizCronJobTest {
|
||||
.quizSize(3)
|
||||
.build();
|
||||
|
||||
memberList = Collections.singletonList(member);
|
||||
memberList = List.of(member);
|
||||
quizDay = QuizDay.findQuizDay(LocalDate.now().getDayOfWeek());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sendQuizMailDaily_UserNotExists() {
|
||||
// given
|
||||
doReturn(Collections.emptyList())
|
||||
doReturn(List.of())
|
||||
.when(memberService)
|
||||
.getEnabledUserList(quizDay);
|
||||
|
||||
@@ -68,7 +67,6 @@ class SendQuizCronJobTest {
|
||||
|
||||
// verify
|
||||
verify(quizService, times(0)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||
verify(quizService, times(0)).getRandomQuizListUnderLimit(anyList(), anyInt());
|
||||
verify(mailService, times(0)).sendMail(anyString(), anyList(), anyBoolean());
|
||||
verify(solvedQuizService, times(0)).addSolvedQuizList(any(Member.class), anyList());
|
||||
}
|
||||
@@ -76,18 +74,14 @@ class SendQuizCronJobTest {
|
||||
@Test
|
||||
public void sendQuizMailDaily_NotLastMail() {
|
||||
// given
|
||||
final List<Quiz> unsolvedQuizList = quizList(5);
|
||||
final List<Quiz> randomQuizList = unsolvedQuizList.subList(0, 3);
|
||||
Quizzes quizzes = new Quizzes(quizList(5));
|
||||
|
||||
doReturn(memberList)
|
||||
.when(memberService)
|
||||
.getEnabledUserList(quizDay);
|
||||
doReturn(new Quizzes(unsolvedQuizList))
|
||||
doReturn(quizzes)
|
||||
.when(quizService)
|
||||
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||
doReturn(randomQuizList)
|
||||
.when(quizService)
|
||||
.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
|
||||
|
||||
// when
|
||||
target.sendQuizMail();
|
||||
@@ -96,26 +90,19 @@ class SendQuizCronJobTest {
|
||||
|
||||
// verify
|
||||
verify(quizService, times(1)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
|
||||
verify(mailService, times(1)).sendMail(member.getEmail(), randomQuizList, false);
|
||||
verify(solvedQuizService, times(1)).addSolvedQuizList(member, randomQuizList);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sendQuizMailDaily_LastMail() {
|
||||
// given
|
||||
final List<Quiz> unsolvedQuizList = quizList(3);
|
||||
final List<Quiz> randomQuizList = unsolvedQuizList.subList(0, 3);
|
||||
Quizzes quizzes = new Quizzes(quizList(3));
|
||||
|
||||
doReturn(memberList)
|
||||
.when(memberService)
|
||||
.getEnabledUserList(quizDay);
|
||||
doReturn(new Quizzes(unsolvedQuizList))
|
||||
doReturn(quizzes)
|
||||
.when(quizService)
|
||||
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||
doReturn(randomQuizList)
|
||||
.when(quizService)
|
||||
.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
|
||||
|
||||
// when
|
||||
target.sendQuizMail();
|
||||
@@ -124,9 +111,6 @@ class SendQuizCronJobTest {
|
||||
|
||||
// verify
|
||||
verify(quizService, times(1)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
|
||||
verify(mailService, times(1)).sendMail(member.getEmail(), randomQuizList, true);
|
||||
verify(solvedQuizService, times(1)).addSolvedQuizList(member, randomQuizList);
|
||||
}
|
||||
|
||||
private List<Quiz> quizList(final int size) {
|
||||
|
||||
Reference in New Issue
Block a user