From a546effa15aad4e39d6d1bc77e40c345a513c303 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Tue, 16 Jan 2024 17:15:02 +0100 Subject: [PATCH] Allow bookmark to be created from a Book and url/title. --- include/bookmark.h | 12 +++++++++++ src/bookmark.cpp | 12 +++++++++++ test/library.cpp | 53 ++++++++++++++++++++++++++++++++++------------ 3 files changed, 64 insertions(+), 13 deletions(-) diff --git a/include/bookmark.h b/include/bookmark.h index 456fef0f8..a76dac50a 100644 --- a/include/bookmark.h +++ b/include/bookmark.h @@ -29,13 +29,25 @@ class xml_node; namespace kiwix { +class Book; /** * A class to store information about a bookmark (an article in a book) */ class Bookmark { public: + /** + * Create an empty bookmark. + * + * Bookmark must be populated with `set*` methods + */ Bookmark(); + + /** + * Create a bookmark given a Book, a path and a title. + */ + Bookmark(const Book& book, const std::string& path, const std::string& title); + ~Bookmark(); void updateFromXml(const pugi::xml_node& node); diff --git a/src/bookmark.cpp b/src/bookmark.cpp index 6bfe79bbb..918db2125 100644 --- a/src/bookmark.cpp +++ b/src/bookmark.cpp @@ -18,6 +18,7 @@ */ #include "bookmark.h" +#include "book.h" #include @@ -28,6 +29,17 @@ Bookmark::Bookmark() { } +Bookmark::Bookmark(const Book& book, const std::string& path, const std::string& title): + m_bookId(book.getId()), + m_bookTitle(book.getTitle()), + m_bookName(book.getName()), + m_bookFlavour(book.getFlavour()), + m_url(path), + m_title(title), + m_language(book.getCommaSeparatedLanguages()), + m_date(book.getDate()) +{} + /* Destructor */ Bookmark::~Bookmark() { diff --git a/test/library.cpp b/test/library.cpp index c684e1d68..f75a4dae9 100644 --- a/test/library.cpp +++ b/test/library.cpp @@ -20,7 +20,6 @@ #include "gtest/gtest.h" #include - const char * sampleOpdsStream = R"( lib; }; +TEST_F(LibraryTest, createBookMark) +{ + auto bookId = "0c45160e-f917-760a-9159-dfe3c53cdcdd"; + auto book = lib->getBookById(bookId); + + auto bookmark = createBookmark(book, "/a/url", "A title"); + + EXPECT_EQ(bookmark.getUrl(), "/a/url"); + EXPECT_EQ(bookmark.getTitle(), "A title"); + EXPECT_EQ(bookmark.getBookId(), bookId); + EXPECT_EQ(bookmark.getBookName(), book.getName()); + EXPECT_EQ(bookmark.getBookName(), "wikipedia_fr_tunisie"); + EXPECT_EQ(bookmark.getBookTitle(), book.getTitle()); + EXPECT_EQ(bookmark.getDate(), book.getDate()); + EXPECT_EQ(bookmark.getBookFlavour(), book.getFlavour()); + EXPECT_EQ(bookmark.getLanguage(), book.getCommaSeparatedLanguages()); +} + TEST_F(LibraryTest, getBookMarksTest) { - auto bookId1 = lib->getBooksIds()[0]; - auto bookId2 = lib->getBooksIds()[1]; + auto bookId1 = "0c45160e-f917-760a-9159-dfe3c53cdcdd"; + auto bookId2 = "0189d9be-2fd0-b4b6-7300-20fab0b5cdc8"; - lib->addBookmark(createBookmark(bookId1)); + auto book1 = lib->getBookById(bookId1); + auto book2 = lib->getBookById(bookId2); + + lib->addBookmark(createBookmark(book1)); lib->addBookmark(createBookmark("invalid-book-id")); - lib->addBookmark(createBookmark(bookId2)); + lib->addBookmark(createBookmark(book2)); auto onlyValidBookmarks = lib->getBookmarks(); auto allBookmarks = lib->getBookmarks(false); @@ -374,9 +400,10 @@ TEST_F(LibraryTest, bookmarksSerializationTest) auto book1 = lib->getBookById(bookId1); auto book2 = lib->getBookById(bookId2); + // Create bookmarks using three different ways. lib->addBookmark(createBookmark(bookId1, "a/url", "Article title1")); lib->addBookmark(createBookmark("invalid-book-id", "another/url", "Unknown title")); - lib->addBookmark(createBookmark(bookId2, "a/url/2", "Article title2")); + lib->addBookmark(createBookmark(book2, "a/url/2", "Article title2")); lib->writeBookmarksToFile("__test__bookmarks.xml");