diff --git a/src/main/java/com/somemore/domains/review/controller/ReviewCommandApiController.java b/src/main/java/com/somemore/domains/review/controller/ReviewCommandApiController.java index bd2f974b2..d5ebc6dc8 100644 --- a/src/main/java/com/somemore/domains/review/controller/ReviewCommandApiController.java +++ b/src/main/java/com/somemore/domains/review/controller/ReviewCommandApiController.java @@ -5,13 +5,12 @@ import com.somemore.domains.review.usecase.CreateReviewUseCase; import com.somemore.domains.review.usecase.DeleteReviewUseCase; import com.somemore.domains.review.usecase.UpdateReviewUseCase; -import com.somemore.global.auth.annotation.CurrentUser; +import com.somemore.global.auth.annotation.RoleId; import com.somemore.global.common.response.ApiResponse; -import com.somemore.global.imageupload.dto.ImageUploadRequestDto; -import com.somemore.global.imageupload.usecase.ImageUploadUseCase; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.security.access.annotation.Secured; import org.springframework.web.bind.annotation.DeleteMapping; @@ -20,13 +19,7 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; - -import java.util.UUID; - -import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; @Tag(name = "Review Command API", description = "리뷰 생성 수정 삭제 API") @RequiredArgsConstructor @@ -37,20 +30,17 @@ public class ReviewCommandApiController { private final CreateReviewUseCase createReviewUseCase; private final UpdateReviewUseCase updateReviewUseCase; private final DeleteReviewUseCase deleteReviewUseCase; - private final ImageUploadUseCase imageUploadUseCase; @Secured("ROLE_VOLUNTEER") @Operation(summary = "리뷰 등록", description = "리뷰를 등록합니다.") - @PostMapping(value = "/review", consumes = MULTIPART_FORM_DATA_VALUE) + @PostMapping(value = "/review") public ApiResponse createReview( - @CurrentUser UUID userId, - @Valid @RequestPart("data") ReviewCreateRequestDto requestDto, - @RequestPart(value = "img_file", required = false) MultipartFile image) { + @RoleId UUID volunteerId, + @Valid @RequestBody ReviewCreateRequestDto requestDto) { - String imgUrl = imageUploadUseCase.uploadImage(new ImageUploadRequestDto(image)); return ApiResponse.ok( 201, - createReviewUseCase.createReview(requestDto, userId, imgUrl), + createReviewUseCase.createReview(requestDto, volunteerId), "리뷰 등록 성공" ); } @@ -59,11 +49,11 @@ public ApiResponse createReview( @Operation(summary = "리뷰 수정", description = "리뷰를 수정합니다.") @PutMapping(value = "/review/{id}") public ApiResponse updateReview( - @CurrentUser UUID userId, + @RoleId UUID volunteerId, @PathVariable Long id, @Valid @RequestBody ReviewUpdateRequestDto requestDto) { - updateReviewUseCase.updateReview(id, userId, requestDto); + updateReviewUseCase.updateReview(id, volunteerId, requestDto); return ApiResponse.ok( 200, @@ -71,30 +61,14 @@ public ApiResponse updateReview( ); } - @Secured("ROLE_VOLUNTEER") - @Operation(summary = "리뷰 이미지 수정", description = "리뷰 이미지를 수정합니다.") - @PutMapping(value = "/review/{id}", consumes = MULTIPART_FORM_DATA_VALUE) - public ApiResponse updateReviewImage( - @CurrentUser UUID userId, - @PathVariable Long id, - @RequestPart(value = "img_file", required = false) MultipartFile image) { - - String newImgUrl = imageUploadUseCase.uploadImage(new ImageUploadRequestDto(image)); - updateReviewUseCase.updateReviewImageUrl(id, userId, newImgUrl); - return ApiResponse.ok( - 200, - "리뷰 이미지 수정 성공" - ); - } - @Secured("ROLE_VOLUNTEER") @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제합니다.") @DeleteMapping(value = "/review/{id}") public ApiResponse createReview( - @CurrentUser UUID userId, + @RoleId UUID volunteerId, @PathVariable Long id ) { - deleteReviewUseCase.deleteReview(userId, id); + deleteReviewUseCase.deleteReview(volunteerId, id); return ApiResponse.ok("리뷰 삭제 성공"); } diff --git a/src/main/java/com/somemore/domains/review/domain/Review.java b/src/main/java/com/somemore/domains/review/domain/Review.java index 0e3bbb39b..0cff67b85 100644 --- a/src/main/java/com/somemore/domains/review/domain/Review.java +++ b/src/main/java/com/somemore/domains/review/domain/Review.java @@ -1,5 +1,8 @@ package com.somemore.domains.review.domain; +import static jakarta.persistence.GenerationType.IDENTITY; +import static lombok.AccessLevel.PROTECTED; + import com.somemore.domains.review.dto.request.ReviewUpdateRequestDto; import com.somemore.global.common.entity.BaseEntity; import jakarta.persistence.Column; @@ -8,15 +11,11 @@ import jakarta.persistence.Id; import jakarta.persistence.Lob; import jakarta.persistence.Table; +import java.util.UUID; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import java.util.UUID; - -import static jakarta.persistence.GenerationType.IDENTITY; -import static lombok.AccessLevel.PROTECTED; - @Getter @NoArgsConstructor(access = PROTECTED) @Entity @@ -40,17 +39,12 @@ public class Review extends BaseEntity { @Column(name = "content", length = 1000, nullable = false) private String content; - @Column(name = "img_url", nullable = false) - private String imgUrl; - @Builder - public Review(Long volunteerApplyId, UUID volunteerId, String title, - String content, String imgUrl) { + public Review(Long volunteerApplyId, UUID volunteerId, String title, String content) { this.volunteerApplyId = volunteerApplyId; this.volunteerId = volunteerId; this.title = title; this.content = content; - this.imgUrl = imgUrl; } public boolean isWriter(UUID volunteerId) { @@ -62,7 +56,4 @@ public void updateWith(ReviewUpdateRequestDto dto) { this.content = dto.content(); } - public void updateWith(String imgUrl) { - this.imgUrl = imgUrl; - } } diff --git a/src/main/java/com/somemore/domains/review/dto/request/ReviewCreateRequestDto.java b/src/main/java/com/somemore/domains/review/dto/request/ReviewCreateRequestDto.java index ca29da619..00dec8cfb 100644 --- a/src/main/java/com/somemore/domains/review/dto/request/ReviewCreateRequestDto.java +++ b/src/main/java/com/somemore/domains/review/dto/request/ReviewCreateRequestDto.java @@ -24,13 +24,12 @@ public record ReviewCreateRequestDto( String content ) { - public Review toEntity(UUID volunteerId, String imgUrl) { + public Review toEntity(UUID volunteerId) { return Review.builder() .volunteerApplyId(volunteerApplyId) .volunteerId(volunteerId) .title(title) .content(content) - .imgUrl(imgUrl) .build(); } } diff --git a/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailResponseDto.java b/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailResponseDto.java index 8ed2903ad..8eb6f4b23 100644 --- a/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailResponseDto.java +++ b/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailResponseDto.java @@ -21,8 +21,6 @@ public record ReviewDetailResponseDto( String title, @Schema(description = "리뷰 내용", example = "정말 유익했습니다. 더보기..") String content, - @Schema(description = "이미지 링크", example = "https://image.domain.com/links") - String imgUrl, @Schema(description = "작성 일자", example = "2024-12-01T09:00:00", type = "string") LocalDateTime createdAt, @Schema(description = "수정 일자", example = "2024-12-01T09:00:00", type = "string") @@ -35,7 +33,6 @@ public static ReviewDetailResponseDto from(Review review) { .volunteerId(review.getVolunteerId()) .title(review.getTitle()) .content(review.getContent()) - .imgUrl(review.getImgUrl()) .createdAt(review.getCreatedAt()) .updatedAt(review.getUpdatedAt()) .build(); diff --git a/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailWithNicknameResponseDto.java b/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailWithNicknameResponseDto.java index cb759d83c..e1ac6604c 100644 --- a/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailWithNicknameResponseDto.java +++ b/src/main/java/com/somemore/domains/review/dto/response/ReviewDetailWithNicknameResponseDto.java @@ -23,8 +23,6 @@ public record ReviewDetailWithNicknameResponseDto( String title, @Schema(description = "리뷰 내용", example = "정말 유익했습니다. 더보기..") String content, - @Schema(description = "이미지 링크", example = "https://image.domain.com/links") - String imgUrl, @Schema(description = "작성 일자", example = "2024-12-01T09:00:00", type = "string") LocalDateTime createdAt, @Schema(description = "수정 일자", example = "2024-12-01T09:00:00", type = "string") @@ -38,7 +36,6 @@ public static ReviewDetailWithNicknameResponseDto from(Review review, String vol .volunteerNickname(volunteerNickname) .title(review.getTitle()) .content(review.getContent()) - .imgUrl(review.getImgUrl()) .createdAt(review.getCreatedAt()) .updateAt(review.getUpdatedAt()) .build(); diff --git a/src/main/java/com/somemore/domains/review/service/CreateReviewService.java b/src/main/java/com/somemore/domains/review/service/CreateReviewService.java index 1fd846fd9..7b32f9066 100644 --- a/src/main/java/com/somemore/domains/review/service/CreateReviewService.java +++ b/src/main/java/com/somemore/domains/review/service/CreateReviewService.java @@ -1,5 +1,8 @@ package com.somemore.domains.review.service; +import static com.somemore.global.exception.ExceptionMessage.REVIEW_ALREADY_EXISTS; +import static com.somemore.global.exception.ExceptionMessage.REVIEW_RESTRICTED_TO_ATTENDED; + import com.somemore.domains.review.domain.Review; import com.somemore.domains.review.dto.request.ReviewCreateRequestDto; import com.somemore.domains.review.repository.ReviewRepository; @@ -9,15 +12,11 @@ import com.somemore.domains.volunteerapply.usecase.VolunteerApplyQueryUseCase; import com.somemore.global.exception.BadRequestException; import com.somemore.global.exception.DuplicateException; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.UUID; - -import static com.somemore.global.exception.ExceptionMessage.REVIEW_ALREADY_EXISTS; -import static com.somemore.global.exception.ExceptionMessage.REVIEW_RESTRICTED_TO_ATTENDED; - @RequiredArgsConstructor @Transactional @Service @@ -28,13 +27,13 @@ public class CreateReviewService implements CreateReviewUseCase { private final VolunteerApplyQueryUseCase volunteerApplyQueryUseCase; @Override - public Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId, String imgUrl) { + public Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId) { validateDuplicateReview(requestDto.volunteerApplyId()); VolunteerApply apply = volunteerApplyQueryUseCase.getById(requestDto.volunteerApplyId()); validateActivityCompletion(apply); - Review review = requestDto.toEntity(volunteerId, imgUrl); + Review review = requestDto.toEntity(volunteerId); reviewRepository.save(review); return review.getId(); diff --git a/src/main/java/com/somemore/domains/review/service/UpdateReviewService.java b/src/main/java/com/somemore/domains/review/service/UpdateReviewService.java index 8640064e6..b315a5ba5 100644 --- a/src/main/java/com/somemore/domains/review/service/UpdateReviewService.java +++ b/src/main/java/com/somemore/domains/review/service/UpdateReviewService.java @@ -5,12 +5,11 @@ import com.somemore.domains.review.service.validator.ReviewValidator; import com.somemore.domains.review.usecase.ReviewQueryUseCase; import com.somemore.domains.review.usecase.UpdateReviewUseCase; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.UUID; - @RequiredArgsConstructor @Transactional @Service @@ -26,11 +25,4 @@ public void updateReview(Long id, UUID volunteerId, ReviewUpdateRequestDto reque review.updateWith(requestDto); } - @Override - public void updateReviewImageUrl(Long id, UUID volunteerId, String imgUrl) { - Review review = reviewQueryUseCase.getById(id); - reviewValidator.validateWriter(review, volunteerId); - review.updateWith(imgUrl); - } - } diff --git a/src/main/java/com/somemore/domains/review/usecase/CreateReviewUseCase.java b/src/main/java/com/somemore/domains/review/usecase/CreateReviewUseCase.java index 89c7f3401..8d8ae0227 100644 --- a/src/main/java/com/somemore/domains/review/usecase/CreateReviewUseCase.java +++ b/src/main/java/com/somemore/domains/review/usecase/CreateReviewUseCase.java @@ -1,12 +1,10 @@ package com.somemore.domains.review.usecase; import com.somemore.domains.review.dto.request.ReviewCreateRequestDto; - import java.util.UUID; public interface CreateReviewUseCase { - Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId, String imgUrl); - + Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId); } diff --git a/src/main/java/com/somemore/domains/review/usecase/UpdateReviewUseCase.java b/src/main/java/com/somemore/domains/review/usecase/UpdateReviewUseCase.java index 945e8791e..2f119e088 100644 --- a/src/main/java/com/somemore/domains/review/usecase/UpdateReviewUseCase.java +++ b/src/main/java/com/somemore/domains/review/usecase/UpdateReviewUseCase.java @@ -1,12 +1,10 @@ package com.somemore.domains.review.usecase; import com.somemore.domains.review.dto.request.ReviewUpdateRequestDto; - import java.util.UUID; public interface UpdateReviewUseCase { void updateReview(Long id, UUID volunteerId, ReviewUpdateRequestDto requestDto); - void updateReviewImageUrl(Long id, UUID volunteerId, String imgUrl); } diff --git a/src/test/java/com/somemore/domains/review/controller/ReviewCommandApiControllerTest.java b/src/test/java/com/somemore/domains/review/controller/ReviewCommandApiControllerTest.java index 86a408787..3e053e777 100644 --- a/src/test/java/com/somemore/domains/review/controller/ReviewCommandApiControllerTest.java +++ b/src/test/java/com/somemore/domains/review/controller/ReviewCommandApiControllerTest.java @@ -1,38 +1,29 @@ package com.somemore.domains.review.controller; -import com.fasterxml.jackson.core.JsonProcessingException; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willDoNothing; +import static org.springframework.http.MediaType.APPLICATION_JSON; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import com.somemore.domains.review.dto.request.ReviewCreateRequestDto; import com.somemore.domains.review.dto.request.ReviewUpdateRequestDto; import com.somemore.domains.review.usecase.CreateReviewUseCase; import com.somemore.domains.review.usecase.DeleteReviewUseCase; import com.somemore.domains.review.usecase.UpdateReviewUseCase; -import com.somemore.global.imageupload.usecase.ImageUploadUseCase; import com.somemore.support.ControllerTestSupport; -import com.somemore.support.annotation.WithMockCustomUser; +import com.somemore.support.annotation.MockUser; +import java.util.UUID; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder; - -import java.util.UUID; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.willDoNothing; -import static org.springframework.http.MediaType.APPLICATION_JSON; -import static org.springframework.http.MediaType.MULTIPART_FORM_DATA; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; class ReviewCommandApiControllerTest extends ControllerTestSupport { - @MockBean - private ImageUploadUseCase imageUploadUseCase; - @MockBean private CreateReviewUseCase createReviewUseCase; @@ -44,7 +35,7 @@ class ReviewCommandApiControllerTest extends ControllerTestSupport { @DisplayName("리뷰 생성 성공") @Test - @WithMockCustomUser() + @MockUser void createReview() throws Exception { // given ReviewCreateRequestDto requestDto = ReviewCreateRequestDto.builder() @@ -53,27 +44,17 @@ void createReview() throws Exception { .content("리뷰 내용") .build(); - MockMultipartFile imageFile = new MockMultipartFile( - "img_file", - "test-image.jpg", - MediaType.IMAGE_JPEG_VALUE, - "test image content".getBytes() - ); - - MockMultipartFile requestData = getRequestData(requestDto); + String requestData = objectMapper.writeValueAsString(requestDto); - String imgUrl = "https://example.com/image/test-image.jpg"; Long reviewId = 1L; - given(imageUploadUseCase.uploadImage(any())).willReturn(imgUrl); - given(createReviewUseCase.createReview(any(), any(UUID.class), - anyString())).willReturn(reviewId); + given(createReviewUseCase.createReview(any(), any(UUID.class))) + .willReturn(reviewId); // when - mockMvc.perform(multipart("/api/review") - .file(requestData) - .file(imageFile) - .contentType(MULTIPART_FORM_DATA) + mockMvc.perform(post("/api/review") + .content(requestData) + .contentType(APPLICATION_JSON) .header("Authorization", "Bearer access-token")) // then .andExpect(status().isOk()) @@ -84,7 +65,7 @@ void createReview() throws Exception { @DisplayName("리뷰 생성 유효성 테스트 - 모집글 아이디") @Test - @WithMockCustomUser() + @MockUser void createReviewValidateTestRecruitBoardId() throws Exception { // given ReviewCreateRequestDto requestDto = ReviewCreateRequestDto.builder() @@ -92,14 +73,12 @@ void createReviewValidateTestRecruitBoardId() throws Exception { .content("리뷰 내용") .build(); - MockMultipartFile requestData = getRequestData(requestDto); - - given(imageUploadUseCase.uploadImage(any())).willReturn(""); + String requestData = objectMapper.writeValueAsString(requestDto); // when - mockMvc.perform(multipart("/api/review") - .file(requestData) - .contentType(MULTIPART_FORM_DATA) + mockMvc.perform(post("/api/review") + .content(requestData) + .contentType(APPLICATION_JSON) .header("Authorization", "Bearer access-token")) // then .andExpect(status().isBadRequest()) @@ -110,7 +89,7 @@ void createReviewValidateTestRecruitBoardId() throws Exception { @DisplayName("리뷰 생성 유효성 테스트 - 제목") @Test - @WithMockCustomUser() + @MockUser void createReviewValidateTestTitle() throws Exception { // given ReviewCreateRequestDto requestDto = ReviewCreateRequestDto.builder() @@ -118,14 +97,12 @@ void createReviewValidateTestTitle() throws Exception { .content("리뷰 내용") .build(); - MockMultipartFile requestData = getRequestData(requestDto); - - given(imageUploadUseCase.uploadImage(any())).willReturn(""); + String requestData = objectMapper.writeValueAsString(requestDto); // when - mockMvc.perform(multipart("/api/review") - .file(requestData) - .contentType(MULTIPART_FORM_DATA) + mockMvc.perform(post("/api/review") + .content(requestData) + .contentType(APPLICATION_JSON) .header("Authorization", "Bearer access-token")) // then .andExpect(status().isBadRequest()) @@ -136,7 +113,7 @@ void createReviewValidateTestTitle() throws Exception { @DisplayName("리뷰 생성 유효성 테스트 - 내용") @Test - @WithMockCustomUser() + @MockUser void createReviewValidateTestContent() throws Exception { // given ReviewCreateRequestDto requestDto = ReviewCreateRequestDto.builder() @@ -144,14 +121,12 @@ void createReviewValidateTestContent() throws Exception { .title("리뷰 제목") .build(); - MockMultipartFile requestData = getRequestData(requestDto); - - given(imageUploadUseCase.uploadImage(any())).willReturn(""); + String requestData = objectMapper.writeValueAsString(requestDto); // when - mockMvc.perform(multipart("/api/review") - .file(requestData) - .contentType(MULTIPART_FORM_DATA) + mockMvc.perform(post("/api/review") + .content(requestData) + .contentType(APPLICATION_JSON) .header("Authorization", "Bearer access-token")) // then .andExpect(status().isBadRequest()) @@ -162,7 +137,7 @@ void createReviewValidateTestContent() throws Exception { @DisplayName("리뷰 수정 성공") @Test - @WithMockCustomUser() + @MockUser void updateReview() throws Exception { // given ReviewUpdateRequestDto requestDto = ReviewUpdateRequestDto.builder() @@ -188,7 +163,7 @@ void updateReview() throws Exception { @DisplayName("리뷰 수정 유효성 테스트 - 제목") @Test - @WithMockCustomUser() + @MockUser void updateReviewValidateTitle() throws Exception { // given ReviewUpdateRequestDto requestDto = ReviewUpdateRequestDto.builder() @@ -212,7 +187,7 @@ void updateReviewValidateTitle() throws Exception { @DisplayName("리뷰 수정 유효성 테스트 - 내용") @Test - @WithMockCustomUser() + @MockUser void updateReviewValidateContent() throws Exception { // given ReviewUpdateRequestDto requestDto = ReviewUpdateRequestDto.builder() @@ -234,40 +209,9 @@ void updateReviewValidateContent() throws Exception { .andExpect(jsonPath("$.detail").value("리뷰 내용은 필수 값입니다.")); } - @DisplayName("리뷰 이미지 수정 성공") - @Test - @WithMockCustomUser() - void updateReviewImage() throws Exception { - // given - Long reviewId = 1L; - - MockMultipartFile imageFile = new MockMultipartFile( - "img_file", - "test-image.jpg", - MediaType.IMAGE_JPEG_VALUE, - "test image content".getBytes() - ); - - String imgUrl = "https://example.com/image/test-image.jpg"; - - given(imageUploadUseCase.uploadImage(any())).willReturn(imgUrl); - - willDoNothing().given(updateReviewUseCase).updateReviewImageUrl(any(), any(UUID.class), anyString()); - - // when - mockMvc.perform(createMultipartPutRequest("/api/review/{id}", reviewId) - .file(imageFile) - .contentType(MULTIPART_FORM_DATA) - .header("Authorization", "Bearer access-token")) - // then - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(200)) - .andExpect(jsonPath("$.message").value("리뷰 이미지 수정 성공")); - } - @DisplayName("리뷰 삭제 성공 테스트") @Test - @WithMockCustomUser() + @MockUser void deleteReview() throws Exception { // given Long id = 1L; @@ -284,23 +228,4 @@ void deleteReview() throws Exception { .andExpect(jsonPath("$.message").value("리뷰 삭제 성공")); } - private MockMultipartFile getRequestData(ReviewCreateRequestDto requestDto) - throws JsonProcessingException { - return new MockMultipartFile( - "data", - "", - MediaType.APPLICATION_JSON_VALUE, - objectMapper.writeValueAsBytes(requestDto) - ); - } - - private MockMultipartHttpServletRequestBuilder createMultipartPutRequest(String url, Long id) { - MockMultipartHttpServletRequestBuilder builder = multipart(url, id); - builder.with(request -> { - request.setMethod("PUT"); - return request; - }); - return builder; - } - } diff --git a/src/test/java/com/somemore/domains/review/domain/ReviewTest.java b/src/test/java/com/somemore/domains/review/domain/ReviewTest.java index 4d01bfa45..d0af6940e 100644 --- a/src/test/java/com/somemore/domains/review/domain/ReviewTest.java +++ b/src/test/java/com/somemore/domains/review/domain/ReviewTest.java @@ -1,15 +1,13 @@ package com.somemore.domains.review.domain; +import static org.assertj.core.api.Assertions.assertThat; + import com.somemore.domains.review.dto.request.ReviewUpdateRequestDto; +import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.UUID; - -import static org.assertj.core.api.Assertions.assertThat; - - class ReviewTest { private UUID volunteerId; @@ -50,26 +48,12 @@ void updateWith() { assertThat(review.getContent()).isEqualTo(dto.content()); } - @DisplayName("이미지 링크를 업데이트 할 수 있다.") - @Test - void updateWithImgUrl() { - // given - String newImgUrl = "newLink"; - - // when - review.updateWith(newImgUrl); - - // then - assertThat(review.getImgUrl()).isEqualTo(newImgUrl); - } - private Review createReview(Long applyId, UUID volunteerId) { return Review.builder() .volunteerApplyId(applyId) .volunteerId(volunteerId) .title("제목제목") .content("내용내용") - .imgUrl("이미지링크") .build(); } } diff --git a/src/test/java/com/somemore/domains/review/repository/ReviewRepositoryImplTest.java b/src/test/java/com/somemore/domains/review/repository/ReviewRepositoryImplTest.java index 2882fc1d1..f7698f9fd 100644 --- a/src/test/java/com/somemore/domains/review/repository/ReviewRepositoryImplTest.java +++ b/src/test/java/com/somemore/domains/review/repository/ReviewRepositoryImplTest.java @@ -246,7 +246,6 @@ private Review createReview(Long applyId, UUID volunteerId, String title) { .volunteerId(volunteerId) .title(title) .content("내용내용") - .imgUrl("이미지링크") .build(); } diff --git a/src/test/java/com/somemore/domains/review/service/CreateReviewServiceTest.java b/src/test/java/com/somemore/domains/review/service/CreateReviewServiceTest.java index 74fbf397a..2e578c09f 100644 --- a/src/test/java/com/somemore/domains/review/service/CreateReviewServiceTest.java +++ b/src/test/java/com/somemore/domains/review/service/CreateReviewServiceTest.java @@ -1,5 +1,11 @@ package com.somemore.domains.review.service; +import static com.somemore.domains.volunteerapply.domain.ApplyStatus.APPROVED; +import static com.somemore.global.exception.ExceptionMessage.REVIEW_ALREADY_EXISTS; +import static com.somemore.global.exception.ExceptionMessage.REVIEW_RESTRICTED_TO_ATTENDED; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + import com.somemore.domains.review.domain.Review; import com.somemore.domains.review.dto.request.ReviewCreateRequestDto; import com.somemore.domains.review.repository.ReviewRepository; @@ -8,20 +14,13 @@ import com.somemore.global.exception.BadRequestException; import com.somemore.global.exception.DuplicateException; import com.somemore.support.IntegrationTestSupport; +import java.util.Optional; +import java.util.UUID; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; -import java.util.Optional; -import java.util.UUID; - -import static com.somemore.domains.volunteerapply.domain.ApplyStatus.APPROVED; -import static com.somemore.global.exception.ExceptionMessage.REVIEW_ALREADY_EXISTS; -import static com.somemore.global.exception.ExceptionMessage.REVIEW_RESTRICTED_TO_ATTENDED; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - @Transactional class CreateReviewServiceTest extends IntegrationTestSupport { @@ -55,7 +54,7 @@ void createReview() { .build(); // when - Long reviewId = createReviewService.createReview(requestDto, volunteerId, ""); + Long reviewId = createReviewService.createReview(requestDto, volunteerId); // then Optional findReview = reviewRepository.findById(reviewId); @@ -82,7 +81,6 @@ void createReviewWhenExistsReview() { .volunteerId(volunteerId) .title("리뷰 제목") .content("리뷰 내용") - .imgUrl("") .build(); reviewRepository.save(review); @@ -95,7 +93,7 @@ void createReviewWhenExistsReview() { // when // then assertThatThrownBy( - () -> createReviewService.createReview(requestDto, volunteerId, "")) + () -> createReviewService.createReview(requestDto, volunteerId)) .isInstanceOf(DuplicateException.class) .hasMessage(REVIEW_ALREADY_EXISTS.getMessage()); } @@ -124,7 +122,7 @@ void createReviewWhenNotCompleted() { // when // then assertThatThrownBy( - () -> createReviewService.createReview(requestDto, volunteerId, "")) + () -> createReviewService.createReview(requestDto, volunteerId)) .isInstanceOf(BadRequestException.class) .hasMessage(REVIEW_RESTRICTED_TO_ATTENDED.getMessage()); } diff --git a/src/test/java/com/somemore/domains/review/service/DeleteReviewServiceTest.java b/src/test/java/com/somemore/domains/review/service/DeleteReviewServiceTest.java index 646054690..ca6d91852 100644 --- a/src/test/java/com/somemore/domains/review/service/DeleteReviewServiceTest.java +++ b/src/test/java/com/somemore/domains/review/service/DeleteReviewServiceTest.java @@ -28,9 +28,8 @@ void deleteReview() { UUID volunteerId = UUID.randomUUID(); String title = "리뷰 제목"; String content = "리뷰 내용"; - String imgUrl = "리뷰 이미지"; - Review review = createReview(volunteerId, title, content, imgUrl); + Review review = createReview(volunteerId, title, content); reviewRepository.save(review); // when @@ -41,13 +40,12 @@ void deleteReview() { assertThat(findReview).isEmpty(); } - private Review createReview(UUID volunteerId, String title, String content, String imgUrl) { + private Review createReview(UUID volunteerId, String title, String content) { return Review.builder() .volunteerApplyId(1L) .volunteerId(volunteerId) .title(title) .content(content) - .imgUrl(imgUrl) .build(); } } diff --git a/src/test/java/com/somemore/domains/review/service/ReviewQueryServiceTest.java b/src/test/java/com/somemore/domains/review/service/ReviewQueryServiceTest.java index b63212956..76c3e6bdd 100644 --- a/src/test/java/com/somemore/domains/review/service/ReviewQueryServiceTest.java +++ b/src/test/java/com/somemore/domains/review/service/ReviewQueryServiceTest.java @@ -1,5 +1,17 @@ package com.somemore.domains.review.service; +import static com.somemore.domains.recruitboard.domain.VolunteerCategory.COUNSELING; +import static com.somemore.domains.recruitboard.domain.VolunteerCategory.CULTURAL_EVENT; +import static com.somemore.domains.recruitboard.domain.VolunteerCategory.OTHER; +import static com.somemore.domains.volunteerapply.domain.ApplyStatus.APPROVED; +import static com.somemore.global.auth.oauth.domain.OAuthProvider.NAVER; +import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_REVIEW; +import static com.somemore.support.fixture.CenterFixture.createCenter; +import static com.somemore.support.fixture.RecruitBoardFixture.createCompletedRecruitBoard; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.AssertionsForClassTypes.tuple; + import com.somemore.domains.center.domain.Center; import com.somemore.domains.center.repository.center.CenterRepository; import com.somemore.domains.recruitboard.domain.RecruitBoard; @@ -16,6 +28,8 @@ import com.somemore.domains.volunteerapply.repository.VolunteerApplyRepository; import com.somemore.global.exception.NoSuchElementException; import com.somemore.support.IntegrationTestSupport; +import java.util.List; +import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -25,19 +39,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import java.util.List; -import java.util.UUID; - -import static com.somemore.domains.recruitboard.domain.VolunteerCategory.*; -import static com.somemore.domains.volunteerapply.domain.ApplyStatus.APPROVED; -import static com.somemore.global.auth.oauth.domain.OAuthProvider.NAVER; -import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_REVIEW; -import static com.somemore.support.fixture.CenterFixture.createCenter; -import static com.somemore.support.fixture.RecruitBoardFixture.createCompletedRecruitBoard; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.assertj.core.api.AssertionsForClassTypes.tuple; - class ReviewQueryServiceTest extends IntegrationTestSupport { @Autowired @@ -121,7 +122,6 @@ void getDetailById() { assertThat(findOne).extracting("volunteerId").isEqualTo(review.getVolunteerId()); assertThat(findOne).extracting("title").isEqualTo(review.getTitle()); assertThat(findOne).extracting("content").isEqualTo(review.getContent()); - assertThat(findOne).extracting("imgUrl").isEqualTo(review.getImgUrl()); } @@ -146,11 +146,9 @@ void getReviewsByVolunteerId() { volunteerApplyRepository.saveAll(List.of(apply1, apply2)); Review review1 = createReview(apply1.getId(), volunteerId, "제 인생 최고의 봉사활동", - "정말 유익했습니다. 더보기..", - "https://image.domain.com/links1"); + "정말 유익했습니다. 더보기.."); Review review2 = createReview(apply2.getId(), volunteerId, "보람있는 봉사활동", - "많은 사람들에게 도움을 주었어요.", - "https://image.domain.com/links2"); + "많은 사람들에게 도움을 주었어요."); reviewRepository.saveAll(List.of(review1, review2)); ReviewSearchCondition conditionWithoutCategory = ReviewSearchCondition.builder() @@ -196,11 +194,9 @@ void getReviewsByCenterId() { volunteerApplyRepository.saveAll(List.of(apply1, apply2)); Review review1 = createReview(apply1.getId(), volunteer1.getId(), "제 인생 최고의 봉사활동", - "정말 유익했습니다. 더보기..", - "https://image.domain.com/links1"); + "정말 유익했습니다. 더보기.."); Review review2 = createReview(apply2.getId(), volunteer2.getId(), "보람있는 봉사활동", - "많은 사람들에게 도움을 주었어요.", - "https://image.domain.com/links2"); + "많은 사람들에게 도움을 주었어요."); reviewRepository.saveAll(List.of(review1, review2)); ReviewSearchCondition condition = ReviewSearchCondition.builder() @@ -230,18 +226,15 @@ private Review createReview(Long applyId, UUID volunteerId) { .volunteerId(volunteerId) .title("리뷰 제목") .content("리뷰 내용") - .imgUrl("") .build(); } - private Review createReview(Long applyId, UUID volunteerId, String title, String content, - String imgUrl) { + private Review createReview(Long applyId, UUID volunteerId, String title, String content) { return Review.builder() .volunteerApplyId(applyId) .volunteerId(volunteerId) .title(title) .content(content) - .imgUrl(imgUrl) .build(); } diff --git a/src/test/java/com/somemore/domains/review/service/UpdateReviewServiceTest.java b/src/test/java/com/somemore/domains/review/service/UpdateReviewServiceTest.java index 946fff38c..34496c110 100644 --- a/src/test/java/com/somemore/domains/review/service/UpdateReviewServiceTest.java +++ b/src/test/java/com/somemore/domains/review/service/UpdateReviewServiceTest.java @@ -51,28 +51,12 @@ void updateReview() { assertThat(updateReview.getContent()).isEqualTo(dto.content()); } - @DisplayName("리뷰 이미지 링크를 업데이트 할 수 있다.") - @Test - void updateReviewImageUrl() { - // given - Long id = review.getId(); - String newImgUrl = "newLink.co.kr"; - - // when - updateReviewService.updateReviewImageUrl(id, volunteerId, newImgUrl); - - // then - Review updateReview = reviewRepository.findById(id).orElseThrow(); - assertThat(updateReview.getImgUrl()).isEqualTo(newImgUrl); - } - private Review createReview(Long applyId, UUID volunteerId) { return Review.builder() .volunteerApplyId(applyId) .volunteerId(volunteerId) .title("제목제목") .content("내용내용") - .imgUrl("이미지링크") .build(); } } diff --git a/src/test/java/com/somemore/domains/review/service/validator/ReviewValidatorTest.java b/src/test/java/com/somemore/domains/review/service/validator/ReviewValidatorTest.java index c95b74e51..c6931e407 100644 --- a/src/test/java/com/somemore/domains/review/service/validator/ReviewValidatorTest.java +++ b/src/test/java/com/somemore/domains/review/service/validator/ReviewValidatorTest.java @@ -1,16 +1,15 @@ package com.somemore.domains.review.service.validator; +import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_REVIEW; +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + import com.somemore.domains.review.domain.Review; import com.somemore.global.exception.BadRequestException; +import java.util.UUID; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.UUID; - -import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_REVIEW; -import static org.assertj.core.api.Assertions.assertThatCode; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - class ReviewValidatorTest { private final ReviewValidator reviewValidator = new ReviewValidator(); @@ -20,7 +19,7 @@ class ReviewValidatorTest { void validateWriter() { // given UUID volunteerId = UUID.randomUUID(); - Review review = createReview(volunteerId, "리뷰 제목", "내용내용", "이미지링크"); + Review review = createReview(volunteerId, "리뷰 제목", "내용내용"); // when // then @@ -34,7 +33,7 @@ void validateWriter() { void validateWriterWhenMissMatch() { // given UUID wrongVolunteerId = UUID.randomUUID(); - Review review = createReview(UUID.randomUUID(), "다른 제목", "다른 내용", "다른 링크"); + Review review = createReview(UUID.randomUUID(), "다른 제목", "다른 내용"); // when // then @@ -44,13 +43,12 @@ void validateWriterWhenMissMatch() { .hasMessage(UNAUTHORIZED_REVIEW.getMessage()); } - private Review createReview(UUID volunteerId, String title, String content, String imgUrl) { + private Review createReview(UUID volunteerId, String title, String content) { return Review.builder() .volunteerApplyId(1L) .volunteerId(volunteerId) .title(title) .content(content) - .imgUrl(imgUrl) .build(); } } diff --git a/src/test/java/com/somemore/domains/volunteerapply/service/VolunteerApplyQueryFacadeServiceTest.java b/src/test/java/com/somemore/domains/volunteerapply/service/VolunteerApplyQueryFacadeServiceTest.java index 3c397ef29..b45349475 100644 --- a/src/test/java/com/somemore/domains/volunteerapply/service/VolunteerApplyQueryFacadeServiceTest.java +++ b/src/test/java/com/somemore/domains/volunteerapply/service/VolunteerApplyQueryFacadeServiceTest.java @@ -1,5 +1,10 @@ package com.somemore.domains.volunteerapply.service; +import static com.somemore.domains.volunteerapply.domain.ApplyStatus.APPROVED; +import static com.somemore.global.auth.oauth.domain.OAuthProvider.NAVER; +import static com.somemore.support.fixture.RecruitBoardFixture.createRecruitBoard; +import static org.assertj.core.api.Assertions.assertThat; + import com.somemore.domains.recruitboard.domain.RecruitBoard; import com.somemore.domains.recruitboard.repository.RecruitBoardRepository; import com.somemore.domains.review.domain.Review; @@ -16,6 +21,8 @@ import com.somemore.domains.volunteerapply.dto.response.VolunteerApplyWithReviewStatusResponseDto; import com.somemore.domains.volunteerapply.repository.VolunteerApplyRepository; import com.somemore.support.IntegrationTestSupport; +import java.util.List; +import java.util.UUID; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -24,14 +31,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.UUID; - -import static com.somemore.domains.volunteerapply.domain.ApplyStatus.APPROVED; -import static com.somemore.global.auth.oauth.domain.OAuthProvider.NAVER; -import static com.somemore.support.fixture.RecruitBoardFixture.createRecruitBoard; -import static org.assertj.core.api.Assertions.assertThat; - @Transactional class VolunteerApplyQueryFacadeServiceTest extends IntegrationTestSupport { @@ -140,7 +139,6 @@ private static Review createReview(Long volunteerApplyId, UUID volunteerId) { .volunteerId(volunteerId) .title("리뷰 제목") .content("리뷰 내용") - .imgUrl("리뷰 이미지") .build(); }