From 52920e9be59d1f9febc09809b4a4225dd3d072f6 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sun, 11 Aug 2024 05:45:58 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=EB=A6=AC=EB=B7=B0=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CreateReviewServiceTest.java | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 backend/src/test/java/reviewme/review/service/CreateReviewServiceTest.java diff --git a/backend/src/test/java/reviewme/review/service/CreateReviewServiceTest.java b/backend/src/test/java/reviewme/review/service/CreateReviewServiceTest.java new file mode 100644 index 000000000..d5fae7722 --- /dev/null +++ b/backend/src/test/java/reviewme/review/service/CreateReviewServiceTest.java @@ -0,0 +1,136 @@ +package reviewme.review.service; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import reviewme.question.domain.OptionGroup; +import reviewme.question.domain.OptionItem; +import reviewme.question.domain.Question2; +import reviewme.question.domain.QuestionType; +import reviewme.question.repository.Question2Repository; +import reviewme.review.dto.request.create.CreateReviewAnswerRequest; +import reviewme.review.dto.request.create.CreateReviewRequest; +import reviewme.review.repository.CheckboxAnswerRepository; +import reviewme.review.repository.Review2Repository; +import reviewme.review.repository.TextAnswerRepository; +import reviewme.reviewgroup.domain.ReviewGroup; +import reviewme.reviewgroup.repository.ReviewGroupRepository; +import reviewme.support.ServiceTest; +import reviewme.template.domain.Section; +import reviewme.template.domain.Template; +import reviewme.template.domain.VisibleType; +import reviewme.template.repository.OptionGroupRepository; +import reviewme.template.repository.OptionItemRepository; +import reviewme.template.repository.SectionRepository; +import reviewme.template.repository.TemplateRepository; + +@ServiceTest +class CreateReviewServiceTest { + + @Autowired + private CreateReviewService createReviewService; + + @Autowired + private Question2Repository questionRepository; + + @Autowired + private OptionGroupRepository optionGroupRepository; + + @Autowired + private OptionItemRepository optionItemRepository; + + @Autowired + private ReviewGroupRepository reviewGroupRepository; + + @Autowired + private TemplateRepository templateRepository; + + @Autowired + private Review2Repository reviewRepository; + + @Autowired + private SectionRepository sectionRepository; + + @Autowired + private TextAnswerRepository textAnswerRepository; + + @Autowired + private CheckboxAnswerRepository checkboxAnswerRepository; + + private ReviewGroup savedReviewGroup; + + private String reviewRequestCode = "리뷰요청코드"; + + @BeforeEach + void setUp() { + savedReviewGroup = reviewGroupRepository.save( + new ReviewGroup("리뷰어", "프로젝트", reviewRequestCode, "그룹접근코드") + ); + templateRepository.save( + new Template(List.of(1L)) + ); + sectionRepository.save( + new Section(VisibleType.ALWAYS, List.of(1L), 1L, "섹션", 1) + ); + } + + @Test + void 텍스트가_포함된_리뷰를_저장한다() { + // given + String expectedTextAnswer = "서술형답변"; + Question2 savedQuestion = questionRepository.save( + new Question2(true, QuestionType.TEXT, "질문", "가이드라인", 1) + ); + CreateReviewAnswerRequest createReviewAnswerRequest = new CreateReviewAnswerRequest( + savedQuestion.getId(), null, expectedTextAnswer + ); + CreateReviewRequest createReviewRequest = new CreateReviewRequest( + reviewRequestCode, List.of(createReviewAnswerRequest) + ); + + // when + createReviewService.createReview(createReviewRequest); + + // then + assertThat(reviewRepository.findAll()).hasSize(1); + assertThat(textAnswerRepository.findAll()).hasSize(1); + } + + @Test + void 체크박스가_포함된_리뷰를_저장한다() { + // given + Question2 savedQuestion = questionRepository.save( + new Question2(true, QuestionType.CHECKBOX, "질문", "가이드라인", 1) + ); + OptionGroup savedOptionGroup = optionGroupRepository.save( + new OptionGroup(savedQuestion.getId(), 2, 2) + ); + OptionItem savedOptionItem1 = optionItemRepository.save( + new OptionItem("선택지1", savedOptionGroup.getId(), 1) + ); + OptionItem savedOptionItem2 = optionItemRepository.save( + new OptionItem("선택지2", savedOptionGroup.getId(), 2) + ); + CreateReviewAnswerRequest createReviewAnswerRequest = new CreateReviewAnswerRequest( + savedQuestion.getId(), List.of(savedOptionItem1.getId(), savedOptionItem2.getId()), null + ); + CreateReviewRequest createReviewRequest = new CreateReviewRequest( + reviewRequestCode, List.of(createReviewAnswerRequest) + ); + + // when + createReviewService.createReview(createReviewRequest); + + // then + assertThat(reviewRepository.findAll()).hasSize(1); + assertThat(checkboxAnswerRepository.findAll()).hasSize(1); +// 아래 코드 검증하려면 fetch = FetchType.EAGER로 설정해야함, +// 그런데 테스트코드에서만 필요한 설정이라면?? 이 윗부분까지만의 검증으로 충분할수도 있음 +// 그런데 다른 사람이 이미 EAGER 설정을 했다면 아래 주석 해제하고 검증 바로 하면 됨 +// assertThat(checkboxAnswerRepository.findAll().get(0).getSelectedOptionIds()) +// .hasSize(2); + } +}