From 3ccd0d6d893fcf99fd64167ae3e67d832a3ce85c Mon Sep 17 00:00:00 2001 From: MangKyu Date: Sat, 18 Feb 2023 17:38:45 +0900 Subject: [PATCH] Divide AddAnswerService and UpdateAnswerService --- .../controller/AddAnswerController.java | 4 +- .../app/answer/service/AddAnswerService.java | 31 +++++++++++ .../answer/service/UpdateAnswerService.java | 9 +--- .../answer/service/AddAnswerServiceTest.java | 51 +++++++++++++++++++ .../service/UpdateAnswerServiceTest.java | 22 +------- 5 files changed, 86 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerService.java create mode 100644 src/test/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerServiceTest.java diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java index b9c32ee..23517e2 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java @@ -1,6 +1,6 @@ package com.mangkyu.employment.interview.app.answer.controller; -import com.mangkyu.employment.interview.app.answer.service.UpdateAnswerService; +import com.mangkyu.employment.interview.app.answer.service.AddAnswerService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -13,7 +13,7 @@ import javax.validation.Valid; @RequiredArgsConstructor class AddAnswerController { - private final UpdateAnswerService answerService; + private final AddAnswerService answerService; @PostMapping("/answers") public ResponseEntity add(@RequestBody @Valid final AddAnswerRequest request) { diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerService.java b/src/main/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerService.java new file mode 100644 index 0000000..e0b5e15 --- /dev/null +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerService.java @@ -0,0 +1,31 @@ +package com.mangkyu.employment.interview.app.answer.service; + +import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest; +import com.mangkyu.employment.interview.app.answer.entity.Answer; +import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository; +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.service.QuizService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class AddAnswerService { + + private final QuizService quizService; + private final AnswerRepository answerRepository; + + public void add(final AddAnswerRequest request) { + final Quiz quiz = quizService.findQuiz(request.getQuizResourceId()); + final Answer quizAnswer = quiz.getAnswer(); + if (quizAnswer == null) { + final Answer answer = QuizDtoConverter.convert(request, quiz); + answerRepository.save(answer); + quiz.setAnswer(answer); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java b/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java index e2c29a1..3b78782 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java @@ -2,8 +2,6 @@ package com.mangkyu.employment.interview.app.answer.service; import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest; import com.mangkyu.employment.interview.app.answer.entity.Answer; -import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository; -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.service.QuizService; import lombok.RequiredArgsConstructor; @@ -16,16 +14,11 @@ import org.springframework.transaction.annotation.Transactional; public class UpdateAnswerService { private final QuizService quizService; - private final AnswerRepository answerRepository; public void add(final AddAnswerRequest request) { final Quiz quiz = quizService.findQuiz(request.getQuizResourceId()); final Answer quizAnswer = quiz.getAnswer(); - if (quizAnswer == null) { - final Answer answer = QuizDtoConverter.convert(request, quiz); - answerRepository.save(answer); - quiz.setAnswer(answer); - } else { + if (quizAnswer != null) { quizAnswer.setDescription(request.getDescription()); } } diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerServiceTest.java new file mode 100644 index 0000000..9a12cc7 --- /dev/null +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/service/AddAnswerServiceTest.java @@ -0,0 +1,51 @@ +package com.mangkyu.employment.interview.app.answer.service; + +import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest; +import com.mangkyu.employment.interview.app.answer.entity.Answer; +import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository; +import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.service.QuizService; +import com.mangkyu.employment.interview.erros.exception.RestApiException; +import com.mangkyu.employment.interview.testutils.EntityCreationUtils; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.UUID; + +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class AddAnswerServiceTest { + + @InjectMocks + private AddAnswerService answerService; + + @Mock + private QuizService quizService; + @Mock + private AnswerRepository answerRepository; + + @Test + void addAnswer_Success_Insert() throws RestApiException { + // given + final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() + .quizResourceId(UUID.randomUUID().toString()) + .description("desc") + .build(); + final Quiz quiz = EntityCreationUtils.quiz(); + + doReturn(quiz) + .when(quizService) + .findQuiz(addAnswerRequest.getQuizResourceId()); + + // when + answerService.add(addAnswerRequest); + + // then + verify(answerRepository, times(1)).save(any(Answer.class)); + } + +} \ No newline at end of file diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java index 0364006..1ade457 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java @@ -30,7 +30,7 @@ class UpdateAnswerServiceTest { private AnswerRepository answerRepository; @Test - public void addAnswer_Success_Modify() throws RestApiException { + void updateAnswer_Success() throws RestApiException { // given final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() .quizResourceId(UUID.randomUUID().toString()) @@ -53,24 +53,4 @@ class UpdateAnswerServiceTest { verify(answerRepository, times(0)).save(answer); } - @Test - public void addAnswer_Success_Insert() throws RestApiException { - // given - final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() - .quizResourceId(UUID.randomUUID().toString()) - .description("desc") - .build(); - final Quiz quiz = EntityCreationUtils.quiz(); - - doReturn(quiz) - .when(quizService) - .findQuiz(addAnswerRequest.getQuizResourceId()); - - // when - answerService.add(addAnswerRequest); - - // then - verify(answerRepository, times(1)).save(any(Answer.class)); - } - } \ No newline at end of file