diff --git a/include/library.h b/include/library.h index 5ed1d5cbc..3c79fed0e 100644 --- a/include/library.h +++ b/include/library.h @@ -208,7 +208,7 @@ class Library * * @return A list of bookmarks */ - const std::vector& getBookmarks() { return m_bookmarks; } + const std::vector getBookmarks(bool onlyValidBookmarks = true); /** * Get all book ids of the books in the library. diff --git a/src/library.cpp b/src/library.cpp index 446b5508f..46f1e86be 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -184,6 +184,21 @@ std::vector Library::getBooksPublishers() return booksPublishers; } +const std::vector Library::getBookmarks(bool onlyValidBookmarks) +{ + if (!onlyValidBookmarks) { + return m_bookmarks; + } + std::vector validBookmarks; + auto booksId = getBooksIds(); + for(auto& bookmark:m_bookmarks) { + if (std::find(booksId.begin(), booksId.end(), bookmark.getBookId()) != booksId.end()) { + validBookmarks.push_back(bookmark); + } + } + return validBookmarks; +} + std::vector Library::getBooksIds() { std::vector bookIds; diff --git a/test/library.cpp b/test/library.cpp index 4ff2afb72..610470fa9 100644 --- a/test/library.cpp +++ b/test/library.cpp @@ -180,6 +180,7 @@ const char * sampleOpdsStream = R"( #include "../include/library.h" #include "../include/manager.h" +#include "../include/bookmark.h" namespace { @@ -191,9 +192,34 @@ class LibraryTest : public ::testing::Test { manager.readOpds(sampleOpdsStream, "foo.urlHost"); } + kiwix::Bookmark createBookmark(const std::string &id) { + kiwix::Bookmark bookmark; + bookmark.setBookId(id); + return bookmark; + }; + kiwix::Library lib; }; +TEST_F(LibraryTest, getBookMarksTest) +{ + auto bookId1 = lib.getBooksIds()[0]; + auto bookId2 = lib.getBooksIds()[1]; + + lib.addBookmark(createBookmark(bookId1)); + lib.addBookmark(createBookmark("invalid-bookmark-id")); + lib.addBookmark(createBookmark(bookId2)); + auto onlyValidBookmarks = lib.getBookmarks(); + auto allBookmarks = lib.getBookmarks(false); + + EXPECT_EQ(onlyValidBookmarks[0].getBookId(), bookId1); + EXPECT_EQ(onlyValidBookmarks[1].getBookId(), bookId2); + + EXPECT_EQ(allBookmarks[0].getBookId(), bookId1); + EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-bookmark-id"); + EXPECT_EQ(allBookmarks[2].getBookId(), bookId2); +} + TEST_F(LibraryTest, sanityCheck) { EXPECT_EQ(lib.getBookCount(true, true), 10U);