Divide AddAnswerService and UpdateAnswerService

This commit is contained in:
MangKyu
2023-02-18 17:38:45 +09:00
parent a76d263b7a
commit 3ccd0d6d89
5 changed files with 86 additions and 31 deletions

View File

@@ -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<Void> add(@RequestBody @Valid final AddAnswerRequest request) {

View File

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

View File

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

View File

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

View File

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