Skip to content

Commit

Permalink
test: TalkRoom Comment 수정 API 테스트 코드 작성 (#38)
Browse files Browse the repository at this point in the history
  • Loading branch information
AHNYUNKI committed Mar 25, 2024
1 parent 40f9049 commit 7dff020
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/test/java/com/jisungin/api/comment/CommentControllerTest.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.jisungin.api.comment;

import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.jisungin.ControllerTestSupport;
import com.jisungin.api.comment.request.CommentCreateRequest;
import com.jisungin.api.comment.request.CommentEditRequest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -51,4 +53,24 @@ void writeCommentWithEmptyContent() throws Exception {
.andExpect(jsonPath("$.message").value("내용은 필수 입니다."));
}

@Test
@DisplayName("의견을 작성한 유저가 자신의 의견을 수정할 수 있다.")
void editComment() throws Exception {
// given
CommentEditRequest request = CommentEditRequest.builder()
.content("의견 수정")
.build();

// when // then
mockMvc.perform(patch("/v1/talk-rooms/comments/1")
.content(objectMapper.writeValueAsString(request))
.contentType(APPLICATION_JSON)
)
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value("200"))
.andExpect(jsonPath("$.status").value("OK"))
.andExpect(jsonPath("$.message").value("OK"));
}

}
113 changes: 113 additions & 0 deletions src/test/java/com/jisungin/application/comment/CommentServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.jisungin.application.comment;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

import com.jisungin.ServiceTestSupport;
import com.jisungin.application.comment.request.CommentCreateServiceRequest;
import com.jisungin.application.comment.request.CommentEditServiceRequest;
import com.jisungin.application.comment.response.CommentResponse;
import com.jisungin.domain.ReadingStatus;
import com.jisungin.domain.book.Book;
import com.jisungin.domain.book.repository.BookRepository;
import com.jisungin.domain.comment.Comment;
import com.jisungin.domain.comment.repository.CommentRepository;
import com.jisungin.domain.oauth.OauthId;
import com.jisungin.domain.oauth.OauthType;
Expand All @@ -17,6 +20,7 @@
import com.jisungin.domain.talkroom.repository.TalkRoomRoleRepository;
import com.jisungin.domain.user.User;
import com.jisungin.domain.user.repository.UserRepository;
import com.jisungin.exception.BusinessException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -81,6 +85,115 @@ void writeComment() {
.contains("의견 남기기", "[email protected]");
}

@Test
@DisplayName("의견을 작성한 유저가 의견을 수정한다.")
void editComment() {
// given
User user = createUser();
userRepository.save(user);

Book book = createBook();
bookRepository.save(book);

TalkRoom talkRoom = createTalkRoom(book, user);
talkRoomRepository.save(talkRoom);

createTalkRoomRole(talkRoom);

Comment comment = createComment(user, talkRoom);
commentRepository.save(comment);

CommentEditServiceRequest request = CommentEditServiceRequest.builder()
.content("의견 수정")
.build();

// when
CommentResponse response = commentService.editComment(talkRoom.getId(), request, user.getId());

// then
assertThat(response)
.extracting("content", "userName")
.contains("의견 수정", "[email protected]");
}

@Test
@DisplayName("의견을 작성한 유저가 의견을 NULL로 보내면 원래 작성 했던 의견이 반영된다.")
void editCommentWithNullContent() {
// given
User user = createUser();
userRepository.save(user);

Book book = createBook();
bookRepository.save(book);

TalkRoom talkRoom = createTalkRoom(book, user);
talkRoomRepository.save(talkRoom);

createTalkRoomRole(talkRoom);

Comment comment = createComment(user, talkRoom);
commentRepository.save(comment);

CommentEditServiceRequest request = CommentEditServiceRequest.builder()
.build();

// when
CommentResponse response = commentService.editComment(talkRoom.getId(), request, user.getId());

// then
assertThat(response)
.extracting("content", "userName")
.contains("의견", "[email protected]");
}

@Test
@DisplayName("의견을 작성한 유저(userA)가 아닌 다른 유저(userB)가 의견에 대해 수정을 할 수 없다.")
void editCommentWithUserB() {
// given
User userA = createUser();
userRepository.save(userA);

User userB = User.builder()
.name("[email protected]")
.profileImage("image")
.oauthId(
OauthId.builder()
.oauthId("oauthId2")
.oauthType(OauthType.KAKAO)
.build()
)
.build();
userRepository.save(userB);

Book book = createBook();
bookRepository.save(book);

TalkRoom talkRoom = createTalkRoom(book, userA);
talkRoomRepository.save(talkRoom);

createTalkRoomRole(talkRoom);

Comment comment = createComment(userA, talkRoom);
commentRepository.save(comment);

CommentEditServiceRequest request = CommentEditServiceRequest.builder()
.content("의견 수정")
.build();

// when // then
assertThatThrownBy(() -> commentService.editComment(talkRoom.getId(), request, userB.getId()))
.isInstanceOf(BusinessException.class)
.hasMessage("권한이 없는 사용자입니다.");
}

private static Comment createComment(User user, TalkRoom talkRoom) {
return Comment.builder()
.content("의견")
.user(user)
.talkRoom(talkRoom)
.build();
}

private void createTalkRoomRole(TalkRoom talkRoom) {
List<String> request = new ArrayList<>();
request.add("읽는 중");
Expand Down

0 comments on commit 7dff020

Please sign in to comment.