From e3b419bcfe1cd88068ea0561e5b408ca7dcf2e97 Mon Sep 17 00:00:00 2001 From: Jelle van der Waa Date: Fri, 6 Mar 2020 22:54:46 +0100 Subject: planet: add tests for updating planet --- planet/tests/test_command.py | 89 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 planet/tests/test_command.py diff --git a/planet/tests/test_command.py b/planet/tests/test_command.py new file mode 100644 index 00000000..e93ce51a --- /dev/null +++ b/planet/tests/test_command.py @@ -0,0 +1,89 @@ +import time +from unittest import mock + +from django.test import TestCase + +from planet.models import Feed, FeedItem +from planet.management.commands.update_planet import Command + + +class Result(dict): + status = 200 + entries = [] + + def get(self, value): + return getattr(self, value) + +class Entry(dict): + title = 'title' + description = 'lorem ipsum' + author = 'John Doe' + published_parsed = time.localtime(time.time()) + link = 'https://archlinux.org' + updated_parsed = None + + def get(self, value): + return getattr(self, value) + + +class UpdatePlanetTest(TestCase): + + def setUp(self): + self.command = Command() + self.feed = Feed(title='test', website='http://archlinux.org', + website_rss='http://archlinux.org/feed.rss') + + # Test when feedparser receives an exception and returns no status + @mock.patch('feedparser.parse') + def test_parse_feed_wrong(self, parse): + parse.return_value = {} + self.command.parse_feed(self.feed) + assert FeedItem.objects.count() == 0 + + @mock.patch('feedparser.parse') + def test_parse_feed_304(self, parse): + parse.return_value = {'status': 304} + self.command.parse_feed(self.feed) + assert FeedItem.objects.count() == 0 + + @mock.patch('feedparser.parse') + def test_parse_feed_unknown(self, parse): + parse.return_value = {'status': 201} + self.command.parse_feed(self.feed) + assert FeedItem.objects.count() == 0 + + @mock.patch('feedparser.parse') + def test_parse_entries_empty(self, parse): + parse.return_value = Result() + self.command.parse_feed(self.feed) + assert FeedItem.objects.count() == 0 + + @mock.patch('feedparser.parse') + def test_parse_entries_not_published(self, parse): + value = Result() + entry = Entry() + entry.published_parsed = None + value.entries = [entry] + parse.return_value = value + self.command.parse_feed(self.feed) + assert FeedItem.objects.count() == 0 + + @mock.patch('feedparser.parse') + def test_parse_entries(self, parse): + value = Result() + value.entries = [Entry()] + parse.return_value = value + self.command.parse_feed(self.feed) + assert FeedItem.objects.count() == 1 + + @mock.patch('feedparser.parse') + def test_parse_entries_atom(self, parse): + value = Result() + entry = Entry() + entry.published_parsed = None + entry.updated_parsed = time.localtime(time.time()) + + value.entries = [entry] + parse.return_value = value + self.command.parse_feed(self.feed) + assert FeedItem.objects.count() == 1 -- cgit v1.2.3-55-g3dc8