def test_subscriptions_broken_no_body(): mysubscriptions = Subscriptions() Feed.__init__ = mock.MagicMock(return_value=None) with pytest.raises(SubscriptionsStructureError): mysubscriptions.load(my_dir + "/subscriptions/broken_no_body.xml") for generated in mysubscriptions.parse(): pass
def test_subscriptions_parse_feedparseerror(): Feed.__init__ = mock.MagicMock(return_value=None) Feed.__init__.side_effect = FeedParseError() mysubscriptions = Subscriptions() mysubscriptions.load(my_dir + "/subscriptions/valid_complete.xml") for generated in mysubscriptions.parse(): assert isinstance(generated[1], FeedParseError)
def test_subscriptions_broken_no_outline(): mysubscriptions = Subscriptions() Feed.__init__ = mock.MagicMock(return_value=None) mysubscriptions.load(my_dir + "/subscriptions/broken_no_outline.xml") count = 0 for generated in mysubscriptions.parse(): count += 1 assert count == 0
def test_subscriptions_generate(): feed1 = mock.MagicMock() feed2 = mock.MagicMock() mysubscriptions = Subscriptions() mysubscriptions.generate([feed1, feed2]) Feed.__init__ = mock.MagicMock(return_value=None) for generated in mysubscriptions.parse(): pass assert len(mysubscriptions.feeds) == 2
def test_subscriptions_valid_no_head(): mysubscriptions = Subscriptions() Feed.__init__ = mock.MagicMock(return_value=None) mysubscriptions.load(my_dir + "/subscriptions/valid_no_head.xml") for generated in mysubscriptions.parse(): pass assert isinstance(mysubscriptions, Subscriptions) Feed.__init__.assert_any_call(url="http://feed1") Feed.__init__.assert_any_call(url="http://feed2") assert Feed.__init__.call_count == 2 assert len(mysubscriptions.feeds) == 2
def import_subscriptions(path: str, database: Database) -> None: subscriptions = Subscriptions() # Load may raise an error, but they are user-friendly enough that we don't # need to catch them here. It's also okay to crash at this point. subscriptions.load(path) for generated in subscriptions.parse(): if isinstance(generated, Feed): feed = generated database.replace_feed(feed) episodes = feed.parse_episodes() database.replace_episodes(feed, episodes) print("Added \"%s\" with %d episodes" % (str(feed), len(episodes))) else: print("ERROR: Failed to load %s -- %s" % (str(generated[0]), str(generated[1]))) print("Imported %d feeds" % len(subscriptions.feeds))