def test_filter(self): should_match = ["title XYZ", "description XYZ", "body XYZ", "XYZ"] for s in should_match: match_re = re.compile(s) reader = RssReader(self.url, accept_filter=match_re.search) entries = reader.get_entries() self.assertEqual(1, len(entries)) self.assertEqual("title XYZ", entries[0].title)
def test_reader(self): reader = RssReader(self.url) entries = reader.get_entries() self.assertEqual(3, len(entries)) self.assertEqual("file://example/ABC.xml", entries[0].id) self.assertEqual("title ABC", entries[0].title) self.assertEqual("file://example/XYZ.xml", entries[1].id) self.assertEqual("title XYZ", entries[1].title) self.assertEqual("file://example/LMN.xml", entries[2].id) self.assertEqual("No Title", entries[2].title)
def test_bad_feed_data(self): bad_file = tempfile.NamedTemporaryFile() bad_file.write("Ceci n'est pas un flux RSS") bad_file.flush() url = "file://{}".format(bad_file.name) reader = RssReader(url) self.assertRaises(Exception, reader.get_entries)
def test_timeout(self): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "" port = 0 # automatically assign port sock.bind((host, port)) host, port = sock.getsockname() # get actual port sock.listen(1) reader = RssReader("http://{}:{}/".format(host, port), timeout=0.01) self.assertEqual(0, reader.consecutive_failures) self.assertSocketTimeout(reader.get_entries) self.assertEqual(1, reader.consecutive_failures) self.assertSocketTimeout(reader.get_entries) self.assertEqual(2, reader.consecutive_failures) # point the reader at a valid file to test that consecutive_failures # gets reset reader.feed_url = self.url entries = reader.get_entries() self.assertEqual(3, len(entries)) self.assertEqual(0, reader.consecutive_failures) sock.close()
def test_filter(self): keywords = ["title XYZ", "description XYZ", "body XYZ", "XYZ"] reader = RssReader(self.url, keywords=keywords) entries = reader.get_entries() self.assertEqual(1, len(entries)) self.assertEqual("title XYZ", entries[0].title)