From c8944a1b2d520f5c23e9991f62e1d008aaf48845 Mon Sep 17 00:00:00 2001 From: jwooo Date: Sat, 1 Jun 2024 21:20:24 +0900 Subject: [PATCH] =?UTF-8?q?test:=20BestSellerRepository=20Zset=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9E=90=EB=A3=8C=EA=B5=AC=EC=A1=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95=20(#115)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/BestSellerServiceTest.java | 34 ++++++-------- .../application/book/BookServiceTest.java | 4 +- .../docs/book/BookControllerDocsTest.java | 45 ++++++++++--------- 3 files changed, 39 insertions(+), 44 deletions(-) diff --git a/src/test/java/com/jisungin/application/book/BestSellerServiceTest.java b/src/test/java/com/jisungin/application/book/BestSellerServiceTest.java index 37cfbef..2be2824 100644 --- a/src/test/java/com/jisungin/application/book/BestSellerServiceTest.java +++ b/src/test/java/com/jisungin/application/book/BestSellerServiceTest.java @@ -7,23 +7,21 @@ import static org.mockito.Mockito.when; import com.jisungin.RedisTestContainer; +import com.jisungin.application.OffsetLimit; import com.jisungin.application.PageResponse; -import com.jisungin.application.book.BestSellerService; import com.jisungin.application.book.event.BestSellerUpdatedEvent; import com.jisungin.application.book.event.BestSellerUpdatedEventListener; -import com.jisungin.application.book.request.BookServicePageRequest; -import com.jisungin.application.book.response.BestSellerResponse; +import com.jisungin.application.book.response.BookWithRankingResponse; import com.jisungin.domain.book.repository.BestSellerRedisRepository; import com.jisungin.domain.book.repository.BookRepository; +import com.jisungin.infra.crawler.CrawledBook; import com.jisungin.infra.crawler.Crawler; -import com.jisungin.infra.crawler.CrawlingBook; import com.jisungin.infra.s3.S3FileManager; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.IntStream; -import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -35,7 +33,6 @@ @SpringBootTest @RecordApplicationEvents -@Slf4j public class BestSellerServiceTest extends RedisTestContainer { @Autowired @@ -68,15 +65,12 @@ public void tearDown() { @DisplayName("베스트 셀러 페이지를 조회한다.") public void getBestSellers() { // given - Map bestSellers = createSampleBestSellers(); - - bestSellerRedisRepository.updateAll(bestSellers); + bestSellerRedisRepository.updateAll(createCrawledBookMap()); // when - PageResponse result = bestSellerService.getBestSellers(BookServicePageRequest.builder() - .page(1) - .size(5) - .build()); + PageResponse result = bestSellerService.getBestSellers(OffsetLimit + .ofRange(1, 5)); + // then assertThat(result.getSize()).isEqualTo(5); assertThat(result.getTotalCount()).isEqualTo(6); @@ -95,15 +89,15 @@ public void getBestSellers() { @DisplayName("베스트 셀러를 갱신 한다.") public void updateBestSellers() { // given - Map bestSellers = createSampleBestSellers(); + Map crawledBookMap = createCrawledBookMap(); - when(crawler.crawlBestSellerBook()).thenReturn(bestSellers); + when(crawler.crawlBestSellerBook()).thenReturn(crawledBookMap); // when bestSellerService.updateBestSellers(); // then - List bookResponses = bestSellerRedisRepository.findAll(); + List bookResponses = bestSellerRedisRepository.findAll(); assertThat(bookResponses.size()).isEqualTo(6); assertThat(bookResponses).extracting("title", "isbn", "publisher", "authors") @@ -121,8 +115,8 @@ public void updateBestSellers() { @DisplayName("베스트 셀러를 갱신하면 DB에 새로 등록된 책을 저장하는 이벤트가 발생한다.") public void updateBestSellerEventRaised() { // given - Map bestSellers = createSampleBestSellers(); - when(crawler.crawlBestSellerBook()).thenReturn(bestSellers); + Map crawledBookMap = createCrawledBookMap(); + when(crawler.crawlBestSellerBook()).thenReturn(crawledBookMap); // when bestSellerService.updateBestSellers(); @@ -131,11 +125,11 @@ public void updateBestSellerEventRaised() { verify(eventEventListener).handleBestSellerUpdatedEvent(any(BestSellerUpdatedEvent.class)); } - private static Map createSampleBestSellers() { + private static Map createCrawledBookMap() { return IntStream.rangeClosed(1, 6) .boxed() .collect(Collectors.toMap(Long::valueOf, - i -> CrawlingBook.of("title" + i, "content" + i, "isbn" + i, + i -> CrawledBook.of("title" + i, "content" + i, "isbn" + i, "publisher" + i, "imageUrl" + i, "thumbnail" + i, "author" + i, LocalDateTime.of(2024, 1, 1, 0, 0)))); } diff --git a/src/test/java/com/jisungin/application/book/BookServiceTest.java b/src/test/java/com/jisungin/application/book/BookServiceTest.java index 07eb8c3..ef4dc53 100644 --- a/src/test/java/com/jisungin/application/book/BookServiceTest.java +++ b/src/test/java/com/jisungin/application/book/BookServiceTest.java @@ -24,7 +24,7 @@ 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 com.jisungin.infra.crawler.CrawledBook; import java.time.LocalDateTime; import java.util.List; import java.util.stream.IntStream; @@ -161,7 +161,7 @@ public void createBook() { .build(); when(crawler.crawlBook(request.getIsbn())) - .thenReturn(CrawlingBook.of("도서 제목", "도서 내용", "123456789X", "도서 출판사", + .thenReturn(CrawledBook.of("도서 제목", "도서 내용", "123456789X", "도서 출판사", "도서 imageUrl", "도서 썸네일", "도서 작가1,도서 작가2", registeredDateTime)); // when diff --git a/src/test/java/com/jisungin/docs/book/BookControllerDocsTest.java b/src/test/java/com/jisungin/docs/book/BookControllerDocsTest.java index 9a78feb..1bb50d2 100644 --- a/src/test/java/com/jisungin/docs/book/BookControllerDocsTest.java +++ b/src/test/java/com/jisungin/docs/book/BookControllerDocsTest.java @@ -26,14 +26,12 @@ import com.jisungin.api.book.BookController; import com.jisungin.api.book.request.BookCreateRequest; -import com.jisungin.api.book.request.BookPageRequest; import com.jisungin.application.OffsetLimit; import com.jisungin.application.PageResponse; import com.jisungin.application.book.BestSellerService; 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.BestSellerResponse; +import com.jisungin.application.book.response.BookWithRankingResponse; import com.jisungin.application.book.response.BookFindAllResponse; import com.jisungin.application.book.response.BookResponse; import com.jisungin.docs.RestDocsSupport; @@ -57,11 +55,13 @@ protected Object initController() { @Test @DisplayName("도서 단건 조회 API") public void getBook() throws Exception { + // given String isbn = "0000000000001"; given(bookService.getBook(anyString())) .willReturn(createBookResponseWithIsbn(isbn)); + // when // then mockMvc.perform(get("/v1/books/{isbn}", isbn) .accept(APPLICATION_JSON)) .andDo(print()) @@ -93,12 +93,14 @@ public void getBook() throws Exception { @Test @DisplayName("도서 페이징 조회 API") public void getBooks() throws Exception { - List queryResponse = createSimpleBookResponse(); - PageResponse response = PageResponse.of(queryResponse.size(), queryResponse.size(), - queryResponse); + // given + List response = createBookFindAllResponse(); + PageResponse pageResponse = PageResponse.of(response.size(), response.size(), + response); - given(bookService.getBooks(any(OffsetLimit.class))).willReturn(response); + given(bookService.getBooks(any(OffsetLimit.class))).willReturn(pageResponse); + // when // then mockMvc.perform(get("/v1/books") .param("page", "1") .param("size", "10") @@ -136,22 +138,19 @@ public void getBooks() throws Exception { @Test @DisplayName("베스트 셀러 조회 API") public void getBestSellers() throws Exception { - BookPageRequest params = BookPageRequest.builder() - .page(1) - .size(5) - .build(); - - List queryResponse = createBestSellerResponse(); + // given + List response = createBookWithRankingResponse(); - PageResponse response = PageResponse.of(queryResponse.size(), - queryResponse.size(), queryResponse); + PageResponse pageResponse = PageResponse.of(response.size(), + response.size(), response); - given(bestSellerService.getBestSellers(any(BookServicePageRequest.class))) - .willReturn(response); + given(bestSellerService.getBestSellers(any(OffsetLimit.class))) + .willReturn(pageResponse); + // when // then mockMvc.perform(get("/v1/books/best-seller") - .param("page", String.valueOf(params.getPage())) - .param("size", String.valueOf(params.getSize())) + .param("page", "1") + .param("size", "5") .accept(APPLICATION_JSON)) .andDo(print()) .andExpect(status().isOk()) @@ -184,6 +183,7 @@ public void getBestSellers() throws Exception { @Test @DisplayName("도서 생성 API") public void createBook() throws Exception { + // given BookCreateRequest request = BookCreateRequest.builder() .isbn("0000000000001") .title("book title") @@ -197,6 +197,7 @@ public void createBook() throws Exception { given(bookService.createBook(any(BookCreateServiceRequest.class))) .willReturn(createBookResponseWithIsbn(request.getIsbn())); + // when // then mockMvc.perform(post("/v1/books") .accept(APPLICATION_JSON) .contentType(APPLICATION_JSON) @@ -247,7 +248,7 @@ private BookResponse createBookResponseWithIsbn(String isbn) { .build(); } - private List createSimpleBookResponse() { + private List createBookFindAllResponse() { return IntStream.rangeClosed(1, 5) .mapToObj(i -> BookFindAllResponse.builder() .isbn("000000000000" + i) @@ -260,9 +261,9 @@ private List createSimpleBookResponse() { .toList(); } - private List createBestSellerResponse() { + private List createBookWithRankingResponse() { return LongStream.rangeClosed(1, 5) - .mapToObj(i -> BestSellerResponse.builder() + .mapToObj(i -> BookWithRankingResponse.builder() .ranking(i) .isbn("00000000000" + i) .title("book title" + i)