Mercurial > public > sg101
comparison gpp/polls/tests/view_tests.py @ 447:8f46ba2f1b81
For #219, rework the polls views for a better flow. Added some tests for the views.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 25 Jun 2011 23:23:20 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
446:72ef6e809f79 | 447:8f46ba2f1b81 |
---|---|
1 """ | |
2 Tests for the views in the polls application. | |
3 | |
4 """ | |
5 import datetime | |
6 | |
7 from django.contrib.auth.models import User | |
8 from django.test import TestCase | |
9 from django.core.urlresolvers import reverse | |
10 from polls.models import Poll, Choice | |
11 | |
12 | |
13 class PollHomeTest(TestCase): | |
14 | |
15 def setUp(self): | |
16 now = datetime.datetime.now() | |
17 Poll.objects.all().delete() | |
18 | |
19 past = now - datetime.timedelta(7) | |
20 future = now + datetime.timedelta(7) | |
21 | |
22 Poll.objects.create(start_date=past, | |
23 end_date=past, | |
24 is_enabled=True, | |
25 question='Old Poll') | |
26 | |
27 active = Poll.objects.create(start_date=past, | |
28 end_date=future, | |
29 is_enabled=True, | |
30 question='Active Poll') | |
31 | |
32 Poll.objects.create(start_date=future, | |
33 end_date=future, | |
34 is_enabled=True, | |
35 question='Future Poll') | |
36 | |
37 Poll.objects.create(start_date=past, | |
38 end_date=future, | |
39 is_enabled=False, | |
40 question='Disabled Poll') | |
41 | |
42 choice1 = Choice.objects.create(poll=active, choice="Yes") | |
43 choice2 = Choice.objects.create(poll=active, choice="Yes") | |
44 | |
45 self.username = 'test_user' | |
46 self.pw = 'password' | |
47 self.user = User.objects.create_user(self.username, '', self.pw) | |
48 self.user.save() | |
49 self.assertTrue(self.client.login(username=self.username, | |
50 password=self.pw)) | |
51 | |
52 def tearDown(self): | |
53 self.client.logout() | |
54 | |
55 def testHome(self): | |
56 response = self.client.get(reverse('polls-main')) | |
57 | |
58 old = response.context['old_polls'] | |
59 self.assertEqual(len(old), 1) | |
60 if old: | |
61 self.assertEqual(old[0].question, 'Old Poll') | |
62 | |
63 current = response.context['current_polls'] | |
64 self.assertEqual(len(current), 1) | |
65 if current: | |
66 self.assertEqual(current[0].question, 'Active Poll') | |
67 | |
68 self.assertNotContains(response, 'Future Poll') | |
69 self.assertNotContains(response, 'Disabled Poll') | |
70 | |
71 def testFuture(self): | |
72 poll = Poll.objects.get(question='Future Poll') | |
73 response = self.client.get(reverse('polls-detail', kwargs={'poll_id': | |
74 poll.id})) | |
75 self.assertEqual(response.status_code, 404) | |
76 | |
77 def testDisabled(self): | |
78 poll = Poll.objects.get(question='Disabled Poll') | |
79 response = self.client.get(reverse('polls-detail', kwargs={'poll_id': | |
80 poll.id})) | |
81 self.assertEqual(response.status_code, 404) | |
82 | |
83 def testOld(self): | |
84 poll = Poll.objects.get(question='Old Poll') | |
85 response = self.client.get(reverse('polls-detail', kwargs={'poll_id': | |
86 poll.id})) | |
87 self.assertEqual(response.status_code, 200) | |
88 | |
89 def testActive(self): | |
90 poll = Poll.objects.get(question='Active Poll') | |
91 response = self.client.get(reverse('polls-detail', kwargs={'poll_id': | |
92 poll.id})) | |
93 self.assertEqual(response.status_code, 200) | |
94 | |
95 def testVoteOld(self): | |
96 poll = Poll.objects.get(question='Old Poll') | |
97 response = self.client.get(reverse('polls-vote', kwargs={'poll_id': | |
98 poll.id}), follow=True) | |
99 | |
100 self.assertEqual(len(response.redirect_chain), 1) | |
101 if response.redirect_chain: | |
102 self.assertEqual(response.redirect_chain[0][0], | |
103 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) | |
104 self.assertEqual(response.redirect_chain[0][1], 302) | |
105 | |
106 self.assertEqual(response.status_code, 200) | |
107 | |
108 def testVoteActive(self): | |
109 poll = Poll.objects.get(question='Active Poll') | |
110 response = self.client.get(reverse('polls-vote', kwargs={'poll_id': | |
111 poll.id}), follow=True) | |
112 | |
113 self.assertEqual(len(response.redirect_chain), 0) | |
114 self.assertEqual(response.status_code, 200) | |
115 | |
116 def testVoteFuture(self): | |
117 poll = Poll.objects.get(question='Future Poll') | |
118 response = self.client.get(reverse('polls-vote', kwargs={'poll_id': | |
119 poll.id}), follow=True) | |
120 | |
121 self.assertEqual(len(response.redirect_chain), 1) | |
122 if response.redirect_chain: | |
123 self.assertEqual(response.redirect_chain[0][0], | |
124 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) | |
125 self.assertEqual(response.redirect_chain[0][1], 302) | |
126 | |
127 self.assertEqual(response.status_code, 404) | |
128 | |
129 def testVoteDisabled(self): | |
130 poll = Poll.objects.get(question='Disabled Poll') | |
131 response = self.client.get(reverse('polls-vote', kwargs={'poll_id': | |
132 poll.id}), follow=True) | |
133 | |
134 self.assertEqual(response.status_code, 404) | |
135 | |
136 def testVoteActivePost(self): | |
137 self._voteTest() | |
138 | |
139 def testDeleteVote(self): | |
140 poll = self._voteTest() | |
141 | |
142 response = self.client.post( | |
143 reverse('polls-delete_vote'), | |
144 {'poll_id': poll.id}, | |
145 follow=True) | |
146 | |
147 self.assertEqual(len(response.redirect_chain), 1) | |
148 if response.redirect_chain: | |
149 self.assertEqual(response.redirect_chain[0][0], | |
150 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) | |
151 self.assertEqual(response.redirect_chain[0][1], 302) | |
152 | |
153 self.assertEqual(response.status_code, 200) | |
154 | |
155 choice = Choice.objects.get(pk=1) | |
156 self.assertEqual(choice.votes, 0) | |
157 self.assertTrue(self.user not in choice.voters.all()) | |
158 | |
159 def _voteTest(self): | |
160 poll = Poll.objects.get(question='Active Poll') | |
161 response = self.client.post( | |
162 reverse('polls-vote', kwargs={'poll_id': poll.id}), | |
163 {'choices': 1}, | |
164 follow=True) | |
165 | |
166 self.assertEqual(len(response.redirect_chain), 1) | |
167 if response.redirect_chain: | |
168 self.assertEqual(response.redirect_chain[0][0], | |
169 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) | |
170 self.assertEqual(response.redirect_chain[0][1], 302) | |
171 | |
172 self.assertEqual(response.status_code, 200) | |
173 | |
174 choice = Choice.objects.get(pk=1) | |
175 self.assertEqual(choice.votes, 1) | |
176 self.assertTrue(self.user in choice.voters.all()) | |
177 | |
178 return poll |