Divide AddQuizService first

This commit is contained in:
MangKyu
2023-02-18 20:12:00 +09:00
parent 84c3e6f5c5
commit 63087fc707
5 changed files with 83 additions and 29 deletions

View File

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

View File

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

View File

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

View File

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

View File

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