/* * Copyright (C) 2013 Tommi Maekitalo * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and * NON-INFRINGEMENT. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #include "gtest/gtest.h" #include const char * sampleOpdsStream = R"( 00000000-0000-0000-0000-000000000000 Encyclopédie de la Tunisie urn:uuid:0c45160e-f917-760a-9159-dfe3c53cdcdd /meta?name=favicon&content=wikipedia_fr_tunisie_novid_2018-10 2018-10-08T00:00::00:Z fra Le meilleur de Wikipédia sur la Tunisie wikipedia;novid;_ftindex Wikipedia Tania Louis urn:uuid:0d0bcd57-d3f6-cb22-44cc-a723ccb4e1b2 /meta?name=favicon&content=biologie-tout-compris_fr_all_2018-06 2018-06-23T00:00::00:Z fra Tania Louis videos youtube Tania Louis Wikiquote urn:uuid:0ea1cde6-441d-6c58-f2c7-21c2838e659f /meta?name=favicon&content=wikiquote_fr_all_nopic_2019-06 2019-06-05T00:00::00:Z fra Une page de Wikiquote, le recueil des citations libres. wikiquote;nopic Wikiquote Géographie par Wikipédia urn:uuid:1123e574-6eef-6d54-28fc-13e4caeae474 /meta?name=favicon&content=wikipedia_fr_geography_nopic_2019-06 2019-06-02T00:00::00:Z Une sélection d'articles de Wikipédia sur la géographie fra wikipedia;nopic Wikipedia Mathématiques urn:uuid:14829621-c490-c376-0792-9de558b57efa /meta?name=favicon&content=wikipedia_fr_mathematics_nopic_2019-05 2019-05-13T00:00::00:Z fra Une wikipedia;nopic Wikipedia Granblue Fantasy Wiki urn:uuid:006cbd1b-16d8-b00d-a584-c1ae110a94ed /meta?name=favicon&content=granbluefantasy_en_all_all_nopic_2018-10 2018-10-14T00:00::00:Z eng Granblue Fantasy Wiki gbf;nopic;_ftindex Wiki Movies & TV Stack Exchange urn:uuid:00f37b00-f4da-0675-995a-770f9c72903e /meta?name=favicon&content=movies.stackexchange.com_en_all_2019-02 2019-02-03T00:00::00:Z eng Q&A for movie and tv enthusiasts stackexchange;_ftindex Movies & TV Stack Exchange TED talks - Business urn:uuid:0189d9be-2fd0-b4b6-7300-20fab0b5cdc8 /meta?name=favicon&content=ted_en_business_2018-07 2018-07-23T00:00::00:Z eng Ideas worth spreading TED Mythology & Folklore Stack Exchange urn:uuid:028055ac-4acc-1d54-65e0-a96de45e1b22 /meta?name=favicon&content=mythology.stackexchange.com_en_all_2019-02 2019-02-03T00:00::00:Z eng Q&A for enthusiasts and scholars of mythology and folklore stackexchange;_ftindex Mythology & Folklore Stack Exchange Islam Stack Exchange urn:uuid:02e9c7ff-36fc-9c6e-6ac7-cd7085989029 /meta?name=favicon&content=islam.stackexchange.com_en_all_2019-01 2019-01-31T00:00::00:Z eng Q&A for Muslims, experts in Islam, and those interested in learning more about Islam stackexchange;_ftindex Islam Stack Exchange )"; #include "../include/library.h" #include "../include/manager.h" #include "../include/bookmark.h" namespace { class LibraryTest : public ::testing::Test { protected: void SetUp() override { kiwix::Manager manager(&lib); 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); EXPECT_EQ(lib.getBooksLanguages().size(), 2U); EXPECT_EQ(lib.getBooksCreators().size(), 8U); EXPECT_EQ(lib.getBooksPublishers().size(), 1U); } TEST_F(LibraryTest, filterCheck) { auto bookIds = lib.filter(kiwix::Filter()); EXPECT_EQ(bookIds, lib.getBooksIds()); bookIds = lib.filter(kiwix::Filter().lang("eng")); EXPECT_EQ(bookIds.size(), 5U); bookIds = lib.filter(kiwix::Filter().acceptTags({"stackexchange"})); EXPECT_EQ(bookIds.size(), 3U); bookIds = lib.filter(kiwix::Filter().acceptTags({"wikipedia"})); EXPECT_EQ(bookIds.size(), 3U); bookIds = lib.filter(kiwix::Filter().acceptTags({"wikipedia", "nopic"})); EXPECT_EQ(bookIds.size(), 2U); bookIds = lib.filter(kiwix::Filter().acceptTags({"wikipedia"}).rejectTags({"nopic"})); EXPECT_EQ(bookIds.size(), 1U); bookIds = lib.filter(kiwix::Filter().query("folklore")); EXPECT_EQ(bookIds.size(), 1U); bookIds = lib.filter(kiwix::Filter().query("Wiki")); EXPECT_EQ(bookIds.size(), 4U); bookIds = lib.filter(kiwix::Filter().query("Wiki").creator("Wiki")); EXPECT_EQ(bookIds.size(), 1U); } TEST_F(LibraryTest, getBookByPath) { auto& book = lib.getBookById(lib.getBooksIds()[0]); book.setPath("/some/abs/path.zim"); EXPECT_EQ(lib.getBookByPath("/some/abs/path.zim").getId(), book.getId()); EXPECT_THROW(lib.getBookByPath("non/existant/path.zim"), std::out_of_range); } };