1 | Index: tests.py
|
---|
2 | ===================================================================
|
---|
3 | --- tests.py (revision 0)
|
---|
4 | +++ tests.py (revision 0)
|
---|
5 | @@ -0,0 +1,89 @@
|
---|
6 | +from django import newforms as forms
|
---|
7 | +from django.contrib.formtools import preview
|
---|
8 | +from django import http
|
---|
9 | +from django.conf import settings
|
---|
10 | +from django.test import TestCase
|
---|
11 | +from django.test.client import Client
|
---|
12 | +
|
---|
13 | +
|
---|
14 | +success_string = "Done was called!"
|
---|
15 | +
|
---|
16 | +class TestFormPreview(preview.FormPreview):
|
---|
17 | + def done(self, request, cleaned_data):
|
---|
18 | + return http.HttpResponse(success_string)
|
---|
19 | +
|
---|
20 | +class TestForm(forms.Form):
|
---|
21 | + field1 = forms.CharField()
|
---|
22 | + field1_ = forms.CharField()
|
---|
23 | +
|
---|
24 | +test_data = {'field1': u'foo',
|
---|
25 | + 'field1_': u'asdf'}
|
---|
26 | +
|
---|
27 | +class tests(TestCase):
|
---|
28 | + def setUp(self):
|
---|
29 | + settings.ROOT_URLCONF = 'django.contrib.formtools.test_urls'
|
---|
30 | + self.preview = preview.FormPreview(TestForm) # Create a FormPreview instance to share between tests
|
---|
31 | + self.input = '<input type="hidden" name="%s" value="%s" />' % (self.preview.unused_name('stage'), "%d")
|
---|
32 | +
|
---|
33 | + def testUnusedName(self):
|
---|
34 | + """ Verify that unused_name() correctly appends underscores to
|
---|
35 | + a name until the name is unique.
|
---|
36 | +
|
---|
37 | + """
|
---|
38 | + self.assertEqual(self.preview.unused_name('field1'), 'field1__')
|
---|
39 | +
|
---|
40 | + def testFormGet(self):
|
---|
41 | + """
|
---|
42 | + Test contrib.formtools.preview form retrieval.
|
---|
43 | +
|
---|
44 | + Use the client library to see if we can sucessfully retrieve
|
---|
45 | + the form (mostly testing the setup ROOT_URLCONF
|
---|
46 | + process). Verify that an additional hidden input field
|
---|
47 | + is created to manage the stage.
|
---|
48 | +
|
---|
49 | + """
|
---|
50 | + response = self.client.get('/test1/')
|
---|
51 | + stage = self.input % 1
|
---|
52 | + self.assertContains(response, stage, 1)
|
---|
53 | +
|
---|
54 | + def testFormPreview(self):
|
---|
55 | + """
|
---|
56 | + Test contrib.formtools.preview form preview rendering.
|
---|
57 | +
|
---|
58 | + Use the client library to POST to the form to see if a preview
|
---|
59 | + is returned. If we do get a form back check that the hidden
|
---|
60 | + value is correctly managing the state of the form.
|
---|
61 | +
|
---|
62 | + """
|
---|
63 | + # Pass strings for form submittal and add stage variable to
|
---|
64 | + # show we previously saw first stage of the form.
|
---|
65 | + test_data.update({'stage':1})
|
---|
66 | + response = self.client.post('/test1/', test_data)
|
---|
67 | + # Check to confirm stage is set to 2 in output form.
|
---|
68 | + stage = self.input % 2
|
---|
69 | + self.assertContains(response, stage, 1)
|
---|
70 | +
|
---|
71 | +
|
---|
72 | + def testFormSubmit(self):
|
---|
73 | + """
|
---|
74 | + Test contrib.formtools.preview form submittal.
|
---|
75 | +
|
---|
76 | + Use the client library to POST to the form with stage set to 3
|
---|
77 | + to see if our forms done() method is called. Check first
|
---|
78 | + without the security hash, verify failure, retry with security
|
---|
79 | + hash and verify sucess.
|
---|
80 | +
|
---|
81 | + """
|
---|
82 | + # Pass strings for form submittal and add stage variable to
|
---|
83 | + # show we previously saw first stage of the form.
|
---|
84 | + test_data.update({'stage':2})
|
---|
85 | + response = self.client.post('/test1/', test_data)
|
---|
86 | + self.failIfEqual(response.content, success_string)
|
---|
87 | + hash = self.preview.security_hash(None, TestForm(test_data));
|
---|
88 | + test_data.update({'hash':hash})
|
---|
89 | + response = self.client.post('/test1/', test_data)
|
---|
90 | + self.assertEqual(response.content, success_string);
|
---|
91 | +
|
---|
92 | +
|
---|
93 | +if __name__ == '__main__':
|
---|
94 | + unittest.main()
|
---|
95 | Index: models.py
|
---|
96 | ===================================================================
|
---|
97 | --- models.py (revision 0)
|
---|
98 | +++ models.py (revision 0)
|
---|
99 | @@ -0,0 +1 @@
|
---|
100 | +""" models.py (even empty) currently required by the runtests.py to enable unit tests """
|
---|
101 | Index: test_urls.py
|
---|
102 | ===================================================================
|
---|
103 | --- test_urls.py (revision 0)
|
---|
104 | +++ test_urls.py (revision 0)
|
---|
105 | @@ -0,0 +1,12 @@
|
---|
106 | +"""
|
---|
107 | +
|
---|
108 | +This is a urlconf to be loaded by tests.py. Add any urls needed
|
---|
109 | +for tests only.
|
---|
110 | +
|
---|
111 | +"""
|
---|
112 | +from django.conf.urls.defaults import *
|
---|
113 | +from django.contrib.formtools.tests import *
|
---|
114 | +
|
---|
115 | +urlpatterns = patterns('',
|
---|
116 | + (r'^test1/', TestFormPreview(TestForm)),
|
---|
117 | + )
|
---|