Skip to content

Commit

Permalink
refactor: 하나의 테스트에 한가지를 테스트하도록
Browse files Browse the repository at this point in the history
  • Loading branch information
nayonsoso committed Nov 11, 2024
1 parent 60fece1 commit 8b2fe15
Showing 1 changed file with 36 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;
import static reviewme.fixture.OptionGroupFixture.선택지_그룹;
import static reviewme.fixture.OptionItemFixture.선택지;
import static reviewme.fixture.QuestionFixture.서술형_옵션_질문;
Expand All @@ -16,12 +15,6 @@
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import reviewme.template.domain.OptionGroup;
import reviewme.template.domain.OptionItem;
import reviewme.template.domain.Question;
import reviewme.template.repository.OptionGroupRepository;
import reviewme.template.repository.OptionItemRepository;
import reviewme.template.repository.QuestionRepository;
import reviewme.review.domain.CheckboxAnswer;
import reviewme.review.domain.Review;
import reviewme.review.domain.TextAnswer;
Expand All @@ -31,7 +24,13 @@
import reviewme.reviewgroup.domain.ReviewGroup;
import reviewme.reviewgroup.repository.ReviewGroupRepository;
import reviewme.support.ServiceTest;
import reviewme.template.domain.OptionGroup;
import reviewme.template.domain.OptionItem;
import reviewme.template.domain.Question;
import reviewme.template.domain.Section;
import reviewme.template.repository.OptionGroupRepository;
import reviewme.template.repository.OptionItemRepository;
import reviewme.template.repository.QuestionRepository;
import reviewme.template.repository.SectionRepository;
import reviewme.template.repository.TemplateRepository;

Expand Down Expand Up @@ -60,7 +59,7 @@ class ReviewMapperTest {
private TemplateRepository templateRepository;

@Test
void 텍스트가_포함된_리뷰를_생성한다() {
void 서술형_답변을_매핑한다() {
// given
ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹());

Expand All @@ -81,7 +80,7 @@ class ReviewMapperTest {
}

@Test
void 체크박스가_포함된_리뷰를_생성한다() {
void 선택형_답변을_매핑한다() {
// given
ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹());

Expand All @@ -106,57 +105,47 @@ class ReviewMapperTest {
}

@Test
void 필수가_아닌_질문에_답변이_없을_경우_답변을_생성하지_않는다() {
void 필수가_아닌_서술형_질문에_답변이_없으면_매핑하지_않는다() {
// given
ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹());
Question question = questionRepository.save(서술형_옵션_질문());
Section section = sectionRepository.save(항상_보이는_섹션(List.of(question.getId())));
templateRepository.save(템플릿(List.of(section.getId())));

Question requiredTextQuestion = questionRepository.save(서술형_필수_질문());
Question optionalTextQuestion = questionRepository.save(서술형_옵션_질문());
ReviewAnswerRequest answerRequest = new ReviewAnswerRequest(question.getId(), null, "");
ReviewRegisterRequest reviewRegisterRequest = new ReviewRegisterRequest(
reviewGroup.getReviewRequestCode(), List.of(answerRequest));

Question requeiredCheckBoxQuestion = questionRepository.save(선택형_필수_질문());
OptionGroup optionGroup1 = optionGroupRepository.save(선택지_그룹(requeiredCheckBoxQuestion.getId()));
OptionItem optionItem1 = optionItemRepository.save(선택지(optionGroup1.getId()));
OptionItem optionItem2 = optionItemRepository.save(선택지(optionGroup1.getId()));
// when
Review review = reviewMapper.mapToReview(reviewRegisterRequest);

Question optionalCheckBoxQuestion = questionRepository.save(선택형_옵션_질문());
OptionGroup optionGroup2 = optionGroupRepository.save(선택지_그룹(optionalCheckBoxQuestion.getId()));
OptionItem optionItem3 = optionItemRepository.save(선택지(optionGroup2.getId()));
OptionItem optionItem4 = optionItemRepository.save(선택지(optionGroup2.getId()));
// then
assertThat(review.getAnswersByType(TextAnswer.class))
.extracting(TextAnswer::getQuestionId)
.isEmpty();
}

Section section = sectionRepository.save(항상_보이는_섹션(
List.of(requiredTextQuestion.getId(), optionalTextQuestion.getId(),
requeiredCheckBoxQuestion.getId(), optionalCheckBoxQuestion.getId())));
@Test
void 필수가_아닌_선택형_질문에_답변이_없으면_매핑하지_않는다() {
// given
ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹());
Question question = questionRepository.save(선택형_옵션_질문());
OptionGroup optionGroup = optionGroupRepository.save(선택지_그룹(question.getId()));

Section section = sectionRepository.save(항상_보이는_섹션(List.of(question.getId())));
templateRepository.save(템플릿(List.of(section.getId())));

String textAnswer = "답".repeat(20);
ReviewAnswerRequest requiredTextAnswerRequest = new ReviewAnswerRequest(
requiredTextQuestion.getId(), null, textAnswer
);
ReviewAnswerRequest optionalTextAnswerRequest = new ReviewAnswerRequest(
optionalTextQuestion.getId(), null, ""
);
ReviewAnswerRequest requiredCheckBoxAnswerRequest = new ReviewAnswerRequest(
requeiredCheckBoxQuestion.getId(), List.of(optionItem1.getId()), null
);
ReviewAnswerRequest optionalCheckBoxAnswerRequest = new ReviewAnswerRequest(
optionalCheckBoxQuestion.getId(), List.of(), null
);
ReviewRegisterRequest reviewRegisterRequest = new ReviewRegisterRequest(reviewGroup.getReviewRequestCode(),
List.of(requiredTextAnswerRequest, optionalTextAnswerRequest,
requiredCheckBoxAnswerRequest, optionalCheckBoxAnswerRequest));
ReviewAnswerRequest answerRequest = new ReviewAnswerRequest(question.getId(), List.of(), null);
ReviewRegisterRequest reviewRegisterRequest = new ReviewRegisterRequest(
reviewGroup.getReviewRequestCode(), List.of(answerRequest));

// when
Review review = reviewMapper.mapToReview(reviewRegisterRequest);

// then
assertAll(
() -> assertThat(review.getAnswersByType(TextAnswer.class))
.extracting(TextAnswer::getQuestionId)
.containsExactly(requiredTextQuestion.getId()),
() -> assertThat(review.getAnswersByType(CheckboxAnswer.class))
.extracting(CheckboxAnswer::getQuestionId)
.containsExactly(requeiredCheckBoxQuestion.getId())
);
assertThat(review.getAnswersByType(CheckboxAnswer.class))
.extracting(CheckboxAnswer::getQuestionId)
.isEmpty();
}

@Test
Expand Down

0 comments on commit 8b2fe15

Please sign in to comment.