Enter EXPECT_FILTER_RESULTS()

This diff is easier to view if whitespace change is ignored.
This commit is contained in:
Veloman Yunkan 2021-04-11 13:52:19 +04:00
parent 0f277ffa34
commit 22b8625033
1 changed files with 68 additions and 103 deletions

View File

@ -258,74 +258,63 @@ TEST_F(LibraryTest, emptyFilter)
EXPECT_EQ(bookIds, lib.getBooksIds()); EXPECT_EQ(bookIds, lib.getBooksIds());
} }
#define EXPECT_FILTER_RESULTS(f, ...) \
EXPECT_EQ( \
ids2Titles(lib.filter(f)), \
TitleCollection({ __VA_ARGS__ }) \
)
TEST_F(LibraryTest, filterByLanguage) TEST_F(LibraryTest, filterByLanguage)
{ {
const auto bookIds = lib.filter(kiwix::Filter().lang("eng")); EXPECT_FILTER_RESULTS(kiwix::Filter().lang("eng"),
EXPECT_EQ(ids2Titles(bookIds), "Granblue Fantasy Wiki",
TitleCollection({ "Islam Stack Exchange",
"Granblue Fantasy Wiki", "Movies & TV Stack Exchange",
"Islam Stack Exchange", "Mythology & Folklore Stack Exchange",
"Movies & TV Stack Exchange", "TED talks - Business"
"Mythology & Folklore Stack Exchange",
"TED talks - Business"
})
); );
} }
TEST_F(LibraryTest, filterByTags) TEST_F(LibraryTest, filterByTags)
{ {
auto bookIds = lib.filter(kiwix::Filter().acceptTags({"stackexchange"})); EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"stackexchange"}),
EXPECT_EQ(ids2Titles(bookIds), "Islam Stack Exchange",
TitleCollection({ "Movies & TV Stack Exchange",
"Islam Stack Exchange", "Mythology & Folklore Stack Exchange"
"Movies & TV Stack Exchange",
"Mythology & Folklore Stack Exchange"
})
); );
// filtering by tags is case sensitive // filtering by tags is case sensitive
bookIds = lib.filter(kiwix::Filter().acceptTags({"stackEXChange"})); EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"stackEXChange"}),
EXPECT_EQ(ids2Titles(bookIds), /* no results */
TitleCollection({})
); );
// filtering by tags requires full match of the search term // filtering by tags requires full match of the search term
bookIds = lib.filter(kiwix::Filter().acceptTags({"stackexch"})); EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"stackexch"}),
EXPECT_EQ(ids2Titles(bookIds), /* no results */
TitleCollection({})
); );
// in tags with values (tag:value form) the value is an inseparable // in tags with values (tag:value form) the value is an inseparable
// part of the tag // part of the tag
EXPECT_EQ(ids2Titles(lib.filter(kiwix::Filter().acceptTags({"_category"}))), EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"_category"}),
TitleCollection({}) /* no results */
); );
EXPECT_EQ(ids2Titles(lib.filter(kiwix::Filter().acceptTags({"_category:category_defined_via_tags_only"}))), EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"_category:category_defined_via_tags_only"}),
TitleCollection({"Tania Louis"}) "Tania Louis"
); );
bookIds = lib.filter(kiwix::Filter().acceptTags({"wikipedia"})); EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"wikipedia"}),
EXPECT_EQ(ids2Titles(bookIds), "Encyclopédie de la Tunisie",
TitleCollection({ "Géographie par Wikipédia",
"Encyclopédie de la Tunisie", "Mathématiques"
"Géographie par Wikipédia",
"Mathématiques"
})
); );
bookIds = lib.filter(kiwix::Filter().acceptTags({"wikipedia", "nopic"})); EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"wikipedia", "nopic"}),
EXPECT_EQ(ids2Titles(bookIds), "Géographie par Wikipédia",
TitleCollection({ "Mathématiques"
"Géographie par Wikipédia",
"Mathématiques"
})
); );
bookIds = lib.filter(kiwix::Filter().acceptTags({"wikipedia"}).rejectTags({"nopic"})); EXPECT_FILTER_RESULTS(kiwix::Filter().acceptTags({"wikipedia"}).rejectTags({"nopic"}),
EXPECT_EQ(ids2Titles(bookIds), "Encyclopédie de la Tunisie"
TitleCollection({
"Encyclopédie de la Tunisie"
})
); );
} }
@ -333,102 +322,78 @@ TEST_F(LibraryTest, filterByTags)
TEST_F(LibraryTest, filterByQuery) TEST_F(LibraryTest, filterByQuery)
{ {
// filtering by query checks the title // filtering by query checks the title
auto bookIds = lib.filter(kiwix::Filter().query("Exchange")); EXPECT_FILTER_RESULTS(kiwix::Filter().query("Exchange"),
EXPECT_EQ(ids2Titles(bookIds), "Islam Stack Exchange",
TitleCollection({ "Movies & TV Stack Exchange",
"Islam Stack Exchange", "Mythology & Folklore Stack Exchange"
"Movies & TV Stack Exchange",
"Mythology & Folklore Stack Exchange"
})
); );
// filtering by query checks the description/summary // filtering by query checks the description/summary
bookIds = lib.filter(kiwix::Filter().query("enthusiasts")); EXPECT_FILTER_RESULTS(kiwix::Filter().query("enthusiasts"),
EXPECT_EQ(ids2Titles(bookIds), "Movies & TV Stack Exchange",
TitleCollection({ "Mythology & Folklore Stack Exchange"
"Movies & TV Stack Exchange",
"Mythology & Folklore Stack Exchange"
})
); );
// filtering by query is case insensitive on titles // filtering by query is case insensitive on titles
bookIds = lib.filter(kiwix::Filter().query("ExcHANge")); EXPECT_FILTER_RESULTS(kiwix::Filter().query("ExcHANge"),
EXPECT_EQ(ids2Titles(bookIds), "Islam Stack Exchange",
TitleCollection({ "Movies & TV Stack Exchange",
"Islam Stack Exchange", "Mythology & Folklore Stack Exchange"
"Movies & TV Stack Exchange",
"Mythology & Folklore Stack Exchange"
})
); );
// filtering by query is case insensitive on description/summary // filtering by query is case insensitive on description/summary
bookIds = lib.filter(kiwix::Filter().query("enTHUSiaSTS")); EXPECT_FILTER_RESULTS(kiwix::Filter().query("enTHUSiaSTS"),
EXPECT_EQ(ids2Titles(bookIds), "Movies & TV Stack Exchange",
TitleCollection({ "Mythology & Folklore Stack Exchange"
"Movies & TV Stack Exchange",
"Mythology & Folklore Stack Exchange"
})
); );
// by default, filtering by query assumes partial query // by default, filtering by query assumes partial query
bookIds = lib.filter(kiwix::Filter().query("Wiki")); EXPECT_FILTER_RESULTS(kiwix::Filter().query("Wiki"),
EXPECT_EQ(ids2Titles(bookIds), "Encyclopédie de la Tunisie",
TitleCollection({ "Granblue Fantasy Wiki",
"Encyclopédie de la Tunisie", "Géographie par Wikipédia",
"Granblue Fantasy Wiki", "Wikiquote"
"Géographie par Wikipédia",
"Wikiquote"
})
); );
// partial query can be disabled // partial query can be disabled
bookIds = lib.filter(kiwix::Filter().query("Wiki", false)); EXPECT_FILTER_RESULTS(kiwix::Filter().query("Wiki", false),
EXPECT_EQ(ids2Titles(bookIds), "Granblue Fantasy Wiki"
TitleCollection({
"Granblue Fantasy Wiki"
})
); );
} }
TEST_F(LibraryTest, filterByCreator) TEST_F(LibraryTest, filterByCreator)
{ {
auto bookIds = lib.filter(kiwix::Filter().creator("Wikipedia")); EXPECT_FILTER_RESULTS(kiwix::Filter().creator("Wikipedia"),
EXPECT_EQ(ids2Titles(bookIds), "Encyclopédie de la Tunisie",
TitleCollection({ "Géographie par Wikipédia",
"Encyclopédie de la Tunisie", "Mathématiques"
"Géographie par Wikipédia",
"Mathématiques"
})
); );
// filtering by creator requires full match of the search term // filtering by creator requires full match of the search term
EXPECT_EQ(ids2Titles(lib.filter(kiwix::Filter().creator("Wiki"))), EXPECT_FILTER_RESULTS(kiwix::Filter().creator("Wiki"),
TitleCollection({"Granblue Fantasy Wiki"}) "Granblue Fantasy Wiki"
); );
// filtering by creator is case sensitive // filtering by creator is case sensitive
EXPECT_EQ(ids2Titles(lib.filter(kiwix::Filter().creator("wiki"))), EXPECT_FILTER_RESULTS(kiwix::Filter().creator("wiki"),
TitleCollection({}) /* no results */
); );
// filtering by creator requires full match of the full author/creator name // filtering by creator requires full match of the full author/creator name
EXPECT_EQ(ids2Titles(lib.filter(kiwix::Filter().creator("Stack"))), EXPECT_FILTER_RESULTS(kiwix::Filter().creator("Stack"),
TitleCollection({}) /* no results */
); );
EXPECT_EQ(ids2Titles(lib.filter(kiwix::Filter().creator("Movies & TV Stack Exchange"))), EXPECT_FILTER_RESULTS(kiwix::Filter().creator("Movies & TV Stack Exchange"),
TitleCollection({"Movies & TV Stack Exchange"}) "Movies & TV Stack Exchange"
); );
} }
TEST_F(LibraryTest, filterByMultipleCriteria) TEST_F(LibraryTest, filterByMultipleCriteria)
{ {
auto bookIds = lib.filter(kiwix::Filter().query("Wiki").creator("Wiki")); EXPECT_FILTER_RESULTS(kiwix::Filter().query("Wiki").creator("Wiki"),
EXPECT_EQ(ids2Titles(bookIds), "Granblue Fantasy Wiki"
TitleCollection({
"Granblue Fantasy Wiki"
})
); );
} }