view polls/tests/view_tests.py @ 733:18e42866b34d

For #56, default to anonymous radio button on donations form. Also improve the donations admin page with a date hierarchy and other fields on the list display.
author Brian Neal <bgneal@gmail.com>
date Thu, 24 Oct 2013 21:03:03 -0500
parents ee87ea74d46b
children
line wrap: on
line source
"""
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