Skip to content

Commit

Permalink
test: 책 관련된 토크룸 조회 API 테스트 추가 (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
jwooo committed Apr 7, 2024
1 parent e5db643 commit 4a85001
Show file tree
Hide file tree
Showing 2 changed files with 153 additions and 3 deletions.
20 changes: 20 additions & 0 deletions src/test/java/com/jisungin/api/book/BookControllerTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.jisungin.api.book;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
Expand All @@ -11,11 +13,16 @@

import com.jisungin.ControllerTestSupport;
import com.jisungin.api.book.request.BookCreateRequest;
import com.jisungin.application.PageResponse;
import com.jisungin.application.book.request.BookServicePageRequest;
import com.jisungin.application.book.response.BestSellerResponse;
import com.jisungin.application.book.response.BookRelatedTalkRoomPageResponse;
import com.jisungin.application.book.response.BookRelatedTalkRoomResponse;
import com.jisungin.application.book.response.BookResponse;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -50,6 +57,19 @@ public void getBestSellers() throws Exception {
.andExpect(jsonPath("$.message").value("OK"));
}

@Test
@DisplayName("책과 연관된 토크룸을 조회한다.")
public void getTalkRoomsRelatedBook() throws Exception {
// when // then
mockMvc.perform(get("/v1/books/00001/talk-rooms?page=1&size=10")
.accept(APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value("200"))
.andExpect(jsonPath("$.status").value("OK"))
.andExpect(jsonPath("$.message").value("OK"))
.andDo(print());
}

@Test
@DisplayName("신규 도서를 등록한다.")
public void createBook() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,30 @@
import com.jisungin.ServiceTestSupport;
import com.jisungin.application.book.BookService;
import com.jisungin.application.book.request.BookCreateServiceRequest;
import com.jisungin.application.book.request.BookServicePageRequest;
import com.jisungin.application.book.response.BookRelatedTalkRoomPageResponse;
import com.jisungin.application.book.response.BookResponse;
import com.jisungin.domain.ReadingStatus;
import com.jisungin.domain.book.Book;
import com.jisungin.domain.book.repository.BestSellerRepository;
import com.jisungin.domain.book.repository.BookRepository;
import com.jisungin.domain.oauth.OauthId;
import com.jisungin.domain.oauth.OauthType;
import com.jisungin.domain.talkroom.TalkRoom;
import com.jisungin.domain.talkroom.TalkRoomRole;
import com.jisungin.domain.talkroom.repository.TalkRoomRepository;
import com.jisungin.domain.talkroom.repository.TalkRoomRoleRepository;
import com.jisungin.domain.talkroomlike.TalkRoomLike;
import com.jisungin.domain.talkroomlike.repository.TalkRoomLikeRepository;
import com.jisungin.domain.user.User;
import com.jisungin.domain.user.repository.UserRepository;
import com.jisungin.exception.BusinessException;
import com.jisungin.infra.crawler.Crawler;
import com.jisungin.infra.crawler.CrawlingBook;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand All @@ -29,14 +45,27 @@ public class BookServiceTest extends ServiceTestSupport {
@Autowired
private BookRepository bookRepository;

@MockBean
private BestSellerRepository bestSellerRepository;
@Autowired
private TalkRoomRepository talkRoomRepository;

@Autowired
private TalkRoomRoleRepository talkRoomRoleRepository;

@Autowired
private TalkRoomLikeRepository talkRoomLikeRepository;

@Autowired
private UserRepository userRepository;

@MockBean
private Crawler crawler;

@AfterEach
void tearDown() {
talkRoomLikeRepository.deleteAllInBatch();
talkRoomRoleRepository.deleteAllInBatch();
talkRoomRepository.deleteAllInBatch();
userRepository.deleteAllInBatch();
bookRepository.deleteAllInBatch();
}

Expand Down Expand Up @@ -70,6 +99,82 @@ public void getBookWithInvalidIsbn() {
.hasMessage("책을 찾을 수 없습니다.");
}

@Test
@DisplayName("책과 관련된 토크룸 정보를 가져온다.")
public void getTalkRoomRelatedBook() {
// given
List<User> users = userRepository.saveAll(createUsers());

Book book = bookRepository.save(createBookWithIsbn("00001"));
Book anotherBook = bookRepository.save(createBookWithIsbn("00002"));

List<TalkRoom> talkRoomsWithBook = talkRoomRepository.saveAll(createTalkRooms(users.get(0), book));
List<TalkRoom> talkRoomsWithAnotherBook = talkRoomRepository.saveAll(
createTalkRooms(users.get(0), anotherBook));

talkRoomsWithBook.forEach(this::createTalkRoomRole);
talkRoomsWithAnotherBook.forEach(this::createTalkRoomRole);

List<TalkRoomLike> likes1 = talkRoomLikeRepository.saveAll(
createTalkRoomLikes(users, talkRoomsWithBook.get(0), 10));
List<TalkRoomLike> likes2 = talkRoomLikeRepository.saveAll(
createTalkRoomLikes(users, talkRoomsWithAnotherBook.get(0), 9));

BookServicePageRequest request = BookServicePageRequest.builder()
.page(1)
.size(5)
.build();

// when
BookRelatedTalkRoomPageResponse responses = bookService.getBookRelatedTalkRooms(book.getIsbn(),
request, users.get(0).getId());

// then
assertThat(responses.getResponse().getSize()).isEqualTo(5);
assertThat(responses.getResponse().getTotalCount()).isEqualTo(10);
assertThat(responses.getResponse().getQueryResponse().size()).isEqualTo(5);
assertThat(responses.getResponse().getQueryResponse().get(0).getLikeCount()).isEqualTo(10);
assertThat(responses.getResponse().getQueryResponse().get(1).getLikeCount()).isEqualTo(0);
assertThat(responses.getUserLikeTalkRoomIds().size()).isEqualTo(1);
assertThat(responses.getUserLikeTalkRoomIds().get(0)).isEqualTo(1);
}

@NotNull
private static List<TalkRoomLike> createTalkRoomLikes(List<User> users, TalkRoom talkRoom, Integer endIndex) {
return IntStream.range(0, endIndex).mapToObj(i -> TalkRoomLike.builder()
.user(users.get(i))
.talkRoom(talkRoom)
.build())
.toList();
}

@NotNull
private static List<TalkRoom> createTalkRooms(User user, Book book) {
return IntStream.range(0, 10)
.mapToObj(i -> TalkRoom.builder()
.user(user)
.book(book)
.title("토론방" + i)
.content("내용" + i)
.build())
.toList();
}

@NotNull
private static List<User> createUsers() {
return IntStream.range(0, 10)
.mapToObj(i -> User.builder()
.name("[email protected] " + i)
.profileImage("image")
.oauthId(
OauthId.builder()
.oauthId("oauthId " + i)
.oauthType(OauthType.KAKAO)
.build()
)
.build()).toList();
}

@Test
@DisplayName("도서 정보에 대한 책을 생성한다.")
public void createBook() {
Expand Down Expand Up @@ -140,4 +245,29 @@ private static Book create() {
.build();
}

private static Book createBookWithIsbn(String isbn) {
return Book.builder()
.title("제목" + isbn)
.content("내용" + isbn)
.authors("작가")
.isbn(isbn)
.publisher("publisher")
.dateTime(LocalDateTime.now())
.imageUrl("www.image.com/" + isbn)
.thumbnail("www.thumbnail.com/" + isbn)
.build();
}

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

List<ReadingStatus> readingStatuses = List.of(ReadingStatus.READING, ReadingStatus.READ);

readingStatuses.stream()
.map(status -> TalkRoomRole.roleCreate(talkRoom, status))
.forEach(talkRoomRoleRepository::save);
}

}

0 comments on commit 4a85001

Please sign in to comment.