From c9a15c99612695cd6abe507372107b1114efdfaa Mon Sep 17 00:00:00 2001 From: luddens Date: Sat, 28 Sep 2019 21:50:19 +0200 Subject: [PATCH 1/2] Add a parameter to getBookmarks fct to get valid bookmarks only The default value of this parameter is false, in this case all the bookmarks are returned, otherwise only those who are related to books of the library. --- include/library.h | 2 +- src/library.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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; From bd6797143cdbb7618080f33515f3c8571b774931 Mon Sep 17 00:00:00 2001 From: luddens Date: Thu, 31 Oct 2019 14:04:58 +0200 Subject: [PATCH 2/2] add getBookmarks test --- test/library.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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);