summaryrefslogtreecommitdiffstats
path: root/test/feedcontainer.cpp
diff options
context:
space:
mode:
authorAlexander Batischev <eual.jp@gmail.com>2019-07-27 20:08:45 +0300
committerAlexander Batischev <eual.jp@gmail.com>2019-07-27 20:11:44 +0300
commit3a412e9a09bcc0f64d4839735efd88392a40b08a (patch)
treede1e29c454f1a41a6631a0a597e253f483bf975c /test/feedcontainer.cpp
parent3621c68f9006110db3e4ae4a83725fadb68baa2a (diff)
Add tests for new FeedContainer methods
Diffstat (limited to 'test/feedcontainer.cpp')
-rw-r--r--test/feedcontainer.cpp294
1 files changed, 294 insertions, 0 deletions
diff --git a/test/feedcontainer.cpp b/test/feedcontainer.cpp
index 9fcd552a..aa9fc85b 100644
--- a/test/feedcontainer.cpp
+++ b/test/feedcontainer.cpp
@@ -552,3 +552,297 @@ TEST_CASE("unread_item_count() returns number of unread items in all feeds",
REQUIRE(feedcontainer.unread_item_count() == 4);
}
+
+TEST_CASE("get_unread_feed_count_per_tag returns 0 if there are no feeds "
+ "with given tag",
+ "[FeedContainer]")
+{
+ FeedContainer feedcontainer;
+
+ SECTION("Empty FeedContainer") {
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("unknown") == 0);
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("test") == 0);
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("with space") == 0);
+ }
+
+ SECTION("Non-empty FeedContainer, but no feeds are tagged") {
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ feedcontainer.add_feed(std::make_shared<RssFeed>(&rsscache));
+ feedcontainer.add_feed(std::make_shared<RssFeed>(&rsscache));
+ feedcontainer.add_feed(std::make_shared<RssFeed>(&rsscache));
+
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("unknown") == 0);
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("test") == 0);
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("with space") == 0);
+ }
+
+ SECTION("Non-empty FeedContainer, no feeds are tagged with our desired tag") {
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ auto feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({"one", "two", "three"});
+ feedcontainer.add_feed(feed);
+
+ feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({"some", "different", "tags"});
+ feedcontainer.add_feed(feed);
+
+ feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({"here's one with spaces"});
+ feedcontainer.add_feed(feed);
+
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("unknown") == 0);
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("test") == 0);
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag("with space") == 0);
+ }
+}
+
+TEST_CASE("get_unread_feed_count_per_tag returns 0 if feeds with given tag "
+ "contain no unread items",
+ "[FeedContainer]")
+{
+ FeedContainer feedcontainer;
+
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ const auto desired_tag = std::string("target");
+ const auto different_tag = std::string("something else entirely");
+
+ auto feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({desired_tag});
+ for (int i = 0; i < 10; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(false);
+ feed->add_item(item);
+ }
+ feedcontainer.add_feed(feed);
+
+ feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({different_tag});
+ for (int i = 0; i < 5; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(true);
+ feed->add_item(item);
+ }
+ for (int i = 0; i < 5; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(false);
+ feed->add_item(item);
+ }
+ feedcontainer.add_feed(feed);
+
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag(desired_tag) == 0);
+}
+
+TEST_CASE("get_unread_feed_count_per_tag returns the number of feeds that have "
+ "a given tag and also have unread items",
+ "[FeedContainer]")
+{
+ FeedContainer feedcontainer;
+
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ const auto desired_tag = std::string("target");
+ const auto different_tag = std::string("something else entirely");
+
+ const auto add_feed_with_tag_and_unreads =
+ [&feedcontainer, &rsscache]
+ (std::string tag, unsigned int unreads) {
+ auto feed = std::make_shared<RssFeed>(&rsscache);
+
+ feed->set_tags({tag});
+
+ for (unsigned int i = 0; i < unreads; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(true);
+ feed->add_item(item);
+ }
+ for (int i = 0; i < 10; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(false);
+ feed->add_item(item);
+ }
+
+ feedcontainer.add_feed(std::move(feed));
+ };
+
+ SECTION("One feed") {
+ add_feed_with_tag_and_unreads(different_tag, 1);
+ add_feed_with_tag_and_unreads(desired_tag, 1);
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag(desired_tag)
+ == 1);
+ }
+
+ SECTION("Two feeds") {
+ add_feed_with_tag_and_unreads(different_tag, 4);
+
+ add_feed_with_tag_and_unreads(desired_tag, 5);
+ add_feed_with_tag_and_unreads(desired_tag, 8);
+
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag(desired_tag)
+ == 2);
+ }
+
+ SECTION("Three feeds") {
+ add_feed_with_tag_and_unreads(different_tag, 4);
+
+ add_feed_with_tag_and_unreads(desired_tag, 5);
+ add_feed_with_tag_and_unreads(desired_tag, 8);
+ add_feed_with_tag_and_unreads(desired_tag, 11);
+
+ REQUIRE(feedcontainer.get_unread_feed_count_per_tag(desired_tag)
+ == 3);
+ }
+}
+
+TEST_CASE("get_unread_item_count_per_tag returns 0 if there are no feeds "
+ "with given tag",
+ "[FeedContainer]")
+{
+ FeedContainer feedcontainer;
+
+ SECTION("Empty FeedContainer") {
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("unknown") == 0);
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("test") == 0);
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("with space") == 0);
+ }
+
+ SECTION("Non-empty FeedContainer, but no feeds are tagged") {
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ feedcontainer.add_feed(std::make_shared<RssFeed>(&rsscache));
+ feedcontainer.add_feed(std::make_shared<RssFeed>(&rsscache));
+ feedcontainer.add_feed(std::make_shared<RssFeed>(&rsscache));
+
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("unknown") == 0);
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("test") == 0);
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("with space") == 0);
+ }
+
+ SECTION("Non-empty FeedContainer, no feeds are tagged with our desired tag") {
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ auto feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({"one", "two", "three"});
+ feedcontainer.add_feed(feed);
+
+ feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({"some", "different", "tags"});
+ feedcontainer.add_feed(feed);
+
+ feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({"here's one with spaces"});
+ feedcontainer.add_feed(feed);
+
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("unknown") == 0);
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("test") == 0);
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag("with space") == 0);
+ }
+}
+
+TEST_CASE("get_unread_item_count_per_tag returns 0 if feeds with given tag "
+ "contain no unread items",
+ "[FeedContainer]")
+{
+ FeedContainer feedcontainer;
+
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ const auto desired_tag = std::string("target");
+ const auto different_tag = std::string("something else entirely");
+
+ auto feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({desired_tag});
+ for (int i = 0; i < 10; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(false);
+ feed->add_item(item);
+ }
+ feedcontainer.add_feed(feed);
+
+ feed = std::make_shared<RssFeed>(&rsscache);
+ feed->set_tags({different_tag});
+ for (int i = 0; i < 5; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(true);
+ feed->add_item(item);
+ }
+ for (int i = 0; i < 5; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(false);
+ feed->add_item(item);
+ }
+ feedcontainer.add_feed(feed);
+
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag(desired_tag) == 0);
+}
+
+TEST_CASE("get_unread_item_count_per_tag returns the number of unread items "
+ "in feeds that have a given tag",
+ "[FeedContainer]")
+{
+ FeedContainer feedcontainer;
+
+ ConfigContainer cfg;
+ Cache rsscache(":memory:", &cfg);
+
+ const auto desired_tag = std::string("target");
+ const auto different_tag = std::string("something else entirely");
+
+ const auto add_feed_with_tag_and_unreads =
+ [&feedcontainer, &rsscache]
+ (std::string tag, unsigned int unreads) {
+ auto feed = std::make_shared<RssFeed>(&rsscache);
+
+ feed->set_tags({tag});
+
+ for (unsigned int i = 0; i < unreads; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(true);
+ feed->add_item(item);
+ }
+ for (int i = 0; i < 10; ++i) {
+ auto item = std::make_shared<RssItem>(&rsscache);
+ item->set_unread(false);
+ feed->add_item(item);
+ }
+
+ feedcontainer.add_feed(std::move(feed));
+ };
+
+ SECTION("One feed, one unread") {
+ add_feed_with_tag_and_unreads(different_tag, 1);
+ add_feed_with_tag_and_unreads(desired_tag, 1);
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag(desired_tag)
+ == 1);
+ }
+
+ SECTION("Two feeds, 13 unreads") {
+ add_feed_with_tag_and_unreads(different_tag, 4);
+
+ add_feed_with_tag_and_unreads(desired_tag, 5);
+ add_feed_with_tag_and_unreads(desired_tag, 8);
+
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag(desired_tag)
+ == 13);
+ }
+
+ SECTION("Three feeds, 24 unreads") {
+ add_feed_with_tag_and_unreads(different_tag, 4);
+
+ add_feed_with_tag_and_unreads(desired_tag, 5);
+ add_feed_with_tag_and_unreads(desired_tag, 8);
+ add_feed_with_tag_and_unreads(desired_tag, 11);
+
+ REQUIRE(feedcontainer.get_unread_item_count_per_tag(desired_tag)
+ == 24);
+ }
+}