summaryrefslogtreecommitdiffstats
path: root/planet/tests/test_command.py
diff options
context:
space:
mode:
authorJelle van der Waa <jelle@archlinux.org>2020-03-06 22:54:46 +0100
committerJelle van der Waa <jelle@archlinux.org>2020-03-06 22:54:46 +0100
commite3b419bcfe1cd88068ea0561e5b408ca7dcf2e97 (patch)
tree183c9c214edf950fe17ee044bd43ad069ef508c2 /planet/tests/test_command.py
parent6c796fce1d0928112f83ea01efe95ab3d24d7fa9 (diff)
downloadarchweb-e3b419bcfe1cd88068ea0561e5b408ca7dcf2e97.tar.gz
archweb-e3b419bcfe1cd88068ea0561e5b408ca7dcf2e97.zip
planet: add tests for updating planet
Diffstat (limited to 'planet/tests/test_command.py')
-rw-r--r--planet/tests/test_command.py89
1 files changed, 89 insertions, 0 deletions
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