From 56a24757e0ce8381be5a8bdd37d74b875e2ba03d Mon Sep 17 00:00:00 2001 From: MangKyu Date: Tue, 4 Jan 2022 23:07:29 +0900 Subject: [PATCH 1/2] Modify Answer PostAPI to PutAPI(Temporally) --- .../app/answer/controller/AnswerController.java | 4 ++-- .../interview/app/answer/entity/Answer.java | 6 ++---- .../interview/app/answer/service/AnswerService.java | 11 ++++++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java index 9e780b0..1cf7c80 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java @@ -17,10 +17,10 @@ public class AnswerController { private final AnswerService answerService; - @PostMapping("/answer") + @PutMapping("/answer") public ResponseEntity addQuiz(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) throws QuizException { answerService.addAnswer(addAnswerRequest); - return ResponseEntity.status(HttpStatus.CREATED) + return ResponseEntity.noContent() .build(); } diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java b/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java index 2aaf2a3..85820df 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java @@ -3,10 +3,7 @@ package com.mangkyu.employment.interview.app.answer.entity; import com.mangkyu.employment.interview.app.answer.constants.AnswerConstants; import com.mangkyu.employment.interview.app.common.entity.BaseEntity; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; import javax.persistence.*; @@ -24,6 +21,7 @@ public class Answer extends BaseEntity { @OneToOne(mappedBy = "answer") private Quiz quiz; + @Setter @Lob @Column(length = AnswerConstants.MAX_ANSWER_SIZE) private String description; diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/service/AnswerService.java b/src/main/java/com/mangkyu/employment/interview/app/answer/service/AnswerService.java index bb9d6df..c73ceb1 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/service/AnswerService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/service/AnswerService.java @@ -31,9 +31,14 @@ public class AnswerService { @Transactional public void addAnswer(final AddAnswerRequest addAnswerRequest) throws QuizException { final Quiz quiz = quizService.findQuiz(addAnswerRequest.getQuizResourceId()); - final Answer answer = QuizDtoConverter.convert(addAnswerRequest, quiz); - answerRepository.save(answer); - quiz.setAnswer(answer); + final Answer quizAnswer = quiz.getAnswer(); + if (quizAnswer == null) { + final Answer answer = QuizDtoConverter.convert(addAnswerRequest, quiz); + quiz.setAnswer(answer); + answerRepository.save(answer); + } else { + quizAnswer.setDescription(addAnswerRequest.getDescription()); + } } } From 5a902af311d509c7698e1c6260e9dc72ccfaaca7 Mon Sep 17 00:00:00 2001 From: MangKyu Date: Wed, 5 Jan 2022 00:05:01 +0900 Subject: [PATCH 2/2] Modify Answer PostAPI to PutAPI Complete --- .../answer/controller/AnswerController.java | 2 +- .../app/answer/service/AnswerServiceTest.java | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java index 1cf7c80..c62bf04 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AnswerController.java @@ -18,7 +18,7 @@ public class AnswerController { private final AnswerService answerService; @PutMapping("/answer") - public ResponseEntity addQuiz(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) throws QuizException { + public ResponseEntity putAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) throws QuizException { answerService.addAnswer(addAnswerRequest); return ResponseEntity.noContent() .build(); diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/service/AnswerServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/service/AnswerServiceTest.java index 3805a54..4239655 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/service/AnswerServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/service/AnswerServiceTest.java @@ -14,13 +14,14 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; import java.util.Optional; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class AnswerServiceTest { @@ -34,7 +35,29 @@ class AnswerServiceTest { private AnswerRepository answerRepository; @Test - public void addAnswerSuccess() throws QuizException { + public void addAnswerSuccess_Modify() throws QuizException { + // given + final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() + .quizResourceId(UUID.randomUUID().toString()) + .description("desc") + .build(); + final Quiz quiz = EntityCreationUtils.quiz(); + final Answer answer = EntityCreationUtils.answer(quiz); + ReflectionTestUtils.setField(quiz, "answer", answer); + + doReturn(quiz).when(quizService).findQuiz(addAnswerRequest.getQuizResourceId()); + + // when + answerService.addAnswer(addAnswerRequest); + + // then + + // verify + verify(answerRepository, times(0)).save(answer); + } + + @Test + public void addAnswerSuccess_Insert() throws QuizException { // given final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() .quizResourceId(UUID.randomUUID().toString()) @@ -48,6 +71,7 @@ class AnswerServiceTest { answerService.addAnswer(addAnswerRequest); // then + verify(answerRepository, times(1)).save(any(Answer.class)); } @Test