diff --git a/src/test/java/com/jisungin/api/talkroom/TalkRoomControllerTest.java b/src/test/java/com/jisungin/api/talkroom/TalkRoomControllerTest.java index 351d274..e4da65f 100644 --- a/src/test/java/com/jisungin/api/talkroom/TalkRoomControllerTest.java +++ b/src/test/java/com/jisungin/api/talkroom/TalkRoomControllerTest.java @@ -1,6 +1,7 @@ package com.jisungin.api.talkroom; 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.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -188,4 +189,18 @@ void findOneTalkRoom() throws Exception { .andExpect(jsonPath("$.message").value("OK")); } + @Test + @DisplayName("토크방을 삭제한다.") + void deleteTalkRoom() throws Exception { + // when // then + mockMvc.perform(delete("/v1/talk-rooms/1") + .contentType(APPLICATION_JSON) + ) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value("200")) + .andExpect(jsonPath("$.status").value("OK")) + .andExpect(jsonPath("$.message").value("OK")); + } + } \ No newline at end of file diff --git a/src/test/java/com/jisungin/application/service/talkroom/TalkRoomServiceTest.java b/src/test/java/com/jisungin/application/service/talkroom/TalkRoomServiceTest.java index 03909fd..383e5f7 100644 --- a/src/test/java/com/jisungin/application/service/talkroom/TalkRoomServiceTest.java +++ b/src/test/java/com/jisungin/application/service/talkroom/TalkRoomServiceTest.java @@ -453,11 +453,7 @@ void findOneTalkRoom() { createTalkRoomRole(talkRoom); - Comment comment = Comment.builder() - .talkRoom(talkRoom) - .user(user) - .content("의견 남기기") - .build(); + Comment comment = createComment(talkRoom, user); commentRepository.save(comment); // when @@ -470,17 +466,6 @@ void findOneTalkRoom() { assertThat("user@gmail.com").isEqualTo(findOneTalkRoomResponse.getComments().get(0).getUserName()); } - private void createTalkRoomRole(TalkRoom talkRoom) { - List request = new ArrayList<>(); - request.add("읽는 중"); - request.add("읽음"); - - List readingStatus = ReadingStatus.createReadingStatus(request); - - readingStatus.stream().map(status -> TalkRoomRole.roleCreate(talkRoom, status)) - .forEach(talkRoomRoleRepository::save); - } - @Test @DisplayName("토크방을 단건 조회 했을 때 의견이 담기지 않았아도 조회는 정상적으로 되어야 한다.") void findOneTalkRoomWithCommentNull() { @@ -539,6 +524,111 @@ void findOneTalkRoomWithFindAllComment() { assertThat("의견 19").isEqualTo(findOneTalkRoomResponse.getComments().get(19).getContent()); } + @Test + @DisplayName("토크방을 생성한 유저가 토크방을 삭제한다.") + void deleteTalkRoom() { + // 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(talkRoom, user); + + commentRepository.save(comment); + + // when + talkRoomService.deleteTalkRoom(talkRoom.getId(), user.getId()); + + // then + assertThat(0).isEqualTo(talkRoomRepository.findAll().size()); + assertThat(0).isEqualTo(commentRepository.findAll().size()); + } + + @Test + @DisplayName("토크방을 생성하지 않은 유저(UserB)가 다른 유저(UserA)가 생성한 토크방을 삭제할 수 없다.") + void deleteTalkRoomWithUserB() { + // given + User userA = createUser(); + userRepository.save(userA); + + User userB = User.builder() + .name("userB@gmail.com") + .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(talkRoom, userA); + + commentRepository.save(comment); + + // when // then + assertThatThrownBy(() -> talkRoomService.deleteTalkRoom(talkRoom.getId(), userB.getId())) + .isInstanceOf(BusinessException.class) + .hasMessage("권한이 없는 사용자입니다."); + } + + @Test + @DisplayName("토크방을 삭제할 때 의견이 없어도 정상적으로 삭제가 된다.") + void deleteTalkRoomWithComment() { + // given + User user = createUser(); + userRepository.save(user); + + Book book = createBook(); + bookRepository.save(book); + + TalkRoom talkRoom = createTalkRoom(book, user); + talkRoomRepository.save(talkRoom); + + createTalkRoomRole(talkRoom); + + // when + talkRoomService.deleteTalkRoom(talkRoom.getId(), user.getId()); + + // then + assertThat(0).isEqualTo(talkRoomRepository.findAll().size()); + } + + private static Comment createComment(TalkRoom talkRoom, User user) { + return Comment.builder() + .talkRoom(talkRoom) + .user(user) + .content("의견 남기기") + .build(); + } + + private void createTalkRoomRole(TalkRoom talkRoom) { + List request = new ArrayList<>(); + request.add("읽는 중"); + request.add("읽음"); + + List readingStatus = ReadingStatus.createReadingStatus(request); + + readingStatus.stream().map(status -> TalkRoomRole.roleCreate(talkRoom, status)) + .forEach(talkRoomRoleRepository::save); + } + private static TalkRoom createTalkRoom(Book book, User user) { return TalkRoom.builder() .book(book)