Add getRandomQuizList

This commit is contained in:
MangKyu
2021-12-08 23:38:41 +09:00
parent 34167f2ff7
commit 0c32646980
3 changed files with 64 additions and 4 deletions

View File

@@ -0,0 +1,10 @@
package com.mangkyu.employment.interview.app.quiz.constants;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public final class QuizConstants {
public static int MAXIMUM_QUIZ_SIZE = 3;
}

View File

@@ -1,5 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.service;
import com.mangkyu.employment.interview.app.quiz.constants.QuizConstants;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
import com.mangkyu.employment.interview.app.quiz.entity.QuizEntity;
import com.mangkyu.employment.interview.app.quiz.enums.QuizLevel;
@@ -10,7 +11,9 @@ import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;
@@ -40,4 +43,25 @@ public class QuizService {
: quizRepository.findByIdNotInAndQuizLevel(solvedQuizIdList, quizLevel);
}
public List<QuizEntity> getRandomQuizListUnderLimit(final List<QuizEntity> quizEntityList) {
return quizEntityList.size() < QuizConstants.MAXIMUM_QUIZ_SIZE
? quizEntityList
: createRandomQuizListUnderLimit(quizEntityList);
}
private List<QuizEntity> createRandomQuizListUnderLimit(final List<QuizEntity> quizEntityList) {
final Random rand = new Random();
final List<QuizEntity> randomQuizEntityList = new ArrayList<>();
for (int i = 0; i < QuizConstants.MAXIMUM_QUIZ_SIZE; i++) {
final int randomIndex = rand.nextInt(quizEntityList.size());
final QuizEntity quizEntity = quizEntityList.get(randomIndex);
quizEntityList.remove(randomIndex);
randomQuizEntityList.add(quizEntity);
}
return randomQuizEntityList;
}
}

View File

@@ -1,5 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.service;
import com.mangkyu.employment.interview.app.quiz.constants.QuizConstants;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
import com.mangkyu.employment.interview.app.quiz.entity.QuizEntity;
import com.mangkyu.employment.interview.app.quiz.enums.QuizCategory;
@@ -18,10 +19,7 @@ import org.modelmapper.ModelMapper;
import org.modelmapper.config.Configuration;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
@@ -104,6 +102,34 @@ class QuizServiceTest {
assertThat(result.size()).isEqualTo(unsolvedQuizEntityList.size());
}
@Test
public void getRandomQuizListUnderLimitSuccess_Under3() {
// given
final List<QuizEntity> unsolvedQuizEntityList = Collections.singletonList(quizEntity(4L));
// when
final List<QuizEntity> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizEntityList);
// then
assertThat(result.size()).isEqualTo(unsolvedQuizEntityList.size());
}
@Test
public void getRandomQuizListUnderLimitSuccess_Over3() {
// given
final List<QuizEntity> unsolvedQuizEntityList = new ArrayList<>();
unsolvedQuizEntityList.add(quizEntity(1L));
unsolvedQuizEntityList.add(quizEntity(2L));
unsolvedQuizEntityList.add(quizEntity(3L));
unsolvedQuizEntityList.add(quizEntity(4L));
// when
final List<QuizEntity> result = quizService.getRandomQuizListUnderLimit(unsolvedQuizEntityList);
// then
assertThat(result.size()).isEqualTo(QuizConstants.MAXIMUM_QUIZ_SIZE);
}
private List<SolvedQuizEntity> solvedQuizEntityList() {
return Arrays.asList(
solvedQuizEntity(1L),