Skip to content

Commit f273290

Browse files
committed
Separated out the forms tests.
1 parent 81e2c68 commit f273290

File tree

5 files changed

+126
-0
lines changed

5 files changed

+126
-0
lines changed
+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
[
2+
{
3+
"pk": 1,
4+
"model": "polls.poll",
5+
"fields": {
6+
"pub_date": "2011-04-09 23:44:02",
7+
"question": "Are you learning about testing in Django?"
8+
}
9+
},
10+
{
11+
"pk": 2,
12+
"model": "polls.poll",
13+
"fields": {
14+
"pub_date": "2011-04-16 14:42:52",
15+
"question": "How do you feel today?"
16+
}
17+
},
18+
{
19+
"pk": 1,
20+
"model": "polls.choice",
21+
"fields": {
22+
"votes": 1,
23+
"poll": 1,
24+
"choice": "Yes"
25+
}
26+
},
27+
{
28+
"pk": 2,
29+
"model": "polls.choice",
30+
"fields": {
31+
"votes": 0,
32+
"poll": 1,
33+
"choice": "No"
34+
}
35+
},
36+
{
37+
"pk": 3,
38+
"model": "polls.choice",
39+
"fields": {
40+
"votes": 1,
41+
"poll": 2,
42+
"choice": "Alright."
43+
}
44+
},
45+
{
46+
"pk": 4,
47+
"model": "polls.choice",
48+
"fields": {
49+
"votes": 0,
50+
"poll": 2,
51+
"choice": "Meh."
52+
}
53+
},
54+
{
55+
"pk": 5,
56+
"model": "polls.choice",
57+
"fields": {
58+
"votes": 0,
59+
"poll": 2,
60+
"choice": "Not so good."
61+
}
62+
}
63+
]

polls/forms.py

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ def __init__(self, *args, **kwargs):
1717
self.fields['choice'] = forms.ModelChoiceField(queryset=Choice.objects.filter(poll=self.instance.pk), empty_label=None, widget=forms.RadioSelect)
1818

1919
def save(self):
20+
if not self.is_valid():
21+
raise forms.ValidationError("PollForm was not validated first before trying to call 'save'.")
22+
2023
choice = self.cleaned_data['choice']
2124
choice.record_vote()
2225
return choice

polls/tests/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from polls.tests.forms import *
2+
from polls.tests.views import *

polls/tests/forms.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
from django.test import TestCase
2+
from polls.forms import PollForm
3+
from polls.models import Poll, Choice
4+
5+
6+
class PollFormTestCase(TestCase):
7+
fixtures = ['polls_forms_testdata.json']
8+
9+
def setUp(self):
10+
super(PollFormTestCase, self).setUp()
11+
self.poll_1 = Poll.objects.get(pk=1)
12+
self.poll_2 = Poll.objects.get(pk=2)
13+
14+
def test_init(self):
15+
# Test successful init without data.
16+
form = PollForm(instance=self.poll_1)
17+
self.assertTrue(isinstance(form.instance, Poll))
18+
self.assertEqual(form.instance.pk, self.poll_1.pk)
19+
self.assertEqual([c for c in form.fields['choice'].choices], [(1, u'Yes'), (2, u'No')])
20+
21+
# Test successful init with data.
22+
form = PollForm({'choice': 3}, instance=self.poll_2)
23+
self.assertTrue(isinstance(form.instance, Poll))
24+
self.assertEqual(form.instance.pk, self.poll_2.pk)
25+
self.assertEqual([c for c in form.fields['choice'].choices], [(3, u'Alright.'), (4, u'Meh.'), (5, u'Not so good.')])
26+
27+
# Test a failed init without data.
28+
self.assertRaises(KeyError, PollForm)
29+
30+
# Test a failed init with data.
31+
self.assertRaises(KeyError, PollForm, {})
32+
33+
def test_save(self):
34+
self.assertEqual(self.poll_1.choice_set.get(pk=1).votes, 1)
35+
self.assertEqual(self.poll_1.choice_set.get(pk=2).votes, 0)
36+
37+
# Test the first choice.
38+
form_1 = PollForm({'choice': 1}, instance=self.poll_1)
39+
form_1.save()
40+
self.assertEqual(self.poll_1.choice_set.get(pk=1).votes, 2)
41+
self.assertEqual(self.poll_1.choice_set.get(pk=2).votes, 0)
42+
43+
# Test the second choice.
44+
form_2 = PollForm({'choice': 2}, instance=self.poll_1)
45+
form_2.save()
46+
self.assertEqual(self.poll_1.choice_set.get(pk=1).votes, 2)
47+
self.assertEqual(self.poll_1.choice_set.get(pk=2).votes, 1)
48+
49+
# Test the other poll.
50+
self.assertEqual(self.poll_2.choice_set.get(pk=3).votes, 1)
51+
self.assertEqual(self.poll_2.choice_set.get(pk=4).votes, 0)
52+
self.assertEqual(self.poll_2.choice_set.get(pk=5).votes, 0)
53+
54+
form_3 = PollForm({'choice': 5}, instance=self.poll_2)
55+
form_3.save()
56+
self.assertEqual(self.poll_2.choice_set.get(pk=3).votes, 1)
57+
self.assertEqual(self.poll_2.choice_set.get(pk=4).votes, 0)
58+
self.assertEqual(self.poll_2.choice_set.get(pk=5).votes, 1)
File renamed without changes.

0 commit comments

Comments
 (0)