view polls/tests/view_tests.py @ 722:71d17d267e27

Added an ajax form to upload photos & update post box w/image code.
author Brian Neal <bgneal@gmail.com>
date Sat, 21 Sep 2013 17:00:49 -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