diff --git a/backend/src/main/java/reviewme/review/controller/ReviewController.java b/backend/src/main/java/reviewme/review/controller/ReviewController.java index 0689e6fa0..96b3f5db1 100644 --- a/backend/src/main/java/reviewme/review/controller/ReviewController.java +++ b/backend/src/main/java/reviewme/review/controller/ReviewController.java @@ -18,9 +18,9 @@ import reviewme.review.service.dto.request.ReviewRegisterRequest; import reviewme.review.service.dto.response.detail.ReviewDetailResponse; import reviewme.review.service.dto.response.gathered.ReviewsGatheredBySectionResponse; +import reviewme.review.service.dto.response.list.AuthoredReviewsResponse; import reviewme.review.service.dto.response.list.ReceivedReviewPageResponse; import reviewme.review.service.dto.response.list.ReceivedReviewsSummaryResponse; -import reviewme.review.service.dto.response.list.AuthoredReviewsResponse; import reviewme.reviewgroup.controller.ReviewGroupSession; import reviewme.reviewgroup.domain.ReviewGroup; @@ -35,9 +35,18 @@ public class ReviewController { private final ReviewGatheredLookupService reviewGatheredLookupService; @PostMapping("/v2/reviews") - public ResponseEntity createReview(@Valid @RequestBody ReviewRegisterRequest request) { - // 회원 세션 추후 추가해야 함 - long savedReviewId = reviewRegisterService.registerReview(request); + public ResponseEntity createReview( + @Valid @RequestBody ReviewRegisterRequest request + /* + TODO: 회원 세션 임시 사용 방식, 이후 리졸버를 통해 객체로 받아와야 함 + @Nullable @LoginMember Member member + */ + ) { + /* + TODO: 회원 세션 유무에 따른 분기처리 로직 + Long memberId = Optional.ofNullable(member).map(Member::getId).orElse(null); + */ + long savedReviewId = reviewRegisterService.registerReview(request, null); return ResponseEntity.created(URI.create("/reviews/" + savedReviewId)).build(); } diff --git a/backend/src/main/java/reviewme/review/domain/Review.java b/backend/src/main/java/reviewme/review/domain/Review.java index aa540e57b..71c7a62af 100644 --- a/backend/src/main/java/reviewme/review/domain/Review.java +++ b/backend/src/main/java/reviewme/review/domain/Review.java @@ -19,6 +19,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import org.springframework.lang.Nullable; @Entity @Table(name = "new_review") @@ -31,6 +32,10 @@ public class Review { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + // 리뷰 작성자 id + @Column(name = "member_id", nullable = true) + private Long memberId; + @Column(name = "template_id", nullable = false) private long templateId; @@ -44,7 +49,8 @@ public class Review { @Column(name = "created_at", nullable = false) private LocalDateTime createdAt; - public Review(long templateId, long reviewGroupId, List answers) { + public Review(@Nullable Long memberId, long templateId, long reviewGroupId, List answers) { + this.memberId = memberId; this.templateId = templateId; this.reviewGroupId = reviewGroupId; this.answers = answers; diff --git a/backend/src/main/java/reviewme/review/service/ReviewRegisterService.java b/backend/src/main/java/reviewme/review/service/ReviewRegisterService.java index 87e5f8538..962f58e4d 100644 --- a/backend/src/main/java/reviewme/review/service/ReviewRegisterService.java +++ b/backend/src/main/java/reviewme/review/service/ReviewRegisterService.java @@ -18,8 +18,8 @@ public class ReviewRegisterService { private final ReviewRepository reviewRepository; @Transactional - public long registerReview(ReviewRegisterRequest request) { - Review review = reviewMapper.mapToReview(request); + public long registerReview(ReviewRegisterRequest request, Long memberId) { + Review review = reviewMapper.mapToReview(request, memberId); reviewValidator.validate(review); Review registeredReview = reviewRepository.save(review); diff --git a/backend/src/main/java/reviewme/review/service/mapper/ReviewMapper.java b/backend/src/main/java/reviewme/review/service/mapper/ReviewMapper.java index 0db3362ae..05c62e8b2 100644 --- a/backend/src/main/java/reviewme/review/service/mapper/ReviewMapper.java +++ b/backend/src/main/java/reviewme/review/service/mapper/ReviewMapper.java @@ -31,7 +31,7 @@ public class ReviewMapper { private final QuestionRepository questionRepository; private final TemplateRepository templateRepository; - public Review mapToReview(ReviewRegisterRequest request) { + public Review mapToReview(ReviewRegisterRequest request, Long memberId) { ReviewGroup reviewGroup = reviewGroupRepository.findByReviewRequestCode(request.reviewRequestCode()) .orElseThrow(() -> new ReviewGroupNotFoundByReviewRequestCodeException(request.reviewRequestCode())); Template template = templateRepository.findById(reviewGroup.getTemplateId()) @@ -40,7 +40,7 @@ public Review mapToReview(ReviewRegisterRequest request) { )); List answers = getAnswersByQuestionType(request); - return new Review(template.getId(), reviewGroup.getId(), answers); + return new Review(memberId, template.getId(), reviewGroup.getId(), answers); } private List getAnswersByQuestionType(ReviewRegisterRequest request) { diff --git a/backend/src/main/java/reviewme/reviewgroup/controller/ReviewGroupController.java b/backend/src/main/java/reviewme/reviewgroup/controller/ReviewGroupController.java index bd5039a1b..7df9a5360 100644 --- a/backend/src/main/java/reviewme/reviewgroup/controller/ReviewGroupController.java +++ b/backend/src/main/java/reviewme/reviewgroup/controller/ReviewGroupController.java @@ -31,9 +31,18 @@ public ResponseEntity getReviewGroupSummary(@RequestParam S @PostMapping("/v2/groups") public ResponseEntity createReviewGroup( @Valid @RequestBody ReviewGroupCreationRequest request + /* + TODO: 회원 세션 임시 사용 방식, 이후 리졸버를 통해 객체로 받아와야 함 + @Nullable @LoginMember Member member + */ ) { - // 회원 세션 추후 추가해야 함 - ReviewGroupCreationResponse response = reviewGroupService.createReviewGroup(request); + /* + TODO: 회원 세션 유무에 따른 분기처리 로직 + Long memberId = Optional.ofNullable(member).map(Member::getId).orElse(null); + ReviewGroupCreationResponse response = reviewGroupService.createReviewGroup(request, memberId); + return ResponseEntity.ok(response); + */ + ReviewGroupCreationResponse response = reviewGroupService.createReviewGroup(request, null); return ResponseEntity.ok(response); } diff --git a/backend/src/main/java/reviewme/reviewgroup/domain/GroupAccessCode.java b/backend/src/main/java/reviewme/reviewgroup/domain/GroupAccessCode.java index 25764e63d..f76dab6de 100644 --- a/backend/src/main/java/reviewme/reviewgroup/domain/GroupAccessCode.java +++ b/backend/src/main/java/reviewme/reviewgroup/domain/GroupAccessCode.java @@ -17,7 +17,7 @@ public class GroupAccessCode { private static final Pattern PATTERN = Pattern.compile("^[a-zA-Z0-9]{4,20}$"); - @Column(name = "group_access_code", nullable = false) + @Column(name = "group_access_code", nullable = true) private String code; public GroupAccessCode(String code) { diff --git a/backend/src/main/java/reviewme/reviewgroup/domain/ReviewGroup.java b/backend/src/main/java/reviewme/reviewgroup/domain/ReviewGroup.java index 6e95967bd..a6abbc297 100644 --- a/backend/src/main/java/reviewme/reviewgroup/domain/ReviewGroup.java +++ b/backend/src/main/java/reviewme/reviewgroup/domain/ReviewGroup.java @@ -1,5 +1,6 @@ package reviewme.reviewgroup.domain; +import jakarta.annotation.Nullable; import jakarta.persistence.Column; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; @@ -30,6 +31,12 @@ public class ReviewGroup { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name = "member_id", nullable = true) + private Long memberId; + + @Column(name = "template_id", nullable = false) + private long templateId; + @Column(name = "reviewee", nullable = false) private String reviewee; @@ -42,18 +49,30 @@ public class ReviewGroup { @Embedded private GroupAccessCode groupAccessCode; - @Column(name = "template_id", nullable = false) - private long templateId; - public ReviewGroup(String reviewee, String projectName, String reviewRequestCode, String groupAccessCode, - long templateId) { + private ReviewGroup(@Nullable Long memberId, long templateId, String reviewee, String projectName, + String reviewRequestCode, String groupAccessCode) { validateRevieweeLength(reviewee); validateProjectNameLength(projectName); + this.memberId = memberId; + this.templateId = templateId; this.reviewee = reviewee; this.projectName = projectName; this.reviewRequestCode = reviewRequestCode; - this.groupAccessCode = new GroupAccessCode(groupAccessCode); - this.templateId = templateId; + if (groupAccessCode != null) { + this.groupAccessCode = new GroupAccessCode(groupAccessCode); + } else { + this.groupAccessCode = null; + } + } + + public ReviewGroup(Long memberId, long templateId, String reviewee, String projectName, String reviewRequestCode) { + this(memberId, templateId, reviewee, projectName, reviewRequestCode, null); + } + + public ReviewGroup(long templateId, String reviewee, String projectName, String reviewRequestCode, + String groupAccessCode) { + this(null, templateId, reviewee, projectName, reviewRequestCode, groupAccessCode); } private void validateRevieweeLength(String reviewee) { @@ -71,10 +90,10 @@ private void validateProjectNameLength(String projectName) { } public boolean matchesGroupAccessCode(String code) { - return groupAccessCode.matches(code); + return groupAccessCode != null && groupAccessCode.matches(code); } public String getGroupAccessCode() { - return groupAccessCode.getCode(); + return groupAccessCode != null ? groupAccessCode.getCode() : null; } } diff --git a/backend/src/main/java/reviewme/reviewgroup/service/ReviewGroupService.java b/backend/src/main/java/reviewme/reviewgroup/service/ReviewGroupService.java index ce24516d8..4d2e29de7 100644 --- a/backend/src/main/java/reviewme/reviewgroup/service/ReviewGroupService.java +++ b/backend/src/main/java/reviewme/reviewgroup/service/ReviewGroupService.java @@ -7,6 +7,7 @@ import reviewme.reviewgroup.repository.ReviewGroupRepository; import reviewme.reviewgroup.service.dto.ReviewGroupCreationRequest; import reviewme.reviewgroup.service.dto.ReviewGroupCreationResponse; +import reviewme.reviewgroup.service.exception.GroupAccessCodeNullException; import reviewme.reviewgroup.service.exception.ReviewGroupNotFoundByReviewRequestCodeException; import reviewme.template.domain.Template; import reviewme.template.repository.TemplateRepository; @@ -24,25 +25,37 @@ public class ReviewGroupService { private final TemplateRepository templateRepository; @Transactional - public ReviewGroupCreationResponse createReviewGroup(ReviewGroupCreationRequest request) { - // 회원, 비회원 분기 처리 필요 - String reviewRequestCode; - do { - reviewRequestCode = randomCodeGenerator.generate(REVIEW_REQUEST_CODE_LENGTH); - } while (reviewGroupRepository.existsByReviewRequestCode(reviewRequestCode)); + public ReviewGroupCreationResponse createReviewGroup(ReviewGroupCreationRequest request, Long memberId) { + String reviewRequestCode = generateReviewRequestCode(); Template template = templateRepository.findById(DEFAULT_TEMPLATE_ID) .orElseThrow(() -> new TemplateNotFoundException(DEFAULT_TEMPLATE_ID)); - ReviewGroup reviewGroup = reviewGroupRepository.save( - new ReviewGroup( - request.revieweeName(), request.projectName(), reviewRequestCode, request.groupAccessCode(), - template.getId() - ) - ); + ReviewGroup reviewGroup; + if (memberId != null) { + reviewGroup = new ReviewGroup(memberId, template.getId(), request.revieweeName(), request.projectName(), + reviewRequestCode); + } else { + if (request.groupAccessCode() == null) { + throw new GroupAccessCodeNullException(); + } + reviewGroup = new ReviewGroup(template.getId(), request.revieweeName(), request.projectName(), + reviewRequestCode, request.groupAccessCode()); + } + + reviewGroupRepository.save(reviewGroup); return new ReviewGroupCreationResponse(reviewGroup.getReviewRequestCode()); } + private String generateReviewRequestCode() { + String reviewRequestCode; + do { + reviewRequestCode = randomCodeGenerator.generate(REVIEW_REQUEST_CODE_LENGTH); + } while (reviewGroupRepository.existsByReviewRequestCode(reviewRequestCode)); + + return reviewRequestCode; + } + @Transactional(readOnly = true) public ReviewGroup getReviewGroupByReviewRequestCode(String reviewRequestCode) { return reviewGroupRepository.findByReviewRequestCode(reviewRequestCode) diff --git a/backend/src/main/java/reviewme/reviewgroup/service/exception/GroupAccessCodeNullException.java b/backend/src/main/java/reviewme/reviewgroup/service/exception/GroupAccessCodeNullException.java new file mode 100644 index 000000000..265c93e4a --- /dev/null +++ b/backend/src/main/java/reviewme/reviewgroup/service/exception/GroupAccessCodeNullException.java @@ -0,0 +1,11 @@ +package reviewme.reviewgroup.service.exception; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class GroupAccessCodeNullException extends NullPointerException{ + public GroupAccessCodeNullException() { + super("비회원 리뷰 그룹 생성은 그룹 액세스 코드를 필수로 입력해야 해요."); + log.info("Non-member review group creation failed: Group access code is required"); + } +} diff --git a/backend/src/main/resources/db/migration/V6__member_id_add.sql b/backend/src/main/resources/db/migration/V6__member_id_add.sql new file mode 100644 index 000000000..15f717020 --- /dev/null +++ b/backend/src/main/resources/db/migration/V6__member_id_add.sql @@ -0,0 +1,8 @@ +-- 리뷰 그룹에 memberId를 추가합니다. +-- 리뷰 그룹의 group_access_code에 null을 허용합니다. + +ALTER TABLE review_group ADD COLUMN member_id BIGINT NULL; +ALTER TABLE review_group MODIFY COLUMN group_access_code VARCHAR(255) NULL; + +-- 리뷰에 memberId를 추가합니다. +ALTER TABLE review ADD COLUMN member_id BIGINT NULL; diff --git a/backend/src/test/java/reviewme/api/ReviewApiTest.java b/backend/src/test/java/reviewme/api/ReviewApiTest.java index d6d5fd293..9cc6f3227 100644 --- a/backend/src/test/java/reviewme/api/ReviewApiTest.java +++ b/backend/src/test/java/reviewme/api/ReviewApiTest.java @@ -3,6 +3,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.nullable; import static org.springframework.restdocs.cookies.CookieDocumentation.cookieWithName; import static org.springframework.restdocs.cookies.CookieDocumentation.requestCookies; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; @@ -58,7 +59,7 @@ class ReviewApiTest extends ApiTest { @Test void 비회원이_리뷰를_등록한다() { - BDDMockito.given(reviewRegisterService.registerReview(any(ReviewRegisterRequest.class))) + BDDMockito.given(reviewRegisterService.registerReview(any(ReviewRegisterRequest.class), anyLong())) .willReturn(1L); FieldDescriptor[] requestFieldDescriptors = { @@ -85,7 +86,7 @@ class ReviewApiTest extends ApiTest { @Test void 회원이_리뷰를_등록한다() { - BDDMockito.given(reviewRegisterService.registerReview(any(ReviewRegisterRequest.class))) + BDDMockito.given(reviewRegisterService.registerReview(any(ReviewRegisterRequest.class), anyLong())) .willReturn(1L); CookieDescriptor[] cookieDescriptors = { @@ -118,7 +119,7 @@ class ReviewApiTest extends ApiTest { @Test void 리뷰_그룹_코드가_올바르지_않은_경우_예외가_발생한다() { - BDDMockito.given(reviewRegisterService.registerReview(any(ReviewRegisterRequest.class))) + BDDMockito.given(reviewRegisterService.registerReview(any(ReviewRegisterRequest.class), nullable(Long.class))) .willThrow(new ReviewGroupNotFoundByReviewRequestCodeException("ABCD1234")); FieldDescriptor[] requestFieldDescriptors = { diff --git a/backend/src/test/java/reviewme/api/ReviewGroupApiTest.java b/backend/src/test/java/reviewme/api/ReviewGroupApiTest.java index 22fd7253e..763fc13b3 100644 --- a/backend/src/test/java/reviewme/api/ReviewGroupApiTest.java +++ b/backend/src/test/java/reviewme/api/ReviewGroupApiTest.java @@ -3,6 +3,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.nullable; import static org.springframework.restdocs.cookies.CookieDocumentation.cookieWithName; import static org.springframework.restdocs.cookies.CookieDocumentation.requestCookies; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; @@ -30,7 +31,7 @@ class ReviewGroupApiTest extends ApiTest { @Test void 비회원용_리뷰_그룹을_생성한다() { - BDDMockito.given(reviewGroupService.createReviewGroup(any(ReviewGroupCreationRequest.class))) + BDDMockito.given(reviewGroupService.createReviewGroup(any(ReviewGroupCreationRequest.class), nullable(Long.class))) .willReturn(new ReviewGroupCreationResponse("ABCD1234")); String request = """ @@ -67,7 +68,7 @@ class ReviewGroupApiTest extends ApiTest { @Test void 회원용_리뷰_그룹을_생성한다() { - BDDMockito.given(reviewGroupService.createReviewGroup(any(ReviewGroupCreationRequest.class))) + BDDMockito.given(reviewGroupService.createReviewGroup(any(ReviewGroupCreationRequest.class), nullable(Long.class))) .willReturn(new ReviewGroupCreationResponse("ABCD1234")); CookieDescriptor[] cookieDescriptors = { @@ -109,7 +110,7 @@ class ReviewGroupApiTest extends ApiTest { @Test void 리뷰_요청_코드로_회원이_만든_리뷰_그룹_정보를_반환한다() { BDDMockito.given(reviewGroupLookupService.getReviewGroupSummary(anyString())) - .willReturn(new ReviewGroupResponse(1L,"아루", "리뷰미")); + .willReturn(new ReviewGroupResponse(1L, "아루", "리뷰미")); ParameterDescriptor[] parameterDescriptors = { parameterWithName("reviewRequestCode").description("리뷰 요청 코드") diff --git a/backend/src/test/java/reviewme/fixture/ReviewFixture.java b/backend/src/test/java/reviewme/fixture/ReviewFixture.java new file mode 100644 index 000000000..a113ee5b8 --- /dev/null +++ b/backend/src/test/java/reviewme/fixture/ReviewFixture.java @@ -0,0 +1,16 @@ +package reviewme.fixture; + +import java.util.List; +import reviewme.review.domain.Answer; +import reviewme.review.domain.Review; + +public class ReviewFixture { + + public static Review 비회원_작성_리뷰(long templateId, long reviewGroupId, List answers) { + return new Review(null, templateId, reviewGroupId, answers); + } + + public static Review 회원_작성_리뷰(Long memberId, long templateId, long reviewGroupId, List answers) { + return new Review(memberId, templateId, reviewGroupId, answers); + } +} diff --git a/backend/src/test/java/reviewme/fixture/ReviewGroupFixture.java b/backend/src/test/java/reviewme/fixture/ReviewGroupFixture.java index d134bf3d0..08be28402 100644 --- a/backend/src/test/java/reviewme/fixture/ReviewGroupFixture.java +++ b/backend/src/test/java/reviewme/fixture/ReviewGroupFixture.java @@ -5,11 +5,11 @@ public class ReviewGroupFixture { public static ReviewGroup 리뷰_그룹(String reviewRequestCode, String groupAccessCode) { - return new ReviewGroup("revieweeName", "projectName", reviewRequestCode, groupAccessCode, 1L); + return new ReviewGroup(1L, "revieweeName", "projectName", reviewRequestCode, groupAccessCode); } public static ReviewGroup 템플릿_지정_리뷰_그룹(long templateId) { - return new ReviewGroup("reviewee", "project", "requestCode", "accessCode", templateId); + return new ReviewGroup(templateId, "reviewee", "project", "requestCode", "accessCode"); } public static ReviewGroup 리뷰_그룹() { diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java index d3e4a443c..f28081f9f 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import java.util.List; import org.junit.jupiter.api.Test; @@ -10,7 +11,6 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; -import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; @@ -24,7 +24,7 @@ class HighlightedLinesTest { void 답변_내용으로_하이라이트에_사용될_라인을_생성한다() { // given TextAnswer answer = new TextAnswer(1L, "123\n456\n789"); - reviewRepository.save(new Review(1L, 1L, List.of(answer))); + reviewRepository.save(비회원_작성_리뷰(1L, 1L, List.of(answer))); // when HighlightedLines highlightedLines = new HighlightedLines(answer.getContent()); @@ -41,7 +41,7 @@ class HighlightedLinesTest { void 특정_라인에_하이라이트_시작_종료_범위를_추가한다() { // given TextAnswer answer = new TextAnswer(1L, "123\n456\n78910"); - reviewRepository.save(new Review(1L, 1L, List.of(answer))); + reviewRepository.save(비회원_작성_리뷰(1L, 1L, List.of(answer))); HighlightedLines highlightedLines = new HighlightedLines(answer.getContent()); // when @@ -75,7 +75,7 @@ class HighlightedLinesTest { // given String content = "123\n456"; TextAnswer answer = new TextAnswer(1L, content); - reviewRepository.save(new Review(1L, 1L, List.of(answer))); + reviewRepository.save(비회원_작성_리뷰(1L, 1L, List.of(answer))); HighlightedLines highlightedLines = new HighlightedLines(answer.getContent()); int invalidLineIndex = (int) content.lines().count(); System.out.println(invalidLineIndex); diff --git a/backend/src/test/java/reviewme/highlight/repository/HighlightRepositoryTest.java b/backend/src/test/java/reviewme/highlight/repository/HighlightRepositoryTest.java index 528ccbfff..d877a594c 100644 --- a/backend/src/test/java/reviewme/highlight/repository/HighlightRepositoryTest.java +++ b/backend/src/test/java/reviewme/highlight/repository/HighlightRepositoryTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import java.util.ArrayList; @@ -12,7 +13,6 @@ import reviewme.highlight.domain.Highlight; import reviewme.highlight.domain.HighlightRange; import reviewme.review.domain.Answer; -import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; import reviewme.reviewgroup.domain.ReviewGroup; @@ -93,8 +93,8 @@ class HighlightRepositoryTest { new TextAnswer(2L, "B2"), new TextAnswer(3L, "B3") ); - reviewRepository.save(new Review(1L, reviewGroup1.getId(), answers1)); - reviewRepository.save(new Review(2L, reviewGroup2.getId(), answers2)); + reviewRepository.save(비회원_작성_리뷰(1L, reviewGroup1.getId(), answers1)); + reviewRepository.save(비회원_작성_리뷰(2L, reviewGroup2.getId(), answers2)); List answerIds = new ArrayList<>(); answerIds.addAll(answers1.stream().map(Answer::getId).toList()); diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index 0a3ff0c4e..790864779 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -16,7 +17,6 @@ import reviewme.highlight.service.dto.HighlightRequest; import reviewme.highlight.service.dto.HighlightedLineRequest; import reviewme.highlight.service.dto.HighlightsRequest; -import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; import reviewme.reviewgroup.domain.ReviewGroup; @@ -55,7 +55,7 @@ class HighlightServiceTest { TextAnswer textAnswer1 = new TextAnswer(question.getId(), "text answer1"); TextAnswer textAnswer2 = new TextAnswer(question.getId(), "text answer2"); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(textAnswer1, textAnswer2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(textAnswer1, textAnswer2))); Highlight highlight = highlightRepository.save(new Highlight(textAnswer1.getId(), 1, new HighlightRange(1, 1))); HighlightIndexRangeRequest indexRangeRequest = new HighlightIndexRangeRequest(1, 1); @@ -79,7 +79,7 @@ class HighlightServiceTest { ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); TextAnswer textAnswer = new TextAnswer(question.getId(), "text answer1"); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(textAnswer))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(textAnswer))); highlightRepository.save(new Highlight(1, 1, new HighlightRange(1, 1))); int startIndex = 2; @@ -110,7 +110,7 @@ class HighlightServiceTest { ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); TextAnswer textAnswer = new TextAnswer(question.getId(), "text answer1"); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(textAnswer))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(textAnswer))); Highlight highlight = highlightRepository.save(new Highlight(textAnswer.getId(), 1, new HighlightRange(1, 1))); HighlightsRequest highlightsRequest = new HighlightsRequest(question.getId(), List.of()); diff --git a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java index a8954cb1f..1b4abb693 100644 --- a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java +++ b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -16,7 +17,6 @@ import reviewme.highlight.service.dto.HighlightRequest; import reviewme.highlight.service.dto.HighlightedLineRequest; import reviewme.highlight.service.dto.HighlightsRequest; -import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; import reviewme.reviewgroup.repository.ReviewGroupRepository; @@ -54,7 +54,7 @@ class HighlightMapperTest { TextAnswer textAnswer1 = new TextAnswer(question.getId(), "text answer1"); TextAnswer textAnswer2 = new TextAnswer(question.getId(), "text answer2"); - reviewRepository.save(new Review(template.getId(), reviewGroupId, List.of(textAnswer1, textAnswer2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroupId, List.of(textAnswer1, textAnswer2))); highlightRepository.save(new Highlight(1, 1, new HighlightRange(1, 1))); diff --git a/backend/src/test/java/reviewme/review/domain/ReviewTest.java b/backend/src/test/java/reviewme/review/domain/ReviewTest.java index 0793941a2..f7efae332 100644 --- a/backend/src/test/java/reviewme/review/domain/ReviewTest.java +++ b/backend/src/test/java/reviewme/review/domain/ReviewTest.java @@ -1,6 +1,7 @@ package reviewme.review.domain; import static org.assertj.core.api.Assertions.assertThat; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import java.util.List; import java.util.Set; @@ -13,7 +14,7 @@ class ReviewTest { // given TextAnswer textAnswer = new TextAnswer(1L, "답변"); CheckboxAnswer checkboxAnswer = new CheckboxAnswer(2L, List.of(1L)); - Review review = new Review(1L, 1L, List.of(textAnswer, checkboxAnswer)); + Review review = 비회원_작성_리뷰(1L, 1L, List.of(textAnswer, checkboxAnswer)); // when Set allQuestionIdsFromAnswers = review.getAnsweredQuestionIds(); diff --git a/backend/src/test/java/reviewme/review/domain/abstraction/ReviewTest.java b/backend/src/test/java/reviewme/review/domain/abstraction/ReviewTest.java index 47ead260f..963682c8c 100644 --- a/backend/src/test/java/reviewme/review/domain/abstraction/ReviewTest.java +++ b/backend/src/test/java/reviewme/review/domain/abstraction/ReviewTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import java.util.List; import java.util.Set; @@ -17,7 +18,7 @@ class ReviewTest { // given TextAnswer textAnswer = new TextAnswer(1L, "답변"); CheckboxAnswer checkboxAnswer = new CheckboxAnswer(2L, List.of(1L)); - Review review = new Review(1L, 1L, List.of(textAnswer, checkboxAnswer)); + Review review = 비회원_작성_리뷰(1L, 1L, List.of(textAnswer, checkboxAnswer)); // when Set allQuestionIdsFromAnswers = review.getAnsweredQuestionIds(); @@ -32,7 +33,7 @@ class ReviewTest { CheckboxAnswer checkboxAnswer1 = new CheckboxAnswer(1L, List.of(1L, 2L)); CheckboxAnswer checkboxAnswer2 = new CheckboxAnswer(1L, List.of(3L, 4L)); TextAnswer textAnswer = new TextAnswer(1L, "답변"); - Review review = new Review(1L, 1L, List.of(checkboxAnswer1, checkboxAnswer2, textAnswer)); + Review review = 비회원_작성_리뷰(1L, 1L, List.of(checkboxAnswer1, checkboxAnswer2, textAnswer)); // when List allQuestionIdsFromAnswers = review.getAnswersByType(CheckboxAnswer.class); @@ -49,7 +50,7 @@ class ReviewTest { TextAnswer textAnswer = new TextAnswer(textQuestionId, "답변"); CheckboxAnswer checkboxAnswer = new CheckboxAnswer(checkBoxQuestionId, List.of(1L)); - Review review = new Review(1L, 1L, List.of(textAnswer, checkboxAnswer)); + Review review = 비회원_작성_리뷰(1L, 1L, List.of(textAnswer, checkboxAnswer)); // when, then assertAll( diff --git a/backend/src/test/java/reviewme/review/repository/AnswerRepositoryTest.java b/backend/src/test/java/reviewme/review/repository/AnswerRepositoryTest.java index db0873650..a746e5216 100644 --- a/backend/src/test/java/reviewme/review/repository/AnswerRepositoryTest.java +++ b/backend/src/test/java/reviewme/review/repository/AnswerRepositoryTest.java @@ -1,6 +1,7 @@ package reviewme.review.repository; import static org.assertj.core.api.Assertions.assertThat; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import java.util.List; import java.util.Set; @@ -30,9 +31,9 @@ class AnswerRepositoryTest { TextAnswer answer2 = new TextAnswer(2L, "답2".repeat(20)); TextAnswer answer3 = new TextAnswer(2L, "답3".repeat(20)); TextAnswer answer4 = new TextAnswer(3L, "답4".repeat(20)); - reviewRepository.save(new Review(templateId, reviewGroupId, List.of(answer1))); - reviewRepository.save(new Review(templateId, reviewGroupId, List.of(answer2))); - reviewRepository.save(new Review(templateId, reviewGroupId, List.of(answer3))); + reviewRepository.save(비회원_작성_리뷰(templateId, reviewGroupId, List.of(answer1))); + reviewRepository.save(비회원_작성_리뷰(templateId, reviewGroupId, List.of(answer2))); + reviewRepository.save(비회원_작성_리뷰(templateId, reviewGroupId, List.of(answer3))); // when List actual = answerRepository.findReceivedAnswersByQuestionIds( @@ -49,7 +50,7 @@ class AnswerRepositoryTest { long reviewGroupId = 1L; TextAnswer answer1 = new TextAnswer(1L, "text answer1"); TextAnswer answer2 = new TextAnswer(1L, "text answer2"); - Review review = reviewRepository.save(new Review(1L, reviewGroupId, List.of(answer1, answer2))); + Review review = reviewRepository.save(비회원_작성_리뷰(1L, reviewGroupId, List.of(answer1, answer2))); // when Set actual = answerRepository.findIdsByReviewGroupId(reviewGroupId); @@ -67,8 +68,8 @@ class AnswerRepositoryTest { TextAnswer textAnswer1_Q2 = new TextAnswer(2L, "text answer1 by Q2"); reviewRepository.saveAll(List.of( - new Review(1L, reviewGroupId, List.of(textAnswer1_Q1, textAnswer2_Q1)), - new Review(1L, reviewGroupId, List.of(textAnswer1_Q2) + 비회원_작성_리뷰(1L, reviewGroupId, List.of(textAnswer1_Q1, textAnswer2_Q1)), + 비회원_작성_리뷰(1L, reviewGroupId, List.of(textAnswer1_Q2) ))); // when diff --git a/backend/src/test/java/reviewme/review/repository/ReviewRepositoryTest.java b/backend/src/test/java/reviewme/review/repository/ReviewRepositoryTest.java index 3a2786702..0c8428b57 100644 --- a/backend/src/test/java/reviewme/review/repository/ReviewRepositoryTest.java +++ b/backend/src/test/java/reviewme/review/repository/ReviewRepositoryTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -41,9 +42,9 @@ class ReviewRepositoryTest { ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); Review review1 = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null)); + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null)); Review review2 = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null)); + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null)); // when List actual = reviewRepository.findAllByGroupId(reviewGroup.getId()); @@ -61,11 +62,11 @@ class FindByReviewGroupIdWithLimit { private final ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); private final Review review1 = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null)); + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null)); private final Review review2 = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null)); + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null)); private final Review review3 = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null)); + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null)); @Test void 페이징_크기보다_적은_수의_리뷰가_등록되었으면_그_크기만큼의_리뷰만_반환한다() { @@ -156,9 +157,9 @@ class ExistsOlderReviewInReviewGroup { ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); Review firstReview = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null)); + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null)); Review secondReview = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null)); + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null)); @Test void 주어진_리뷰가_가장_오래된_경우() { diff --git a/backend/src/test/java/reviewme/review/service/ReviewDetailLookupServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewDetailLookupServiceTest.java index 7e2054958..9dffc1c0d 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewDetailLookupServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewDetailLookupServiceTest.java @@ -7,6 +7,7 @@ import static reviewme.fixture.OptionItemFixture.선택지; import static reviewme.fixture.QuestionFixture.서술형_옵션_질문; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -56,8 +57,8 @@ class ReviewDetailLookupServiceTest { ReviewGroup reviewGroup1 = reviewGroupRepository.save(리뷰_그룹()); ReviewGroup reviewGroup2 = reviewGroupRepository.save(리뷰_그룹()); - Review review1 = reviewRepository.save(new Review(0, reviewGroup1.getId(), List.of())); - Review review2 = reviewRepository.save(new Review(0, reviewGroup2.getId(), List.of())); + Review review1 = reviewRepository.save(비회원_작성_리뷰(0, reviewGroup1.getId(), List.of())); + Review review2 = reviewRepository.save(비회원_작성_리뷰(0, reviewGroup2.getId(), List.of())); // when, then assertAll( @@ -91,7 +92,7 @@ class ReviewDetailLookupServiceTest { new CheckboxAnswer(question1.getId(), List.of(optionItem1.getId(), optionItem2.getId())) ); Review review = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), answers) + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), answers) ); // when @@ -117,7 +118,7 @@ class NotAnsweredOptionalQuestion { // given - 아무것도 응답하지 않은 리뷰 답변 저장 Review review = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), null) + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), null) ); // when @@ -143,7 +144,7 @@ class NotAnsweredOptionalQuestion { // given - 질문 하나에만 응답한 리뷰 답변 저장 TextAnswer textAnswer = new TextAnswer(question1.getId(), "답변".repeat(20)); Review review = reviewRepository.save( - new Review(template.getId(), reviewGroup.getId(), List.of(textAnswer)) + 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(textAnswer)) ); // when diff --git a/backend/src/test/java/reviewme/review/service/ReviewGatheredLookupServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewGatheredLookupServiceTest.java index ae89fc67c..6c3e8e479 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewGatheredLookupServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewGatheredLookupServiceTest.java @@ -5,6 +5,7 @@ import static reviewme.fixture.OptionGroupFixture.선택지_그룹; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; import static reviewme.fixture.QuestionFixture.선택형_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.ReviewGroupFixture.템플릿_지정_리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -16,7 +17,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import reviewme.review.domain.CheckboxAnswer; -import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; import reviewme.review.service.dto.response.gathered.ReviewsGatheredByQuestionResponse; @@ -75,8 +75,8 @@ class GatherAnswerByQuestionTest { TextAnswer answerAR2 = new TextAnswer(question2.getId(), "아루가 작성한 서술형 답변2"); TextAnswer answerTD1 = new TextAnswer(question1.getId(), "테드가 작성한 서술형 답변1"); TextAnswer answerTD2 = new TextAnswer(question2.getId(), "테드가 작성한 서술형 답변2"); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answerAR1, answerAR2))); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answerTD1, answerTD2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answerAR1, answerAR2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answerTD1, answerTD2))); // when ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId( @@ -106,8 +106,8 @@ class GatherAnswerByQuestionTest { TextAnswer answerAR2 = new TextAnswer(question2.getId(), "아루가 작성한 서술형 답변2"); TextAnswer answerTD1 = new TextAnswer(question1.getId(), "테드가 작성한 서술형 답변1"); TextAnswer answerTD2 = new TextAnswer(question2.getId(), "테드가 작성한 서술형 답변2"); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answerAR1, answerAR2))); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answerTD1, answerTD2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answerAR1, answerAR2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answerTD1, answerTD2))); // when ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId( @@ -132,8 +132,8 @@ class GatherAnswerByQuestionTest { TextAnswer answerSC1 = new TextAnswer(question1.getId(), "산초가 작성한 서술형 답변1"); TextAnswer answerSC2 = new TextAnswer(question2.getId(), "산초가 작성한 서술형 답변2"); TextAnswer answerAR = new TextAnswer(question1.getId(), "아루가 작성한 서술형 답변"); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answerSC1, answerSC2))); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answerAR))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answerSC1, answerSC2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answerAR))); // when ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId( @@ -188,8 +188,8 @@ class GatherOptionAnswerByQuestionTest { CheckboxAnswer answer2 = new CheckboxAnswer( question1.getId(), List.of(optionItem1.getId(), optionItem2.getId()) ); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answer1))); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answer2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answer1))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answer2))); // when ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId( @@ -217,8 +217,8 @@ class GatherOptionAnswerByQuestionTest { // given - 리뷰 답변 저장 CheckboxAnswer answer1 = new CheckboxAnswer(question1.getId(), List.of(optionItem1.getId())); CheckboxAnswer answer2 = new CheckboxAnswer(question1.getId(), List.of(optionItem1.getId())); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answer1))); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answer2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answer1))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answer2))); // when ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId( @@ -249,7 +249,7 @@ class GatherOptionAnswerByQuestionTest { question2.getId(), optionItems.stream().map(OptionItem::getId).toList() // check all options ); - reviewRepository.save(new Review(template.getId(), reviewGroup.getId(), List.of(answer1, answer2))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(answer1, answer2))); // when ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId( @@ -289,8 +289,8 @@ class GatherOptionAnswerByQuestionTest { // given - 리뷰 답변 저장 TextAnswer answerFE = new TextAnswer(question1.getId(), "프론트엔드가 작성한 서술형 답변"); TextAnswer answerBE = new TextAnswer(question1.getId(), "백엔드가 작성한 서술형 답변"); - reviewRepository.save(new Review(template.getId(), reviewGroupFE.getId(), List.of(answerFE))); - reviewRepository.save(new Review(template.getId(), reviewGroupBE.getId(), List.of(answerBE))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroupFE.getId(), List.of(answerFE))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroupBE.getId(), List.of(answerBE))); // when ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId( diff --git a/backend/src/test/java/reviewme/review/service/ReviewListLookupServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewListLookupServiceTest.java index 0d40839be..06582586f 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewListLookupServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewListLookupServiceTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import java.util.List; @@ -35,9 +36,9 @@ class ReviewListLookupServiceTest { // given - 리뷰 답변 저장 CheckboxAnswer categoryAnswer = new CheckboxAnswer(1L, List.of(1L)); - Review review1 = new Review(1L, reviewGroup.getId(), List.of(categoryAnswer)); + Review review1 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(categoryAnswer)); TextAnswer textAnswer = new TextAnswer(1L, "텍스트형 응답"); - Review review2 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review2 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); reviewRepository.saveAll(List.of(review1, review2)); // when @@ -60,9 +61,9 @@ class ReviewListLookupServiceTest { // given - 리뷰 답변 저장 TextAnswer textAnswer = new TextAnswer(1L, "텍스트형 응답"); - Review review1 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review2 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review3 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review1 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review2 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review3 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); reviewRepository.saveAll(List.of(review1, review2, review3)); // when diff --git a/backend/src/test/java/reviewme/review/service/ReviewRegisterServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewRegisterServiceTest.java index 7d65c2a17..bda34a714 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewRegisterServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewRegisterServiceTest.java @@ -85,7 +85,7 @@ class ReviewRegisterServiceTest { optionalTextQuestionAnswer)); // when - long registeredReviewId = reviewRegisterService.registerReview(reviewRegisterRequest); + long registeredReviewId = reviewRegisterService.registerReview(reviewRegisterRequest, null); // when, then Review review = reviewRepository.findById(registeredReviewId).orElseThrow(); diff --git a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java index c7bbd1660..e9e2cbc86 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -46,12 +47,12 @@ class ReviewSummaryServiceTest { ReviewGroup reviewGroup2 = reviewGroupRepository.save(리뷰_그룹()); List reviews = List.of( - new Review(template.getId(), reviewGroup1.getId(), List.of()), - new Review(template.getId(), reviewGroup1.getId(), List.of()), - new Review(template.getId(), reviewGroup1.getId(), List.of()) + 비회원_작성_리뷰(template.getId(), reviewGroup1.getId(), List.of()), + 비회원_작성_리뷰(template.getId(), reviewGroup1.getId(), List.of()), + 비회원_작성_리뷰(template.getId(), reviewGroup1.getId(), List.of()) ); reviewRepository.saveAll(reviews); - reviewRepository.save(new Review(template.getId(), reviewGroup2.getId(), List.of())); + reviewRepository.save(비회원_작성_리뷰(template.getId(), reviewGroup2.getId(), List.of())); // when ReceivedReviewsSummaryResponse actual = reviewSummaryService.getReviewSummary(reviewGroup1); diff --git a/backend/src/test/java/reviewme/review/service/mapper/ReviewGatherMapperTest.java b/backend/src/test/java/reviewme/review/service/mapper/ReviewGatherMapperTest.java index 1ce27dc25..449f53a8e 100644 --- a/backend/src/test/java/reviewme/review/service/mapper/ReviewGatherMapperTest.java +++ b/backend/src/test/java/reviewme/review/service/mapper/ReviewGatherMapperTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertAll; import static reviewme.fixture.QuestionFixture.서술형_옵션_질문; import static reviewme.fixture.QuestionFixture.선택형_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; import java.util.List; @@ -12,7 +13,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import reviewme.review.domain.CheckboxAnswer; -import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; import reviewme.review.service.dto.response.gathered.ReviewsGatheredByQuestionResponse; @@ -53,7 +53,7 @@ class ReviewGatherMapperTest { question2.getId(), optionItems.stream().map(OptionItem::getId).toList() // check all options ); - reviewRepository.save(new Review(template.getId(), 1L, List.of(textAnswer1, checkboxAnswer1))); + reviewRepository.save(비회원_작성_리뷰(template.getId(), 1L, List.of(textAnswer1, checkboxAnswer1))); // when ReviewsGatheredBySectionResponse actual = reviewGatherMapper.mapToReviewsGatheredBySection(Map.of( diff --git a/backend/src/test/java/reviewme/review/service/mapper/ReviewListMapperTest.java b/backend/src/test/java/reviewme/review/service/mapper/ReviewListMapperTest.java index 88820f3f2..ca0ee126e 100644 --- a/backend/src/test/java/reviewme/review/service/mapper/ReviewListMapperTest.java +++ b/backend/src/test/java/reviewme/review/service/mapper/ReviewListMapperTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import java.util.List; @@ -34,16 +35,16 @@ class ReviewListMapperTest { // given - 리뷰 답변 저장 TextAnswer textAnswer = new TextAnswer(1L, "텍스트형 응답"); - Review review1 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review2 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review3 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review4 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review5 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review6 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review7 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review8 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review9 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); - Review review10 = new Review(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review1 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review2 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review3 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review4 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review5 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review6 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review7 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review8 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review9 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); + Review review10 = 비회원_작성_리뷰(1L, reviewGroup.getId(), List.of(textAnswer)); reviewRepository.saveAll( List.of(review1, review2, review3, review4, review5, review6, review7, review8, review9, review10)); diff --git a/backend/src/test/java/reviewme/review/service/mapper/ReviewMapperTest.java b/backend/src/test/java/reviewme/review/service/mapper/ReviewMapperTest.java index 4c28eafb3..bca35d393 100644 --- a/backend/src/test/java/reviewme/review/service/mapper/ReviewMapperTest.java +++ b/backend/src/test/java/reviewme/review/service/mapper/ReviewMapperTest.java @@ -57,7 +57,7 @@ class ReviewMapperTest { ); // when - Review review = reviewMapper.mapToReview(reviewRegisterRequest); + Review review = reviewMapper.mapToReview(reviewRegisterRequest, null); // then assertThat(review.getAnswersByType(TextAnswer.class)).hasSize(1); @@ -81,7 +81,7 @@ class ReviewMapperTest { ); // when - Review review = reviewMapper.mapToReview(reviewRegisterRequest); + Review review = reviewMapper.mapToReview(reviewRegisterRequest, null); // then assertThat(review.getAnswersByType(CheckboxAnswer.class)).hasSize(1); @@ -101,7 +101,7 @@ class ReviewMapperTest { ); // when - Review review = reviewMapper.mapToReview(reviewRegisterRequest); + Review review = reviewMapper.mapToReview(reviewRegisterRequest, null); // then assertThat(review.getAnswersByType(TextAnswer.class)) @@ -123,7 +123,7 @@ class ReviewMapperTest { ); // when - Review review = reviewMapper.mapToReview(reviewRegisterRequest); + Review review = reviewMapper.mapToReview(reviewRegisterRequest, null); // then assertThat(review.getAnswersByType(CheckboxAnswer.class)) @@ -144,7 +144,7 @@ class ReviewMapperTest { ); // when, then - assertThatThrownBy(() -> reviewMapper.mapToReview(reviewRegisterRequest)) + assertThatThrownBy(() -> reviewMapper.mapToReview(reviewRegisterRequest, null)) .isInstanceOf(ReviewGroupNotFoundByReviewRequestCodeException.class); } } diff --git a/backend/src/test/java/reviewme/review/service/validator/AnswerValidatorTest.java b/backend/src/test/java/reviewme/review/service/validator/AnswerValidatorTest.java index 16d528f0b..496eaf08f 100644 --- a/backend/src/test/java/reviewme/review/service/validator/AnswerValidatorTest.java +++ b/backend/src/test/java/reviewme/review/service/validator/AnswerValidatorTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -54,7 +55,7 @@ class AnswerValidatorTest { new TextAnswer(question1.getId(), "답변1"), new TextAnswer(question2.getId(), "답변2") ); - Review review = reviewRepository.save(new Review(1L, reviewGroup.getId(), answers)); + Review review = reviewRepository.save(비회원_작성_리뷰(1L, reviewGroup.getId(), answers)); Set answerIds = review.getAnsweredQuestionIds(); List firstAnswerId = List.of(answers.get(0).getId()); @@ -81,7 +82,7 @@ class AnswerValidatorTest { new TextAnswer(question1.getId(), "답변1"), new TextAnswer(question2.getId(), "답변2") ); - Review review = reviewRepository.save(new Review(1L, reviewGroup.getId(), answers)); + Review review = reviewRepository.save(비회원_작성_리뷰(1L, reviewGroup.getId(), answers)); List answerIds = review.getAnswers().stream().map(Answer::getQuestionId).toList(); List wrongAnswerIds = new ArrayList<>(answerIds); diff --git a/backend/src/test/java/reviewme/review/service/validator/ReviewValidatorTest.java b/backend/src/test/java/reviewme/review/service/validator/ReviewValidatorTest.java index df0e6ac72..71232b2f1 100644 --- a/backend/src/test/java/reviewme/review/service/validator/ReviewValidatorTest.java +++ b/backend/src/test/java/reviewme/review/service/validator/ReviewValidatorTest.java @@ -6,6 +6,7 @@ import static reviewme.fixture.OptionItemFixture.선택지; import static reviewme.fixture.QuestionFixture.서술형_옵션_질문; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewFixture.비회원_작성_리뷰; import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.조건부로_보이는_섹션; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; @@ -85,7 +86,7 @@ class ReviewValidatorTest { List.of(conditionalOptionItem.getId())); // 리뷰 생성 - Review review = new Review(template.getId(), reviewGroup.getId(), + Review review = 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(notRequiredTextAnswer, conditionalTextAnswer1, alwaysRequiredCheckAnswer, conditionalCheckAnswer1)); @@ -110,7 +111,7 @@ class ReviewValidatorTest { templateRepository.save(new Template(List.of(section2))); TextAnswer textAnswer = new TextAnswer(question2.getId(), "답변".repeat(20)); - Review review = new Review(template.getId(), reviewGroup.getId(), List.of(textAnswer)); + Review review = 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(textAnswer)); // when, then assertThatThrownBy(() -> reviewValidator.validate(review)) @@ -128,7 +129,7 @@ class ReviewValidatorTest { Template template = templateRepository.save(new Template(List.of(section))); TextAnswer optionalTextAnswer = new TextAnswer(optionalQuestion.getId(), "답변".repeat(20)); - Review review = new Review(template.getId(), reviewGroup.getId(), List.of(optionalTextAnswer)); + Review review = 비회원_작성_리뷰(template.getId(), reviewGroup.getId(), List.of(optionalTextAnswer)); // when, then assertThatThrownBy(() -> reviewValidator.validate(review)) diff --git a/backend/src/test/java/reviewme/reviewgroup/ReviewGroupTest.java b/backend/src/test/java/reviewme/reviewgroup/ReviewGroupTest.java index d67b5f849..454f01125 100644 --- a/backend/src/test/java/reviewme/reviewgroup/ReviewGroupTest.java +++ b/backend/src/test/java/reviewme/reviewgroup/ReviewGroupTest.java @@ -11,8 +11,9 @@ class ReviewGroupTest { @Test - void 정상_생성된다() { + void 회원의_리뷰_그룹을_생성한다() { // given + long memberId = 1L; int maxLength = 50; int minLength = 1; String minLengthName = "*".repeat(minLength); @@ -20,9 +21,27 @@ class ReviewGroupTest { // when, then assertAll( - () -> assertThatCode(() -> new ReviewGroup(minLengthName, "project", "reviewCode", "groupCode", 1L)) + () -> assertThatCode(() -> new ReviewGroup(memberId, 1L, minLengthName, "project", "reviewCode")) .doesNotThrowAnyException(), - () -> assertThatCode(() -> new ReviewGroup(maxLengthName, "project", "reviewCode", "groupCode", 1L)) + () -> assertThatCode(() -> new ReviewGroup(memberId, 1L, maxLengthName, "project", "reviewCode")) + .doesNotThrowAnyException() + ); + } + + @Test + void 비회원의_리뷰_그룹을_생성한다() { + // given + int maxLength = 50; + int minLength = 1; + String minLengthName = "*".repeat(minLength); + String maxLengthName = "*".repeat(maxLength); + String groupAccessCode = "groupAccessCode"; + + // when, then + assertAll( + () -> assertThatCode(() -> new ReviewGroup(1L, minLengthName, "project", "reviewCode", groupAccessCode)) + .doesNotThrowAnyException(), + () -> assertThatCode(() -> new ReviewGroup(1L, maxLengthName, "project", "reviewCode", groupAccessCode)) .doesNotThrowAnyException() ); } @@ -37,9 +56,9 @@ class ReviewGroupTest { // when, then assertAll( - () -> assertThatCode(() -> new ReviewGroup(insufficientName, "project", "reviewCode", "groupCode", 1L)) + () -> assertThatCode(() -> new ReviewGroup(1L, insufficientName, "project", "reviewCode", "groupCode")) .isInstanceOf(BadRequestException.class), - () -> assertThatThrownBy(() -> new ReviewGroup(exceedName, "project", "reviewCode", "groupCode", 1L)) + () -> assertThatThrownBy(() -> new ReviewGroup(1L, exceedName, "project", "reviewCode", "groupCode")) .isInstanceOf(BadRequestException.class) ); } @@ -54,9 +73,9 @@ class ReviewGroupTest { // when, then assertAll( - () -> assertThatThrownBy(() -> new ReviewGroup("reviwee", insufficientName, "reviewCode", "groupCode", 1L)) + () -> assertThatThrownBy(() -> new ReviewGroup(1L, "reviwee", insufficientName, "reviewCode", "groupCode")) .isInstanceOf(BadRequestException.class), - () -> assertThatThrownBy(() -> new ReviewGroup("reviwee", exceedName, "reviewCode", "groupCode", 1L)) + () -> assertThatThrownBy(() -> new ReviewGroup(1L, "reviwee", exceedName, "reviewCode", "groupCode")) .isInstanceOf(BadRequestException.class) ); } diff --git a/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupLookupServiceTest.java b/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupLookupServiceTest.java index 4c553a9a3..78e5f63ab 100644 --- a/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupLookupServiceTest.java +++ b/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupLookupServiceTest.java @@ -25,11 +25,11 @@ class ReviewGroupLookupServiceTest { void 리뷰_요청_코드로_리뷰_그룹을_조회한다() { // given ReviewGroup reviewGroup = reviewGroupRepository.save(new ReviewGroup( + 1L, "ted", "review-me", "reviewRequestCode", - "groupAccessCode", - 1L + "groupAccessCode" )); // when diff --git a/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupServiceTest.java b/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupServiceTest.java index fec3b466f..ab8252004 100644 --- a/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupServiceTest.java +++ b/backend/src/test/java/reviewme/reviewgroup/service/ReviewGroupServiceTest.java @@ -2,6 +2,7 @@ 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 org.mockito.ArgumentMatchers.anyInt; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; @@ -12,8 +13,6 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.mock.mockito.MockBean; import reviewme.reviewgroup.domain.ReviewGroup; @@ -28,7 +27,6 @@ import reviewme.template.repository.TemplateRepository; @ServiceTest -@ExtendWith(MockitoExtension.class) class ReviewGroupServiceTest { @MockBean @@ -44,7 +42,62 @@ class ReviewGroupServiceTest { private TemplateRepository templateRepository; @Test - void 코드가_중복되는_경우_다시_생성한다() { + void 회원의_리뷰_그룹을_생성한다() { + // given + Question question = 서술형_필수_질문(); + Section section = 항상_보이는_섹션(List.of(question)); + templateRepository.save(new Template(List.of(section))); + given(randomCodeGenerator.generate(anyInt())) + .willReturn("reviewRequestCode"); + + String revieweeName = "ted"; + String projectName = "reviewme"; + ReviewGroupCreationRequest request = new ReviewGroupCreationRequest(revieweeName, projectName, null); + long memberId = 1L; + + // when + ReviewGroupCreationResponse actual = reviewGroupService.createReviewGroup(request, memberId); + + // then + ReviewGroup expected = reviewGroupRepository.findByReviewRequestCode(actual.reviewRequestCode()) + .orElseThrow(); + + assertAll( + () -> assertThat(expected.getReviewee()).isEqualTo(revieweeName), + () -> assertThat(expected.getProjectName()).isEqualTo(projectName), + () -> assertThat(expected.getGroupAccessCode()).isNull(), + () -> assertThat(expected.getMemberId()).isEqualTo(memberId) + ); + } + + @Test + void 비회원의_리뷰_그룹을_생성한다() { + // given + Question question = 서술형_필수_질문(); + Section section = 항상_보이는_섹션(List.of(question)); + templateRepository.save(new Template(List.of(section))); + given(randomCodeGenerator.generate(anyInt())) + .willReturn("reviewRequestCode"); + + String revieweeName = "ted"; + String projectName = "reviewme"; + ReviewGroupCreationRequest request = new ReviewGroupCreationRequest(revieweeName, projectName, + "groupAccessCode"); + + // when + ReviewGroupCreationResponse actual = reviewGroupService.createReviewGroup(request, null); + + // then + ReviewGroup expected = reviewGroupRepository.findByReviewRequestCode(actual.reviewRequestCode()) + .orElseThrow(); + assertThat(expected.getReviewee()).isEqualTo(revieweeName); + assertThat(expected.getProjectName()).isEqualTo(projectName); + assertThat(expected.getGroupAccessCode()).isNotNull(); + assertThat(expected.getMemberId()).isNull(); + } + + @Test + void 리뷰_요청_코드가_중복되는_경우_다시_생성한다() { // given Question question = 서술형_필수_질문(); Section section = 항상_보이는_섹션(List.of(question)); @@ -58,7 +111,7 @@ class ReviewGroupServiceTest { ReviewGroupCreationRequest request = new ReviewGroupCreationRequest("sancho", "reviewme", "groupAccessCode"); // when - ReviewGroupCreationResponse response = reviewGroupService.createReviewGroup(request); + ReviewGroupCreationResponse response = reviewGroupService.createReviewGroup(request, null); // then assertThat(response).isEqualTo(new ReviewGroupCreationResponse("AAAA"));