class RSSFeedHandlingTestCase(unittest.TestCase): def setUp(self): self.log = log self.rssfeedhandler = RSSFeedHandler(self.log) def test_get_rssfeed_parsed(self): file_url = yarss2.common.get_resource(common.testdata_rssfeed_filename, path="tests") rssfeed_data = {"name": "Test", "url": file_url, "site:": "only used whith cookie arguments"} parsed_feed = self.rssfeedhandler.get_rssfeed_parsed(rssfeed_data) #common.json_dump(parsed_feed["items"], "freebsd_rss_items_dump2.json") self.assertTrue(parsed_feed.has_key("items")) items = parsed_feed["items"] stored_items = common.load_json_testdata() self.assertTrue(yarss2.common.dicts_equals(items, stored_items)) def get_default_rssfeeds_dict(self): match_option_dict = {} match_option_dict["regex_include"] = "" match_option_dict["regex_exclude"] = "" match_option_dict["regex_include_ignorecase"] = True match_option_dict["regex_exclude_ignorecase"] = True match_option_dict["custom_text_lines"] = None rssfeed_matching = {} rssfeed_matching["0"] = {"matches": False, "link": "", "title": "FreeBSD-9.0-RELEASE-amd64-all"} rssfeed_matching["1"] = {"matches": False, "link": "", "title": "FreeBSD-9.0-RELEASE-i386-all"} rssfeed_matching["2"] = {"matches": False, "link": "", "title": "fREEbsd-9.0-RELEASE-i386-all"} return match_option_dict, rssfeed_matching def test_update_rssfeeds_dict_matching(self): options, rssfeed_parsed = self.get_default_rssfeeds_dict() options["regex_include"] = "FreeBSD" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching(rssfeed_parsed, options) self.assertEquals(len(matching.keys()), len(rssfeed_parsed.keys())) # Also make sure the items in 'matching' correspond to the matching items in rssfeed_parsed count = 0 for key in rssfeed_parsed.keys(): if rssfeed_parsed[key]["matches"]: self.assertTrue(matching.has_key(key), "The matches dict does not contain the matching key '%s'" % key) count += 1 self.assertEquals(count, len(matching.keys()), "The number of items in matches dict (%d) does not match the number of matching items (%d)" % (count, len(matching.keys()))) options["regex_include_ignorecase"] = False matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching(rssfeed_parsed, options) self.assertEquals(len(matching.keys()), len(rssfeed_parsed.keys()) - 1) #options["regex_include_ignorecase"] = True options["regex_exclude"] = "i386" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching(rssfeed_parsed, options) self.assertEquals(len(matching.keys()), len(rssfeed_parsed.keys()) - 2) # Fresh options options, rssfeed_parsed = self.get_default_rssfeeds_dict() # Custom line with unicode characters, norwegian ø and å, as well as Latin Small Letter Lambda with stroke options["custom_text_lines"] = [u"Test line with æ and å, as well as ƛ"] options["regex_include"] = "æ" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching(rssfeed_parsed, options) self.assertEquals(len(matching.keys()), 1) for key in matching.keys(): self.assertEquals(matching[key]["title"], options["custom_text_lines"][0]) self.assertEquals(matching[key]["regex_include_match"], (15, 17)) options["regex_include"] = "with.*ƛ" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching(rssfeed_parsed, options) self.assertEquals(len(matching.keys()), 1) for key in matching.keys(): self.assertEquals(matching[key]["title"], options["custom_text_lines"][0]) self.assertEquals(matching[key]["regex_include_match"], (10, 39)) # Test exclude span options["regex_include"] = ".*" options["regex_exclude"] = "line.*å" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching(rssfeed_parsed, options) for key in rssfeed_parsed.keys(): if not rssfeed_parsed[key]["matches"]: self.assertEquals(rssfeed_parsed[key]["title"], options["custom_text_lines"][0]) self.assertEquals(rssfeed_parsed[key]["regex_exclude_match"], (5, 24)) break def test_fetch_subscription_torrents(self): config = get_test_config() matche_result = self.rssfeedhandler.fetch_subscription_torrents(config, "0") matches = matche_result["matching_torrents"] self.assertTrue(len(matches) == 3)
class RSSFeedHandlingTestCase(unittest.TestCase): def setUp(self): self.log = log self.rssfeedhandler = RSSFeedHandler(self.log) def test_get_rssfeed_parsed(self): file_url = yarss2.common.get_resource(common.testdata_rssfeed_filename, path="tests") rssfeed_data = { "name": "Test", "url": file_url, "site:": "only used whith cookie arguments" } parsed_feed = self.rssfeedhandler.get_rssfeed_parsed(rssfeed_data) #common.json_dump(parsed_feed["items"], "freebsd_rss_items_dump2.json") self.assertTrue(parsed_feed.has_key("items")) items = parsed_feed["items"] stored_items = common.load_json_testdata() self.assertTrue(yarss2.common.dicts_equals(items, stored_items)) def get_default_rssfeeds_dict(self): match_option_dict = {} match_option_dict["regex_include"] = "" match_option_dict["regex_exclude"] = "" match_option_dict["regex_include_ignorecase"] = True match_option_dict["regex_exclude_ignorecase"] = True match_option_dict["custom_text_lines"] = None rssfeed_matching = {} rssfeed_matching["0"] = { "matches": False, "link": "", "title": "FreeBSD-9.0-RELEASE-amd64-all" } rssfeed_matching["1"] = { "matches": False, "link": "", "title": "FreeBSD-9.0-RELEASE-i386-all" } rssfeed_matching["2"] = { "matches": False, "link": "", "title": "fREEbsd-9.0-RELEASE-i386-all" } return match_option_dict, rssfeed_matching def test_update_rssfeeds_dict_matching(self): options, rssfeed_parsed = self.get_default_rssfeeds_dict() options["regex_include"] = "FreeBSD" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching( rssfeed_parsed, options) self.assertEquals(len(matching.keys()), len(rssfeed_parsed.keys())) # Also make sure the items in 'matching' correspond to the matching items in rssfeed_parsed count = 0 for key in rssfeed_parsed.keys(): if rssfeed_parsed[key]["matches"]: self.assertTrue( matching.has_key(key), "The matches dict does not contain the matching key '%s'" % key) count += 1 self.assertEquals( count, len(matching.keys()), "The number of items in matches dict (%d) does not match the number of matching items (%d)" % (count, len(matching.keys()))) options["regex_include_ignorecase"] = False matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching( rssfeed_parsed, options) self.assertEquals(len(matching.keys()), len(rssfeed_parsed.keys()) - 1) #options["regex_include_ignorecase"] = True options["regex_exclude"] = "i386" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching( rssfeed_parsed, options) self.assertEquals(len(matching.keys()), len(rssfeed_parsed.keys()) - 2) # Fresh options options, rssfeed_parsed = self.get_default_rssfeeds_dict() # Custom line with unicode characters, norwegian ø and å, as well as Latin Small Letter Lambda with stroke options["custom_text_lines"] = [ u"Test line with æ and å, as well as ƛ" ] options["regex_include"] = "æ" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching( rssfeed_parsed, options) self.assertEquals(len(matching.keys()), 1) for key in matching.keys(): self.assertEquals(matching[key]["title"], options["custom_text_lines"][0]) self.assertEquals(matching[key]["regex_include_match"], (15, 17)) options["regex_include"] = "with.*ƛ" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching( rssfeed_parsed, options) self.assertEquals(len(matching.keys()), 1) for key in matching.keys(): self.assertEquals(matching[key]["title"], options["custom_text_lines"][0]) self.assertEquals(matching[key]["regex_include_match"], (10, 39)) # Test exclude span options["regex_include"] = ".*" options["regex_exclude"] = "line.*å" matching, msg = self.rssfeedhandler.update_rssfeeds_dict_matching( rssfeed_parsed, options) for key in rssfeed_parsed.keys(): if not rssfeed_parsed[key]["matches"]: self.assertEquals(rssfeed_parsed[key]["title"], options["custom_text_lines"][0]) self.assertEquals(rssfeed_parsed[key]["regex_exclude_match"], (5, 24)) break def test_fetch_subscription_torrents(self): config = get_test_config() matche_result = self.rssfeedhandler.fetch_subscription_torrents( config, "0") matches = matche_result["matching_torrents"] self.assertTrue(len(matches) == 3)