Support for book category attribute in library.xml

This commit is contained in:
Veloman Yunkan 2021-03-13 00:54:06 +04:00
parent 6b2067c236
commit 4abc4f8518
2 changed files with 110 additions and 1 deletions

View File

@ -127,7 +127,8 @@ void Book::updateFromXml(const pugi::xml_node& node, const std::string& baseDir)
try { try {
m_downloadId = ATTR("downloadId"); m_downloadId = ATTR("downloadId");
} catch(...) {} } catch(...) {}
m_category = getCategoryFromTags(); const auto catattr = node.attribute("category");
m_category = catattr.empty() ? getCategoryFromTags() : catattr.value();
} }
#undef ATTR #undef ATTR

View File

@ -1,5 +1,6 @@
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "../include/book.h" #include "../include/book.h"
#include <pugixml.hpp>
TEST(BookTest, updateTest) TEST(BookTest, updateTest)
{ {
@ -31,3 +32,110 @@ TEST(BookTest, updateTest)
EXPECT_EQ(newBook.getFavicon(), book.getFavicon()); EXPECT_EQ(newBook.getFavicon(), book.getFavicon());
EXPECT_EQ(newBook.getFaviconMimeType(), book.getFaviconMimeType()); EXPECT_EQ(newBook.getFaviconMimeType(), book.getFaviconMimeType());
} }
namespace
{
struct XMLDoc : pugi::xml_document
{
explicit XMLDoc(const std::string& xml)
{
load_buffer(xml.c_str(), xml.size());
}
};
} // unnamed namespace
TEST(BookTest, updateFromXMLTest)
{
const XMLDoc xml(R"(
<book id="zara"
path="./zara.zim"
url="https://who.org/zara.zim"
title="Catch an infection in 24 hours"
description="Complete guide to contagious diseases"
language="eng"
creator="World Health Organization"
publisher="WHO"
date="2020-03-31"
name="who_contagious_diseases_en"
tags="unittest;_category:medicine;_pictures:yes"
articleCount="123456"
mediaCount="234567"
size="345678"
>
</book>
)");
kiwix::Book book;
book.updateFromXml(xml.child("book"), "/data/zim");
EXPECT_EQ(book.getPath(), "/data/zim/zara.zim");
EXPECT_EQ(book.getUrl(), "https://who.org/zara.zim");
EXPECT_EQ(book.getTitle(), "Catch an infection in 24 hours");
EXPECT_EQ(book.getDescription(), "Complete guide to contagious diseases");
EXPECT_EQ(book.getTags(), "unittest;_category:medicine;_pictures:yes");
EXPECT_EQ(book.getName(), "who_contagious_diseases_en");
EXPECT_EQ(book.getCategory(), "medicine");
EXPECT_EQ(book.getArticleCount(), 123456U);
EXPECT_EQ(book.getMediaCount(), 234567U);
EXPECT_EQ(book.getSize(), 345678U*1024U);
}
TEST(BookTest, updateFromXMLCategoryHandlingTest)
{
{
const XMLDoc xml(R"(
<book id="abcd"
tags="_category:category_defined_via_tags_only"
>
</book>
)");
kiwix::Book book;
book.updateFromXml(xml.child("book"), "");
EXPECT_EQ(book.getCategory(), "category_defined_via_tags_only");
}
{
const XMLDoc xml(R"(
<book id="abcd"
category="category_defined_via_attribute_only"
>
</book>
)");
kiwix::Book book;
book.updateFromXml(xml.child("book"), "");
EXPECT_EQ(book.getCategory(), "category_defined_via_attribute_only");
}
{
const XMLDoc xml(R"(
<book id="abcd"
category="category_attribute_overrides_tags"
tags="_category:tags_override_category_attribute"
>
</book>
)");
kiwix::Book book;
book.updateFromXml(xml.child("book"), "");
EXPECT_EQ(book.getCategory(), "category_attribute_overrides_tags");
}
{
const XMLDoc xml(R"(
<book id="abcd"
tags="_category:tags_override_category_attribute"
category="category_attribute_overrides_tags"
>
</book>
)");
kiwix::Book book;
book.updateFromXml(xml.child("book"), "");
EXPECT_EQ(book.getCategory(), "category_attribute_overrides_tags");
}
}