annotate gpp/polls/tests/view_tests.py @ 459:9d3bd7304050

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