Skip to content

Commit e3b419b

Browse files
committed
planet: add tests for updating planet
1 parent 6c796fc commit e3b419b

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

planet/tests/test_command.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import time
2+
from unittest import mock
3+
4+
from django.test import TestCase
5+
6+
from planet.models import Feed, FeedItem
7+
from planet.management.commands.update_planet import Command
8+
9+
10+
class Result(dict):
11+
status = 200
12+
entries = []
13+
14+
def get(self, value):
15+
return getattr(self, value)
16+
17+
class Entry(dict):
18+
title = 'title'
19+
description = 'lorem ipsum'
20+
author = 'John Doe'
21+
published_parsed = time.localtime(time.time())
22+
link = 'https://archlinux.org'
23+
updated_parsed = None
24+
25+
def get(self, value):
26+
return getattr(self, value)
27+
28+
29+
class UpdatePlanetTest(TestCase):
30+
31+
def setUp(self):
32+
self.command = Command()
33+
self.feed = Feed(title='test', website='http://archlinux.org',
34+
website_rss='http://archlinux.org/feed.rss')
35+
36+
# Test when feedparser receives an exception and returns no status
37+
@mock.patch('feedparser.parse')
38+
def test_parse_feed_wrong(self, parse):
39+
parse.return_value = {}
40+
self.command.parse_feed(self.feed)
41+
assert FeedItem.objects.count() == 0
42+
43+
@mock.patch('feedparser.parse')
44+
def test_parse_feed_304(self, parse):
45+
parse.return_value = {'status': 304}
46+
self.command.parse_feed(self.feed)
47+
assert FeedItem.objects.count() == 0
48+
49+
@mock.patch('feedparser.parse')
50+
def test_parse_feed_unknown(self, parse):
51+
parse.return_value = {'status': 201}
52+
self.command.parse_feed(self.feed)
53+
assert FeedItem.objects.count() == 0
54+
55+
@mock.patch('feedparser.parse')
56+
def test_parse_entries_empty(self, parse):
57+
parse.return_value = Result()
58+
self.command.parse_feed(self.feed)
59+
assert FeedItem.objects.count() == 0
60+
61+
@mock.patch('feedparser.parse')
62+
def test_parse_entries_not_published(self, parse):
63+
value = Result()
64+
entry = Entry()
65+
entry.published_parsed = None
66+
value.entries = [entry]
67+
parse.return_value = value
68+
self.command.parse_feed(self.feed)
69+
assert FeedItem.objects.count() == 0
70+
71+
@mock.patch('feedparser.parse')
72+
def test_parse_entries(self, parse):
73+
value = Result()
74+
value.entries = [Entry()]
75+
parse.return_value = value
76+
self.command.parse_feed(self.feed)
77+
assert FeedItem.objects.count() == 1
78+
79+
@mock.patch('feedparser.parse')
80+
def test_parse_entries_atom(self, parse):
81+
value = Result()
82+
entry = Entry()
83+
entry.published_parsed = None
84+
entry.updated_parsed = time.localtime(time.time())
85+
86+
value.entries = [entry]
87+
parse.return_value = value
88+
self.command.parse_feed(self.feed)
89+
assert FeedItem.objects.count() == 1

0 commit comments

Comments
 (0)