diff --git a/src/main/java/ink/kindler/metasearch/persistent/projection/BookOverview.java b/src/main/java/ink/kindler/metasearch/persistent/projection/BookOverview.java index a1add55..6aa3eaa 100644 --- a/src/main/java/ink/kindler/metasearch/persistent/projection/BookOverview.java +++ b/src/main/java/ink/kindler/metasearch/persistent/projection/BookOverview.java @@ -5,4 +5,5 @@ public interface BookOverview { String getTitle(); String getAuthor(); String getCoverImageUrl(); + String getGoogleCoverImageUrl(); } diff --git a/src/main/java/ink/kindler/metasearch/persistent/repository/BookRepository.java b/src/main/java/ink/kindler/metasearch/persistent/repository/BookRepository.java index 5c83436..d7916c3 100644 --- a/src/main/java/ink/kindler/metasearch/persistent/repository/BookRepository.java +++ b/src/main/java/ink/kindler/metasearch/persistent/repository/BookRepository.java @@ -17,7 +17,8 @@ public interface BookRepository extends JpaRepository { SELECT b.id AS id, b.title AS title, b.author AS author, - b.coverImageUrl AS coverImageUrl + b.coverImageUrl AS coverImageUrl, + b.googleCoverImageUrl As googleCoverImageUrl FROM Book b WHERE b.provider = :provider AND (LOWER(b.author) LIKE LOWER(CONCAT('%', :query, '%')) diff --git a/src/main/java/ink/kindler/metasearch/rest/SearchController.java b/src/main/java/ink/kindler/metasearch/rest/SearchController.java index 2a425e9..360f8a1 100644 --- a/src/main/java/ink/kindler/metasearch/rest/SearchController.java +++ b/src/main/java/ink/kindler/metasearch/rest/SearchController.java @@ -7,10 +7,10 @@ import ink.kindler.metasearch.rest.model.BookResponse; import ink.kindler.metasearch.service.SearchService; import org.springframework.http.ResponseEntity; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Objects; @RestController @RequestMapping("/v1/books") @@ -43,7 +43,7 @@ private BookOverviewResponse convertToBookOverview(BookOverview bookOverview) { bookOverview.getId(), bookOverview.getTitle(), bookOverview.getAuthor(), - bookOverview.getCoverImageUrl() + StringUtils.hasLength(bookOverview.getCoverImageUrl()) ? bookOverview.getCoverImageUrl() : bookOverview.getGoogleCoverImageUrl() ); } @@ -52,7 +52,7 @@ private BookResponse convertToBookResponse(Book book) { book.getId(), book.getTitle(), book.getAuthor(), - Objects.isNull(book.getCoverImageUrl()) ? book.getGoogleCoverImageUrl() : book.getCoverImageUrl(), + StringUtils.hasLength(book.getCoverImageUrl()) ? book.getCoverImageUrl() : book.getGoogleCoverImageUrl(), book.getEpubUrl(), book.getKoboUrl(), book.getMobiUrl(), diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7af63f7..8148ccb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -16,4 +16,4 @@ standard-ebooks: gutenberg-australia: enabled: true - always-reindex: true \ No newline at end of file + always-reindex: false \ No newline at end of file diff --git a/src/test/java/ink/kindler/metasearch/rest/SearchControllerTest.java b/src/test/java/ink/kindler/metasearch/rest/SearchControllerTest.java index e50d18b..b482c2d 100644 --- a/src/test/java/ink/kindler/metasearch/rest/SearchControllerTest.java +++ b/src/test/java/ink/kindler/metasearch/rest/SearchControllerTest.java @@ -6,6 +6,8 @@ import ink.kindler.metasearch.persistent.projection.BookOverview; import ink.kindler.metasearch.service.SearchService; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.test.context.bean.override.mockito.MockitoBean; @@ -79,8 +81,8 @@ class SearchControllerTest { @Test void shouldSearchBookByQuery() throws Exception { when(searchService.search(Provider.STANDARD_EBOOKS, "Mark")).thenReturn(List.of( - stubBookOverview(1L, "The Adventures of Tom Sawyer", "Mark Twain"), - stubBookOverview(2L, "The Mark of Zorro", "Johnston McCulley") + stubBookOverview(1L, "The Adventures of Tom Sawyer", "Mark Twain", null, "https://coverimageurl.com"), + stubBookOverview(2L, "The Mark of Zorro", "Johnston McCulley", "https://coverimageurl.com", null) )); mockMvc.perform(get("/v1/books/search") @@ -110,9 +112,10 @@ void shouldSearchBookById() throws Exception { .andExpect(content().json(BOOK_BY_ID_RESPONSE)); } - @Test - void shouldReturnBookWithGoogleCoverImageWhenActualCoverImageIsNotPresent() throws Exception { - when(searchService.findBookById(1L)).thenReturn(Optional.of(stubBook(null))); + @ParameterizedTest + @CsvSource(value = {"null","''"}, nullValues = "null") + void shouldReturnBookWithGoogleCoverImageWhenActualCoverImageIsNotPresent(String coverImage) throws Exception { + when(searchService.findBookById(1L)).thenReturn(Optional.of(stubBook(coverImage))); mockMvc.perform(get("/v1/books/1")) .andDo(print()) @@ -157,7 +160,7 @@ private BookSummary stubBookSummary(Book book) { return bookSummary; } - private BookOverview stubBookOverview(Long id, String title, String author) { + private BookOverview stubBookOverview(Long id, String title, String author, String coverImage, String googleCoverImage) { return new BookOverview() { @Override public Long getId() { @@ -176,7 +179,12 @@ public String getAuthor() { @Override public String getCoverImageUrl() { - return "https://coverimageurl.com"; + return coverImage; + } + + @Override + public String getGoogleCoverImageUrl() { + return googleCoverImage; } }; }