Refactor getQuizList

This commit is contained in:
MangKyu
2023-02-18 22:42:11 +09:00
parent d52978cfa4
commit f70732d72f
13 changed files with 129 additions and 139 deletions

View File

@@ -9,7 +9,7 @@ import lombok.Getter;
import java.util.List;
@Getter
public class GetQuizResponseHolder extends ResponseMetaData {
public class GetPagingQuizResponse extends ResponseMetaData {
private final List<GetQuizResponse> quizList;
@@ -17,7 +17,14 @@ public class GetQuizResponseHolder extends ResponseMetaData {
private final EnumMapperValue category;
@Builder
public GetQuizResponseHolder(final List<GetQuizResponse> quizList, final EnumMapperValue category, final boolean hasNext, final int page, final int size, final int totalPages) {
public GetPagingQuizResponse(
final List<GetQuizResponse> quizList,
final EnumMapperValue category,
final boolean hasNext,
final int page,
final int size,
final int totalPages) {
super(hasNext, page, size, totalPages);
this.category = category;
this.quizList = quizList;

View File

@@ -5,8 +5,8 @@ import com.mangkyu.employment.interview.app.quiz.entity.PagingQuizzes;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.service.GetQuizService;
import com.mangkyu.employment.interview.enums.common.EnumMapperKey;
import com.mangkyu.employment.interview.enums.common.EnumMapperValue;
import com.mangkyu.employment.interview.enums.factory.EnumMapperFactory;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
@@ -34,16 +34,26 @@ class GetQuizController {
}
@GetMapping("/quizzes")
public ResponseEntity<GetQuizResponseHolder> getQuizList(@Valid final GetQuizRequest getQuizRequest) {
PagingQuizzes quizzes = quizService.getQuizList(getQuizRequest);
final GetQuizResponseHolder response = toResponse(quizzes, getQuizRequest.getCategory());
return ResponseEntity.ok(response);
public ResponseEntity<GetPagingQuizResponse> getQuizList(@Valid final GetQuizRequest getQuizRequest) {
final PagingQuizzes quizzes = quizService.getQuizList(getQuizRequest);
return ResponseEntity.ok(
toPageQuizResponse(
quizzes,
enumMapperFactory.getElement(EnumMapperKey.QUIZ_CATEGORY, getQuizRequest.getCategory())
)
);
}
private GetQuizResponseHolder toResponse(PagingQuizzes quizzes, QuizCategory category) {
return GetQuizResponseHolder.builder()
@GetMapping("/quizzes/search")
public ResponseEntity<GetPagingQuizResponse> searchQuizList(@Valid final SearchQuizListRequest request) {
final PagingQuizzes quizzes = quizService.searchQuizList(request);
return ResponseEntity.ok(toPageQuizResponse(quizzes, null));
}
private GetPagingQuizResponse toPageQuizResponse(final PagingQuizzes quizzes, final EnumMapperValue category) {
return GetPagingQuizResponse.builder()
.quizList(quizzes.getQuizzes().getQuizList().stream().map(QuizDtoConverter::convert).collect(Collectors.toList()))
.category(enumMapperFactory.getElement(EnumMapperKey.QUIZ_CATEGORY, category))
.category(category)
.hasNext(quizzes.isHasNext())
.page(quizzes.getPageNumber())
.size(quizzes.getPageSize())
@@ -51,10 +61,4 @@ class GetQuizController {
.build();
}
@GetMapping("/quizzes/search")
public ResponseEntity<GetQuizResponseHolder> searchQuizList(@Valid final SearchQuizListRequest request) {
final GetQuizResponseHolder response = quizService.searchQuizList(request);
return ResponseEntity.ok(response);
}
}

View File

@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.PathVariable;
@Controller
@RequiredArgsConstructor
public class WebQuizController {
class WebQuizController {
private final GetQuizService quizService;
private final EnumMapperFactory enumMapperFactory;

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.quiz.service;
package com.mangkyu.employment.interview.app.quiz.entity;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;

View File

@@ -1,6 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.repository;
import com.mangkyu.employment.interview.app.quiz.service.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

View File

@@ -1,6 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.repository;
import com.mangkyu.employment.interview.app.quiz.service.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.QQuiz;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.enums.value.QuizCategory;

View File

@@ -1,9 +1,10 @@
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.controller.GetQuizRequest;
import com.mangkyu.employment.interview.app.quiz.controller.SearchQuizListRequest;
import com.mangkyu.employment.interview.app.quiz.entity.PagingQuizzes;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.entity.QuizSearchCondition;
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;
@@ -18,7 +19,6 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -47,9 +47,9 @@ public class GetQuizService {
// TODO: do not use GetQuizResponseHolder in service layer
public PagingQuizzes getQuizList(final GetQuizRequest getQuizRequest) {
final PageRequest pageRequest = PageRequest.of(getQuizRequest.getPage(), getQuizRequest.getSize());
final Page<Quiz> quizPage = quizRepository.findByQuizCategoryIsAndIsEnableTrue(getQuizRequest.getCategory(), pageRequest);
public PagingQuizzes getQuizList(final GetQuizRequest request) {
final PageRequest pageRequest = PageRequest.of(request.getPage(), request.getSize());
final Page<Quiz> quizPage = quizRepository.findByQuizCategoryIsAndIsEnableTrue(request.getCategory(), pageRequest);
return PagingQuizzes.builder()
.quizzes(new Quizzes(quizPage.getContent()))
@@ -60,21 +60,17 @@ public class GetQuizService {
.build();
}
public GetQuizResponseHolder searchQuizList(final SearchQuizListRequest searchRequest) {
final QuizSearchCondition condition = modelMapper.map(searchRequest, QuizSearchCondition.class);
final PageRequest pageRequest = PageRequest.of(searchRequest.getPage(), searchRequest.getSize());
public PagingQuizzes searchQuizList(final SearchQuizListRequest request) {
final QuizSearchCondition condition = modelMapper.map(request, QuizSearchCondition.class);
final PageRequest pageRequest = PageRequest.of(request.getPage(), request.getSize());
final Page<Quiz> quizPage = quizRepository.search(condition, pageRequest);
final List<GetQuizResponse> quizResponseList = quizPage.getContent().stream()
.map(QuizDtoConverter::convert)
.collect(Collectors.toList());
return GetQuizResponseHolder.builder()
.quizList(quizResponseList)
return PagingQuizzes.builder()
.quizzes(new Quizzes(quizPage.getContent()))
.hasNext(quizPage.hasNext())
.page(quizPage.nextOrLastPageable().getPageNumber())
.size(quizPage.nextOrLastPageable().getPageSize())
.pageNumber(quizPage.nextOrLastPageable().getPageNumber())
.pageSize(quizPage.nextOrLastPageable().getPageSize())
.totalPages(quizPage.getTotalPages())
.build();
}

View File

@@ -11,7 +11,7 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import java.util.Collections;
import java.util.List;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -30,7 +30,7 @@ class AddQuizControllerTest {
final AddQuizRequest request = AddQuizRequest.builder()
.quizCategory(QuizCategory.JAVA)
.title("Title")
.quizLevel(Collections.singletonList(QuizLevel.NEW))
.quizLevel(List.of(QuizLevel.NEW))
.build();
// when

View File

@@ -5,11 +5,9 @@ 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.GetQuizService;
import com.mangkyu.employment.interview.enums.common.EnumMapperKey;
import com.mangkyu.employment.interview.enums.common.EnumMapperType;
import com.mangkyu.employment.interview.enums.common.EnumMapperValue;
import com.mangkyu.employment.interview.enums.factory.EnumMapperFactory;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import com.mangkyu.employment.interview.testutils.EntityCreationUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@@ -24,8 +22,6 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
@@ -73,7 +69,7 @@ class GetQuizControllerTest {
.expose(true)
.build();
doReturn(Collections.singletonList(enumMapperValue))
doReturn(List.of(enumMapperValue))
.when(enumMapperFactory)
.get(EnumMapperKey.QUIZ_CATEGORY);
@@ -112,7 +108,7 @@ class GetQuizControllerTest {
final Quiz quiz = EntityCreationUtils.quiz();
final Pageable pageable = PageRequest.of(MIN_PAGE_NUMBER, MIN_PAGE_SIZE);
final PageImpl<Quiz> quizPage = new PageImpl<>(Collections.emptyList(), pageable, 0);
final PageImpl<Quiz> quizPage = new PageImpl<>(List.of(), pageable, 0);
final PagingQuizzes quizzes = PagingQuizzes.builder()
.quizzes(new Quizzes(List.of(quiz)))
@@ -160,24 +156,20 @@ class GetQuizControllerTest {
@Test
void searchQuizSuccess() throws Exception {
// given
final GetQuizResponse quizResponse = GetQuizResponse.builder()
.title("quiz")
.quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name()))
.category(enumMapperValue(QuizCategory.JAVA).getTitle())
.build();
final Quiz quiz = EntityCreationUtils.quiz();
final Pageable pageable = PageRequest.of(MIN_PAGE_NUMBER, MIN_PAGE_SIZE);
final PageImpl<com.mangkyu.employment.interview.app.quiz.entity.Quiz> quizPage = new PageImpl<>(Collections.emptyList(), pageable, 0);
final PageImpl<Quiz> quizPage = new PageImpl<>(List.of(), pageable, 0);
final GetQuizResponseHolder getQuizResponseHolder = GetQuizResponseHolder.builder()
.quizList(Collections.singletonList(quizResponse))
final PagingQuizzes quizzes = PagingQuizzes.builder()
.quizzes(new Quizzes(List.of(quiz)))
.hasNext(quizPage.hasNext())
.page(quizPage.nextOrLastPageable().getPageNumber())
.size(quizPage.nextOrLastPageable().getPageSize())
.pageNumber(quizPage.nextOrLastPageable().getPageNumber())
.pageSize(quizPage.nextOrLastPageable().getPageSize())
.totalPages(quizPage.getTotalPages())
.build();
doReturn(getQuizResponseHolder)
doReturn(quizzes)
.when(quizService)
.searchQuizList(any(SearchQuizListRequest.class));
@@ -192,12 +184,4 @@ class GetQuizControllerTest {
result.andExpect(status().isOk());
}
private EnumMapperValue enumMapperValue(final EnumMapperType enumMapperType) {
return EnumMapperValue.builder()
.code(enumMapperType.name())
.title(enumMapperType.getTitle())
.desc(enumMapperType.getDesc())
.build();
}
}

View File

@@ -3,15 +3,15 @@ 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.time.LocalDateTime;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
class QuizzesTest {
@@ -68,9 +68,9 @@ class QuizzesTest {
private Quiz quiz(final long id) {
final Quiz quiz = Quiz.builder()
.title("quiz")
.quizLevel(Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR))
.quizLevel(List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR))
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.quizLevel(List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
ReflectionTestUtils.setField(quiz, "id", id);

View File

@@ -2,8 +2,8 @@ package com.mangkyu.employment.interview.app.quiz.repository;
import com.mangkyu.employment.interview.JpaTestConfig;
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
import com.mangkyu.employment.interview.app.quiz.service.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.entity.QuizSearchCondition;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import com.mangkyu.employment.interview.testutils.EntityCreationUtils;
@@ -99,8 +99,8 @@ class QuizRepositoryTest {
final QuizSearchCondition searchCondition = QuizSearchCondition.builder()
.query(null)
.categories(Collections.emptySet())
.levels(new HashSet<>(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR)))
.categories(Set.of())
.levels(new HashSet<>(List.of(QuizLevel.NEW, QuizLevel.JUNIOR)))
.build();
boolean hasNext = true;
@@ -129,8 +129,8 @@ class QuizRepositoryTest {
final QuizSearchCondition searchCondition = QuizSearchCondition.builder()
.query(null)
.categories(new HashSet<>(Arrays.asList(QuizCategory.ALGORITHM, QuizCategory.DATABASE)))
.levels(Collections.emptySet())
.categories(new HashSet<>(List.of(QuizCategory.ALGORITHM, QuizCategory.DATABASE)))
.levels(Set.of())
.build();
boolean hasNext = true;
@@ -159,8 +159,8 @@ class QuizRepositoryTest {
final QuizSearchCondition searchCondition = QuizSearchCondition.builder()
.query(null)
.categories(Collections.emptySet())
.levels(Collections.emptySet())
.categories(Set.of())
.levels(Set.of())
.build();
boolean hasNext = true;
@@ -221,10 +221,10 @@ class QuizRepositoryTest {
@Test
public void selectQuizCountByCategory() {
// given
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.DATABASE, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.DATABASE, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR));
quizRepository.save(quiz1);
quizRepository.save(quiz2);
@@ -256,23 +256,23 @@ class QuizRepositoryTest {
@Test
public void selectQuizNotInAndLevelAndQuizCategory() {
// given
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.DATABASE, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.JAVA, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.DATABASE, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.JAVA, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz savedQuiz1 = quizRepository.save(quiz1);
final Quiz savedQuiz2 = quizRepository.save(quiz2);
final Quiz savedQuiz3 = quizRepository.save(quiz3);
final Quiz savedQuiz4 = quizRepository.save(quiz4);
final Set<Long> idSet = new HashSet<>(Arrays.asList(savedQuiz1.getId(), savedQuiz2.getId(), savedQuiz3.getId(), savedQuiz4.getId()));
final Set<Long> idSet = new HashSet<>(List.of(savedQuiz1.getId(), savedQuiz2.getId(), savedQuiz3.getId(), savedQuiz4.getId()));
// when
final List<Quiz> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.CULTURE)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList2 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.CULTURE, QuizCategory.NETWORK)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList3 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.DATABASE)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList4 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(idSet, new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.DATABASE)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Set.of(), new HashSet<>(List.of(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.CULTURE)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList2 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Set.of(), new HashSet<>(List.of(QuizCategory.CULTURE, QuizCategory.NETWORK)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList3 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Set.of(), new HashSet<>(List.of(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.DATABASE)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList4 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(idSet, new HashSet<>(List.of(QuizCategory.JAVA, QuizCategory.DATABASE)), QuizLevel.NEW);
// then
assertThat(unsolvedQuizList1.size()).isEqualTo(2);
@@ -284,10 +284,10 @@ class QuizRepositoryTest {
@Test
public void selectQuizNotInAndLevel() {
// given
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.JAVA, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.JAVA, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz savedQuiz1 = quizRepository.save(quiz1);
final Quiz savedQuiz2 = quizRepository.save(quiz2);
@@ -295,8 +295,8 @@ class QuizRepositoryTest {
final Quiz savedQuiz4 = quizRepository.save(quiz4);
// when
final List<Quiz> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizLevelAndIsEnableTrue(new HashSet<>(Arrays.asList(savedQuiz1.getId(), savedQuiz2.getId())), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList2 = quizRepository.customFindByIdNotInAndQuizLevelAndIsEnableTrue(Collections.emptySet(), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizLevelAndIsEnableTrue(new HashSet<>(List.of(savedQuiz1.getId(), savedQuiz2.getId())), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList2 = quizRepository.customFindByIdNotInAndQuizLevelAndIsEnableTrue(Set.of(), QuizLevel.NEW);
// then
assertThat(unsolvedQuizList1.size()).isEqualTo(1);
@@ -306,10 +306,10 @@ class QuizRepositoryTest {
@Test
public void selectQuizLevel() {
// given
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.JAVA, Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.JAVA, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz1 = EntityCreationUtils.quiz("quiz1", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz2 = EntityCreationUtils.quiz("quiz2", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz3 = EntityCreationUtils.quiz("quiz3", QuizCategory.JAVA, List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR));
final Quiz quiz4 = EntityCreationUtils.quiz("quiz4", QuizCategory.JAVA, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR));
quizRepository.save(quiz1);
quizRepository.save(quiz2);
@@ -324,14 +324,14 @@ class QuizRepositoryTest {
}
private void initForPaging(final QuizCategory quizCategory) {
final Quiz savedQuiz1 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz2 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz3 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz4 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz5 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz6 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz7 = quizRepository.save(EntityCreationUtils.quiz("quiz", QuizCategory.ALGORITHM, Collections.singletonList(QuizLevel.SENIOR)));
final Quiz savedQuiz8 = quizRepository.save(EntityCreationUtils.quiz("quiz", QuizCategory.DATABASE, Collections.singletonList(QuizLevel.SENIOR)));
final Quiz savedQuiz1 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz2 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz3 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz4 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz5 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz6 = quizRepository.save(EntityCreationUtils.quiz("quiz", quizCategory, List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR)));
final Quiz savedQuiz7 = quizRepository.save(EntityCreationUtils.quiz("quiz", QuizCategory.ALGORITHM, List.of(QuizLevel.SENIOR)));
final Quiz savedQuiz8 = quizRepository.save(EntityCreationUtils.quiz("quiz", QuizCategory.DATABASE, List.of(QuizLevel.SENIOR)));
savedQuiz1.setAnswer(answerRepository.save(EntityCreationUtils.answer(savedQuiz1)));
savedQuiz2.setAnswer(answerRepository.save(EntityCreationUtils.answer(savedQuiz2)));

View File

@@ -15,6 +15,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.modelmapper.ModelMapper;
import java.util.Arrays;
import java.util.List;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
@@ -37,7 +38,7 @@ class AddQuizServiceTest {
final AddQuizRequest request = AddQuizRequest.builder()
.title("quiz")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.quizLevel(List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
// when

View File

@@ -1,15 +1,15 @@
package com.mangkyu.employment.interview.app.quiz.service;
import com.mangkyu.employment.interview.app.quiz.controller.*;
import com.mangkyu.employment.interview.app.quiz.controller.GetQuizRequest;
import com.mangkyu.employment.interview.app.quiz.controller.SearchQuizListRequest;
import com.mangkyu.employment.interview.app.quiz.entity.PagingQuizzes;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.entity.QuizSearchCondition;
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;
import com.mangkyu.employment.interview.config.modelmapper.ModelMapperConfig;
import com.mangkyu.employment.interview.enums.common.EnumMapperKey;
import com.mangkyu.employment.interview.enums.common.EnumMapperValue;
import com.mangkyu.employment.interview.enums.factory.EnumMapperFactory;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.doReturn;
@ExtendWith(MockitoExtension.class)
class GetQuizServiceTest {
@@ -45,8 +45,6 @@ class GetQuizServiceTest {
private QuizRepository quizRepository;
@Mock
private SolvedQuizRepository solvedQuizRepository;
@Mock
private EnumMapperFactory enumMapperFactory;
@Spy
private ModelMapper modelMapper = new ModelMapperConfig().modelMapper();
@@ -59,31 +57,31 @@ class GetQuizServiceTest {
final int page = 0;
final int size = 20;
final List<com.mangkyu.employment.interview.app.quiz.entity.Quiz> quizList = quizList();
final List<Quiz> quizList = quizList();
final SearchQuizListRequest request = SearchQuizListRequest.builder()
.query("query")
.categories(new HashSet<>(Arrays.asList(QuizCategory.CULTURE, QuizCategory.JAVA)))
.levels(new HashSet<>(Arrays.asList(QuizLevel.NEW, QuizLevel.SENIOR)))
.categories(new HashSet<>(List.of(QuizCategory.CULTURE, QuizCategory.JAVA)))
.levels(new HashSet<>(List.of(QuizLevel.NEW, QuizLevel.SENIOR)))
.page(0)
.size(20)
.build();
final PageImpl<com.mangkyu.employment.interview.app.quiz.entity.Quiz> quizPage = new PageImpl<>(quizList(), PageRequest.of(page, size), quizList.size());
final PageImpl<Quiz> quizPage = new PageImpl<>(quizList(), PageRequest.of(page, size), quizList.size());
doReturn(quizPage)
.when(quizRepository)
.search(any(QuizSearchCondition.class), any(PageRequest.class));
// when
final GetQuizResponseHolder result = quizService.searchQuizList(request);
final PagingQuizzes result = quizService.searchQuizList(request);
// then
assertThat(result.getQuizList().size()).isEqualTo(quizList.size());
assertThat(result.getQuizzes().getQuizList().size()).isEqualTo(quizList.size());
}
@Test
public void findQuizEntityFail_NotExists() {
// given
final com.mangkyu.employment.interview.app.quiz.entity.Quiz quiz = quiz(-1L);
final Quiz quiz = quiz(-1L);
doReturn(Optional.empty())
.when(quizRepository)
@@ -101,14 +99,14 @@ class GetQuizServiceTest {
@Test
public void findQuizEntitySuccess() {
// given
final com.mangkyu.employment.interview.app.quiz.entity.Quiz quiz = quiz(-1L);
final Quiz quiz = quiz(-1L);
doReturn(Optional.of(quiz))
.when(quizRepository)
.findByResourceId(quiz.getResourceId());
// when
final com.mangkyu.employment.interview.app.quiz.entity.Quiz result = quizService.getQuiz(quiz.getResourceId());
final Quiz result = quizService.getQuiz(quiz.getResourceId());
// then
assertThat(result.getResourceId()).isEqualTo(quiz.getResourceId());
@@ -127,10 +125,10 @@ class GetQuizServiceTest {
.page(page)
.size(size)
.build();
final List<com.mangkyu.employment.interview.app.quiz.entity.Quiz> quizList = quizList();
final List<Quiz> quizList = quizList();
final Pageable pageable = PageRequest.of(page, size);
final PageImpl<com.mangkyu.employment.interview.app.quiz.entity.Quiz> quizPage = new PageImpl<>(quizList(), pageable, quizList.size());
final PageImpl<Quiz> quizPage = new PageImpl<>(quizList(), pageable, quizList.size());
doReturn(quizPage)
.when(quizRepository)
.findByQuizCategoryIsAndIsEnableTrue(any(QuizCategory.class), any(PageRequest.class));
@@ -151,7 +149,7 @@ class GetQuizServiceTest {
final Set<Long> solvedQuizIdList = solvedQuizList.stream()
.map(v -> v.getQuiz().getId())
.collect(Collectors.toSet());
final List<com.mangkyu.employment.interview.app.quiz.entity.Quiz> unsolvedQuizList = Collections.singletonList(quiz(4L));
final List<Quiz> unsolvedQuizList = List.of(quiz(4L));
final Set<QuizCategory> quizCategorySet = new HashSet<>();
quizCategorySet.add(QuizCategory.CULTURE);
@@ -176,8 +174,8 @@ class GetQuizServiceTest {
@Test
public void getUnsolvedQuizSuccess_SolvedQuizNotEmpty() {
// given
final List<SolvedQuiz> solvedQuizList = Collections.emptyList();
final List<com.mangkyu.employment.interview.app.quiz.entity.Quiz> unsolvedQuizList = Collections.singletonList(quiz(4L));
final List<SolvedQuiz> solvedQuizList = List.of();
final List<Quiz> unsolvedQuizList = List.of(quiz(4L));
final Set<QuizCategory> quizCategorySet = new HashSet<>();
quizCategorySet.add(QuizCategory.CULTURE);
@@ -190,7 +188,7 @@ class GetQuizServiceTest {
doReturn(unsolvedQuizList)
.when(quizRepository)
.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), quizCategorySet, quizLevel);
.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Set.of(), quizCategorySet, quizLevel);
// when
final Quizzes result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
@@ -200,8 +198,8 @@ class GetQuizServiceTest {
}
private List<com.mangkyu.employment.interview.app.quiz.entity.Quiz> quizList() {
final List<com.mangkyu.employment.interview.app.quiz.entity.Quiz> unsolvedQuizList = new ArrayList<>();
private List<Quiz> quizList() {
final List<Quiz> unsolvedQuizList = new ArrayList<>();
unsolvedQuizList.add(quiz(1L));
unsolvedQuizList.add(quiz(2L));
@@ -212,7 +210,7 @@ class GetQuizServiceTest {
}
private List<SolvedQuiz> solvedQuizList() {
return Arrays.asList(
return List.of(
solvedQuiz(1L),
solvedQuiz(2L),
solvedQuiz(3L)
@@ -220,19 +218,19 @@ class GetQuizServiceTest {
}
private SolvedQuiz solvedQuiz(final long id) {
final com.mangkyu.employment.interview.app.quiz.entity.Quiz quiz = quiz(id);
final Quiz quiz = quiz(id);
return SolvedQuiz.builder()
.quiz(quiz)
.build();
}
private com.mangkyu.employment.interview.app.quiz.entity.Quiz quiz(final long id) {
final com.mangkyu.employment.interview.app.quiz.entity.Quiz quiz = com.mangkyu.employment.interview.app.quiz.entity.Quiz.builder()
private Quiz quiz(final long id) {
final Quiz quiz = Quiz.builder()
.title("quiz")
.quizLevel(Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR))
.quizLevel(List.of(QuizLevel.JUNIOR, QuizLevel.SENIOR))
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.quizLevel(List.of(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
ReflectionTestUtils.setField(quiz, "id", id);