From 63087fc707f988b424eba43c5ed1611b83c0e853 Mon Sep 17 00:00:00 2001 From: MangKyu Date: Sat, 18 Feb 2023 20:12:00 +0900 Subject: [PATCH] Divide AddQuizService first --- .../quiz/controller/AddQuizController.java | 3 +- .../app/quiz/service/AddQuizService.java | 25 +++++++++ .../app/quiz/service/QuizService.java | 14 ++--- .../app/quiz/service/AddQuizServiceTest.java | 52 +++++++++++++++++++ .../app/quiz/service/QuizServiceTest.java | 18 ------- 5 files changed, 83 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizService.java create mode 100644 src/test/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizServiceTest.java diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/AddQuizController.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/AddQuizController.java index db706d5..5603ab2 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/AddQuizController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/AddQuizController.java @@ -1,6 +1,7 @@ package com.mangkyu.employment.interview.app.quiz.controller; import com.fasterxml.jackson.databind.ObjectMapper; +import com.mangkyu.employment.interview.app.quiz.service.AddQuizService; import com.mangkyu.employment.interview.app.quiz.service.QuizService; import lombok.*; import org.springframework.http.HttpStatus; @@ -20,7 +21,7 @@ import java.util.List; @RequiredArgsConstructor class AddQuizController { - private final QuizService quizService; + private final AddQuizService quizService; private final ObjectMapper objectMapper; @GetMapping("/quizzes/init") diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizService.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizService.java new file mode 100644 index 0000000..2e390e1 --- /dev/null +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizService.java @@ -0,0 +1,25 @@ +package com.mangkyu.employment.interview.app.quiz.service; + +import com.mangkyu.employment.interview.app.quiz.controller.AddQuizRequest; +import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository; +import lombok.RequiredArgsConstructor; +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class AddQuizService { + + private final QuizRepository quizRepository; + @Deprecated // TODO: remove modelMapper + private final ModelMapper modelMapper; + + public void addQuiz(final AddQuizRequest addQuizRequest) { + final Quiz quiz = modelMapper.map(addQuizRequest, Quiz.class); + quizRepository.save(quiz); + } + +} 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 e44149a..0cd13f7 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 @@ -1,8 +1,6 @@ package com.mangkyu.employment.interview.app.quiz.service; import com.mangkyu.employment.interview.app.quiz.controller.*; -import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode; -import com.mangkyu.employment.interview.erros.exception.RestApiException; import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository; @@ -12,6 +10,8 @@ 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; +import com.mangkyu.employment.interview.erros.exception.RestApiException; import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; import org.springframework.data.domain.Page; @@ -35,18 +35,12 @@ public class QuizService { private final ModelMapper modelMapper; private final EnumMapperFactory enumMapperFactory; - @Transactional - public void addQuiz(final AddQuizRequest addQuizRequest) { - final Quiz quiz = modelMapper.map(addQuizRequest, Quiz.class); - quizRepository.save(quiz); - } - - public Quiz findQuiz(final String resourceId) throws RestApiException { + public Quiz findQuiz(final String resourceId) { return quizRepository.findByResourceId(resourceId) .orElseThrow(() -> new RestApiException(CommonErrorCode.RESOURCE_NOT_FOUND)); } - public GetQuizResponse getQuiz(final String resourceId) throws RestApiException { + public GetQuizResponse getQuiz(final String resourceId) { final Quiz quiz = findQuiz(resourceId); return QuizDtoConverter.convert(quiz, enumMapperFactory.getElement(EnumMapperKey.QUIZ_CATEGORY, quiz.getQuizCategory())); } diff --git a/src/test/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizServiceTest.java new file mode 100644 index 0000000..0310696 --- /dev/null +++ b/src/test/java/com/mangkyu/employment/interview/app/quiz/service/AddQuizServiceTest.java @@ -0,0 +1,52 @@ +package com.mangkyu.employment.interview.app.quiz.service; + +import com.mangkyu.employment.interview.app.quiz.controller.AddQuizRequest; +import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository; +import com.mangkyu.employment.interview.config.modelmapper.ModelMapperConfig; +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.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.modelmapper.ModelMapper; + +import java.util.Arrays; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@ExtendWith(MockitoExtension.class) +class AddQuizServiceTest { + + @InjectMocks + private AddQuizService quizService; + + @Mock + private QuizRepository quizRepository; + @Spy + private ModelMapper modelMapper = new ModelMapperConfig().modelMapper(); + + @Test + public void addQuiz_Success() { + // given + final AddQuizRequest request = AddQuizRequest.builder() + .title("quiz") + .quizCategory(QuizCategory.JAVA) + .quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR)) + .build(); + + // when + quizService.addQuiz(request); + + // then + + // verify + verify(quizRepository, times(1)).save(any(Quiz.class)); + } + +} \ No newline at end of file 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 e3407ff..31e44db 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 @@ -170,24 +170,6 @@ class QuizServiceTest { assertThat(result.getSize()).isEqualTo(size); } - @Test - public void addQuiz_Success() { - // given - final AddQuizRequest request = AddQuizRequest.builder() - .title("quiz") - .quizCategory(QuizCategory.JAVA) - .quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR)) - .build(); - - // when - quizService.addQuiz(request); - - // then - - // verify - verify(quizRepository, times(1)).save(any(Quiz.class)); - } - @Test public void getUnsolvedQuizSuccess_SolvedQuizEmpty() { // given