Skip to content

Commit 0026789

Browse files
committed
test(review): 리뷰 삭제 테스트
1 parent ba33c14 commit 0026789

File tree

4 files changed

+202
-9
lines changed

4 files changed

+202
-9
lines changed

src/test/java/com/somemore/domains/review/controller/ReviewCommandApiControllerTest.java

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
package com.somemore.domains.review.controller;
22

3-
import static org.mockito.ArgumentMatchers.any;
4-
import static org.mockito.ArgumentMatchers.anyString;
5-
import static org.mockito.BDDMockito.given;
6-
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA;
7-
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
8-
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
9-
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
10-
113
import com.fasterxml.jackson.core.JsonProcessingException;
124
import com.somemore.domains.review.dto.request.ReviewCreateRequestDto;
135
import com.somemore.domains.review.usecase.CreateReviewUseCase;
6+
import com.somemore.domains.review.usecase.DeleteReviewUseCase;
147
import com.somemore.global.imageupload.usecase.ImageUploadUseCase;
158
import com.somemore.support.ControllerTestSupport;
169
import com.somemore.support.annotation.WithMockCustomUser;
17-
import java.util.UUID;
1810
import org.junit.jupiter.api.DisplayName;
1911
import org.junit.jupiter.api.Test;
2012
import org.springframework.boot.test.mock.mockito.MockBean;
2113
import org.springframework.http.MediaType;
2214
import org.springframework.mock.web.MockMultipartFile;
2315

16+
import java.util.UUID;
17+
18+
import static org.mockito.ArgumentMatchers.any;
19+
import static org.mockito.ArgumentMatchers.anyString;
20+
import static org.mockito.BDDMockito.given;
21+
import static org.mockito.BDDMockito.willDoNothing;
22+
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA;
23+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
24+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
25+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
26+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
27+
2428
class ReviewCommandApiControllerTest extends ControllerTestSupport {
2529

2630
@MockBean
@@ -29,6 +33,9 @@ class ReviewCommandApiControllerTest extends ControllerTestSupport {
2933
@MockBean
3034
private CreateReviewUseCase createReviewUseCase;
3135

36+
@MockBean
37+
DeleteReviewUseCase deleteReviewUseCase;
38+
3239
@DisplayName("리뷰 생성 성공")
3340
@Test
3441
@WithMockCustomUser()
@@ -147,6 +154,25 @@ void createReviewValidateTestContent() throws Exception {
147154
.andExpect(jsonPath("$.detail").value("리뷰 내용은 필수 값입니다."));
148155
}
149156

157+
@DisplayName("리뷰 삭제 성공 테스트")
158+
@Test
159+
@WithMockCustomUser()
160+
void deleteReview() throws Exception {
161+
// given
162+
Long id = 1L;
163+
UUID volunteerId = UUID.randomUUID();
164+
165+
willDoNothing().given(deleteReviewUseCase).deleteReview(volunteerId, id);
166+
167+
// when
168+
mockMvc.perform(delete("/api/review/{id}", id)
169+
.header("Authorization", "Bearer access-token"))
170+
// then
171+
.andExpect(status().isOk())
172+
.andExpect(jsonPath("$.code").value(200))
173+
.andExpect(jsonPath("$.message").value("리뷰 삭제 성공"));
174+
}
175+
150176
private MockMultipartFile getRequestData(ReviewCreateRequestDto requestDto)
151177
throws JsonProcessingException {
152178
return new MockMultipartFile(
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.somemore.domains.review.domain;
2+
3+
import org.junit.jupiter.api.DisplayName;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.util.UUID;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
11+
class ReviewTest {
12+
13+
@DisplayName("작성자 인지 확인할 수 있다.")
14+
@Test
15+
void isAuthor() {
16+
// given
17+
Long applyId = 1L;
18+
UUID volunteerId = UUID.randomUUID();
19+
String title = "리뷰 제목";
20+
21+
Review review = createReview(applyId, volunteerId, title);
22+
23+
// when
24+
boolean result = review.isAuthor(volunteerId);
25+
26+
// then
27+
assertThat(result).isTrue();
28+
}
29+
30+
private Review createReview(Long applyId, UUID volunteerId, String title) {
31+
return Review.builder()
32+
.volunteerApplyId(applyId)
33+
.volunteerId(volunteerId)
34+
.title(title)
35+
.content("내용내용")
36+
.imgUrl("이미지링크")
37+
.build();
38+
}
39+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.somemore.domains.review.service;
2+
3+
import com.somemore.domains.review.domain.Review;
4+
import com.somemore.domains.review.repository.ReviewRepository;
5+
import com.somemore.global.exception.NoSuchElementException;
6+
import com.somemore.support.IntegrationTestSupport;
7+
import org.junit.jupiter.api.DisplayName;
8+
import org.junit.jupiter.api.Test;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.transaction.annotation.Transactional;
11+
12+
import java.util.Optional;
13+
import java.util.UUID;
14+
15+
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_REVIEW;
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
18+
19+
@Transactional
20+
class DeleteReviewServiceTest extends IntegrationTestSupport {
21+
22+
@Autowired
23+
private DeleteReviewService deleteReviewService;
24+
25+
@Autowired
26+
private ReviewRepository reviewRepository;
27+
28+
@DisplayName("리뷰 아이디와 작성자 아이디로 리뷰를 삭제할 수 있다.")
29+
@Test
30+
void deleteReview() {
31+
// given
32+
UUID volunteerId = UUID.randomUUID();
33+
String title = "리뷰 제목";
34+
String content = "리뷰 내용";
35+
String imgUrl = "리뷰 이미지";
36+
37+
Review review = createReview(volunteerId, title, content, imgUrl);
38+
reviewRepository.save(review);
39+
40+
// when
41+
deleteReviewService.deleteReview(volunteerId, review.getId());
42+
43+
// then
44+
Optional<Review> findReview = reviewRepository.findById(review.getId());
45+
assertThat(findReview).isEmpty();
46+
}
47+
48+
@DisplayName("존재하지 않는 리뷰를 삭제하려고 하는 경우 에러가 발생한다")
49+
@Test
50+
void deleteReviewWhenDoesNotExist() {
51+
// given
52+
UUID volunteerId = UUID.randomUUID();
53+
Long wrongId = 999L;
54+
55+
// when
56+
// then
57+
assertThatThrownBy(
58+
() -> deleteReviewService.deleteReview(volunteerId, wrongId))
59+
.isInstanceOf(NoSuchElementException.class)
60+
.hasMessage(NOT_EXISTS_REVIEW.getMessage());
61+
}
62+
63+
private Review createReview(UUID volunteerId, String title, String content, String imgUrl) {
64+
return Review.builder()
65+
.volunteerApplyId(1L)
66+
.volunteerId(volunteerId)
67+
.title(title)
68+
.content(content)
69+
.imgUrl(imgUrl)
70+
.build();
71+
}
72+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.somemore.domains.review.service.validator;
2+
3+
import com.somemore.domains.review.domain.Review;
4+
import com.somemore.global.exception.BadRequestException;
5+
import org.junit.jupiter.api.DisplayName;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.util.UUID;
9+
10+
import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_REVIEW;
11+
import static org.assertj.core.api.Assertions.assertThatCode;
12+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
13+
14+
class ReviewValidatorTest {
15+
16+
private final ReviewValidator reviewValidator = new ReviewValidator();
17+
18+
@DisplayName("리뷰 작성자인지 검증할 수 있다")
19+
@Test
20+
void validateAuthor() {
21+
// given
22+
UUID volunteerId = UUID.randomUUID();
23+
Review review = createReview(volunteerId, "리뷰 제목", "내용내용", "이미지링크");
24+
25+
// when
26+
// then
27+
assertThatCode(
28+
() -> reviewValidator.validateAuthor(review, volunteerId))
29+
.doesNotThrowAnyException();
30+
}
31+
32+
@DisplayName("리뷰 작성자와 일치 하지 않는 경우 에러가 발생한다.")
33+
@Test
34+
void validateAuthorWhenMissMatch() {
35+
// given
36+
UUID wrongVolunteerId = UUID.randomUUID();
37+
Review review = createReview(UUID.randomUUID(), "다른 제목", "다른 내용", "다른 링크");
38+
39+
// when
40+
// then
41+
assertThatThrownBy(
42+
() -> reviewValidator.validateAuthor(review, wrongVolunteerId))
43+
.isInstanceOf(BadRequestException.class)
44+
.hasMessage(UNAUTHORIZED_REVIEW.getMessage());
45+
}
46+
47+
private Review createReview(UUID volunteerId, String title, String content, String imgUrl) {
48+
return Review.builder()
49+
.volunteerApplyId(1L)
50+
.volunteerId(volunteerId)
51+
.title(title)
52+
.content(content)
53+
.imgUrl(imgUrl)
54+
.build();
55+
}
56+
}

0 commit comments

Comments
 (0)