Mercurial > public > sg101
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/polls/tests/view_tests.py Sat Jun 25 23:23:20 2011 +0000 @@ -0,0 +1,178 @@ +""" +Tests for the views in the polls application. + +""" +import datetime + +from django.contrib.auth.models import User +from django.test import TestCase +from django.core.urlresolvers import reverse +from polls.models import Poll, Choice + + +class PollHomeTest(TestCase): + + def setUp(self): + now = datetime.datetime.now() + Poll.objects.all().delete() + + past = now - datetime.timedelta(7) + future = now + datetime.timedelta(7) + + Poll.objects.create(start_date=past, + end_date=past, + is_enabled=True, + question='Old Poll') + + active = Poll.objects.create(start_date=past, + end_date=future, + is_enabled=True, + question='Active Poll') + + Poll.objects.create(start_date=future, + end_date=future, + is_enabled=True, + question='Future Poll') + + Poll.objects.create(start_date=past, + end_date=future, + is_enabled=False, + question='Disabled Poll') + + choice1 = Choice.objects.create(poll=active, choice="Yes") + choice2 = Choice.objects.create(poll=active, choice="Yes") + + self.username = 'test_user' + self.pw = 'password' + self.user = User.objects.create_user(self.username, '', self.pw) + self.user.save() + self.assertTrue(self.client.login(username=self.username, + password=self.pw)) + + def tearDown(self): + self.client.logout() + + def testHome(self): + response = self.client.get(reverse('polls-main')) + + old = response.context['old_polls'] + self.assertEqual(len(old), 1) + if old: + self.assertEqual(old[0].question, 'Old Poll') + + current = response.context['current_polls'] + self.assertEqual(len(current), 1) + if current: + self.assertEqual(current[0].question, 'Active Poll') + + self.assertNotContains(response, 'Future Poll') + self.assertNotContains(response, 'Disabled Poll') + + def testFuture(self): + poll = Poll.objects.get(question='Future Poll') + response = self.client.get(reverse('polls-detail', kwargs={'poll_id': + poll.id})) + self.assertEqual(response.status_code, 404) + + def testDisabled(self): + poll = Poll.objects.get(question='Disabled Poll') + response = self.client.get(reverse('polls-detail', kwargs={'poll_id': + poll.id})) + self.assertEqual(response.status_code, 404) + + def testOld(self): + poll = Poll.objects.get(question='Old Poll') + response = self.client.get(reverse('polls-detail', kwargs={'poll_id': + poll.id})) + self.assertEqual(response.status_code, 200) + + def testActive(self): + poll = Poll.objects.get(question='Active Poll') + response = self.client.get(reverse('polls-detail', kwargs={'poll_id': + poll.id})) + self.assertEqual(response.status_code, 200) + + def testVoteOld(self): + poll = Poll.objects.get(question='Old Poll') + response = self.client.get(reverse('polls-vote', kwargs={'poll_id': + poll.id}), follow=True) + + self.assertEqual(len(response.redirect_chain), 1) + if response.redirect_chain: + self.assertEqual(response.redirect_chain[0][0], + 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) + self.assertEqual(response.redirect_chain[0][1], 302) + + self.assertEqual(response.status_code, 200) + + def testVoteActive(self): + poll = Poll.objects.get(question='Active Poll') + response = self.client.get(reverse('polls-vote', kwargs={'poll_id': + poll.id}), follow=True) + + self.assertEqual(len(response.redirect_chain), 0) + self.assertEqual(response.status_code, 200) + + def testVoteFuture(self): + poll = Poll.objects.get(question='Future Poll') + response = self.client.get(reverse('polls-vote', kwargs={'poll_id': + poll.id}), follow=True) + + self.assertEqual(len(response.redirect_chain), 1) + if response.redirect_chain: + self.assertEqual(response.redirect_chain[0][0], + 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) + self.assertEqual(response.redirect_chain[0][1], 302) + + self.assertEqual(response.status_code, 404) + + def testVoteDisabled(self): + poll = Poll.objects.get(question='Disabled Poll') + response = self.client.get(reverse('polls-vote', kwargs={'poll_id': + poll.id}), follow=True) + + self.assertEqual(response.status_code, 404) + + def testVoteActivePost(self): + self._voteTest() + + def testDeleteVote(self): + poll = self._voteTest() + + response = self.client.post( + reverse('polls-delete_vote'), + {'poll_id': poll.id}, + follow=True) + + self.assertEqual(len(response.redirect_chain), 1) + if response.redirect_chain: + self.assertEqual(response.redirect_chain[0][0], + 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) + self.assertEqual(response.redirect_chain[0][1], 302) + + self.assertEqual(response.status_code, 200) + + choice = Choice.objects.get(pk=1) + self.assertEqual(choice.votes, 0) + self.assertTrue(self.user not in choice.voters.all()) + + def _voteTest(self): + poll = Poll.objects.get(question='Active Poll') + response = self.client.post( + reverse('polls-vote', kwargs={'poll_id': poll.id}), + {'choices': 1}, + follow=True) + + self.assertEqual(len(response.redirect_chain), 1) + if response.redirect_chain: + self.assertEqual(response.redirect_chain[0][0], + 'http://testserver' + reverse('polls-detail', kwargs={'poll_id': poll.id})) + self.assertEqual(response.redirect_chain[0][1], 302) + + self.assertEqual(response.status_code, 200) + + choice = Choice.objects.get(pk=1) + self.assertEqual(choice.votes, 1) + self.assertTrue(self.user in choice.voters.all()) + + return poll