-
-
Notifications
You must be signed in to change notification settings - Fork 931
/
tests.py
156 lines (134 loc) · 5.42 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
from datetime import timedelta
from test.support import captured_stderr
from django.test import TestCase
from django.urls import reverse
from django.utils import timezone
from .models import Entry, Event
from .sitemaps import WeblogSitemap
class DateTimeMixin:
def setUp(self):
self.now = timezone.now()
self.yesterday = self.now - timedelta(days=1)
self.tomorrow = self.now + timedelta(days=1)
class EntryTestCase(DateTimeMixin, TestCase):
def test_manager_active(self):
"""
Make sure that the Entry manager's `active` method works
"""
Entry.objects.create(
pub_date=self.now, is_active=False, headline="inactive", slug="a"
)
Entry.objects.create(
pub_date=self.now, is_active=True, headline="active", slug="b"
)
self.assertQuerysetEqual(
Entry.objects.published(),
["active"],
transform=lambda entry: entry.headline,
)
def test_manager_published(self):
"""
Make sure that the Entry manager's `published` method works
"""
Entry.objects.create(
pub_date=self.yesterday, is_active=False, headline="past inactive", slug="a"
)
Entry.objects.create(
pub_date=self.yesterday, is_active=True, headline="past active", slug="b"
)
Entry.objects.create(
pub_date=self.tomorrow,
is_active=False,
headline="future inactive",
slug="c",
)
Entry.objects.create(
pub_date=self.tomorrow, is_active=True, headline="future active", slug="d"
)
self.assertQuerysetEqual(
Entry.objects.published(),
["past active"],
transform=lambda entry: entry.headline,
)
def test_docutils_safe(self):
"""
Make sure docutils' file inclusion directives are disabled by default.
"""
with captured_stderr() as self.docutils_stderr:
entry = Entry.objects.create(
pub_date=self.now,
is_active=True,
headline="active",
content_format="reST",
body=".. raw:: html\n :file: somefile\n",
slug="a",
)
self.assertIn("<p>"raw" directive disabled.</p>", entry.body_html)
self.assertIn(".. raw:: html\n :file: somefile", entry.body_html)
class EventTestCase(DateTimeMixin, TestCase):
def test_manager_past_future(self):
"""
Make sure that the Event manager's `past` and `future` methods works
"""
Event.objects.create(date=self.yesterday, pub_date=self.now, headline="past")
Event.objects.create(date=self.tomorrow, pub_date=self.now, headline="future")
self.assertQuerysetEqual(
Event.objects.future(), ["future"], transform=lambda event: event.headline
)
self.assertQuerysetEqual(
Event.objects.past(), ["past"], transform=lambda event: event.headline
)
def test_manager_past_future_include_today(self):
"""
Make sure that both .future() and .past() include today's events.
"""
Event.objects.create(date=self.now, pub_date=self.now, headline="today")
self.assertQuerysetEqual(
Event.objects.future(), ["today"], transform=lambda event: event.headline
)
self.assertQuerysetEqual(
Event.objects.past(), ["today"], transform=lambda event: event.headline
)
def test_past_future_ordering(self):
"""
Make sure the that .future() and .past() use the actual date for ordering
(and not the pub_date).
"""
D = timedelta(days=1)
Event.objects.create(
date=self.yesterday - D, pub_date=self.yesterday - D, headline="a"
)
Event.objects.create(date=self.yesterday, pub_date=self.yesterday, headline="b")
Event.objects.create(date=self.tomorrow, pub_date=self.tomorrow, headline="c")
Event.objects.create(
date=self.tomorrow + D, pub_date=self.tomorrow + D, headline="d"
)
self.assertQuerysetEqual(
Event.objects.future(), ["c", "d"], transform=lambda event: event.headline
)
self.assertQuerysetEqual(
Event.objects.past(), ["b", "a"], transform=lambda event: event.headline
)
class ViewsTestCase(DateTimeMixin, TestCase):
def test_no_past_upcoming_events(self):
"""
Make sure there are no past event in the "upcoming events" sidebar (#399)
"""
# We need a published entry on the index page so that it doesn't return a 404
Entry.objects.create(pub_date=self.yesterday, is_active=True, slug="a")
Event.objects.create(
date=self.yesterday, pub_date=self.now, is_active=True, headline="Jezdezcon"
)
response = self.client.get(reverse("weblog:index"))
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(response.context["events"], [])
class SitemapTests(DateTimeMixin, TestCase):
def test_sitemap(self):
entry = Entry.objects.create(
pub_date=self.yesterday, is_active=True, headline="foo", slug="foo"
)
sitemap = WeblogSitemap()
urls = sitemap.get_urls()
self.assertEqual(len(urls), 1)
url_info = urls[0]
self.assertEqual(url_info["location"], entry.get_absolute_url())