App Engine Python SDK version 1.7.4 (2)
[gae.git] / python / lib / django_1_4 / django / contrib / formtools / tests / wizard / forms.py
blob8afbd307214969d3401a2ae234bf4a45f9d83a68
1 from django import forms, http
2 from django.conf import settings
3 from django.test import TestCase
4 from django.template.response import TemplateResponse
5 from django.utils.importlib import import_module
7 from django.contrib.auth.models import User
9 from django.contrib.formtools.wizard.views import (WizardView,
10 SessionWizardView,
11 CookieWizardView)
14 class DummyRequest(http.HttpRequest):
15 def __init__(self, POST=None):
16 super(DummyRequest, self).__init__()
17 self.method = POST and "POST" or "GET"
18 if POST is not None:
19 self.POST.update(POST)
20 self.session = {}
21 self._dont_enforce_csrf_checks = True
24 def get_request(*args, **kwargs):
25 request = DummyRequest(*args, **kwargs)
26 engine = import_module(settings.SESSION_ENGINE)
27 request.session = engine.SessionStore(None)
28 return request
30 class Step1(forms.Form):
31 name = forms.CharField()
33 class Step2(forms.Form):
34 name = forms.CharField()
36 class Step3(forms.Form):
37 data = forms.CharField()
39 class CustomKwargsStep1(Step1):
41 def __init__(self, test=None, *args, **kwargs):
42 self.test = test
43 return super(CustomKwargsStep1, self).__init__(*args, **kwargs)
45 class UserForm(forms.ModelForm):
46 class Meta:
47 model = User
49 UserFormSet = forms.models.modelformset_factory(User, form=UserForm, extra=2)
51 class TestWizard(WizardView):
52 storage_name = 'django.contrib.formtools.wizard.storage.session.SessionStorage'
54 def dispatch(self, request, *args, **kwargs):
55 response = super(TestWizard, self).dispatch(request, *args, **kwargs)
56 return response, self
58 def get_form_kwargs(self, step, *args, **kwargs):
59 kwargs = super(TestWizard, self).get_form_kwargs(step, *args, **kwargs)
60 if step == 'kwargs_test':
61 kwargs['test'] = True
62 return kwargs
64 class FormTests(TestCase):
65 def test_form_init(self):
66 testform = TestWizard.get_initkwargs([Step1, Step2])
67 self.assertEqual(testform['form_list'], {u'0': Step1, u'1': Step2})
69 testform = TestWizard.get_initkwargs([('start', Step1), ('step2', Step2)])
70 self.assertEqual(
71 testform['form_list'], {u'start': Step1, u'step2': Step2})
73 testform = TestWizard.get_initkwargs([Step1, Step2, ('finish', Step3)])
74 self.assertEqual(
75 testform['form_list'], {u'0': Step1, u'1': Step2, u'finish': Step3})
77 def test_first_step(self):
78 request = get_request()
80 testform = TestWizard.as_view([Step1, Step2])
81 response, instance = testform(request)
82 self.assertEqual(instance.steps.current, u'0')
84 testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
85 response, instance = testform(request)
87 self.assertEqual(instance.steps.current, 'start')
89 def test_persistence(self):
90 testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
91 request = get_request({'test_wizard-current_step': 'start',
92 'name': 'data1'})
93 response, instance = testform(request)
94 self.assertEqual(instance.steps.current, 'start')
96 instance.storage.current_step = 'step2'
98 testform2 = TestWizard.as_view([('start', Step1), ('step2', Step2)])
99 request.POST = {'test_wizard-current_step': 'step2'}
100 response, instance = testform2(request)
101 self.assertEqual(instance.steps.current, 'step2')
103 def test_form_condition(self):
104 request = get_request()
106 testform = TestWizard.as_view(
107 [('start', Step1), ('step2', Step2), ('step3', Step3)],
108 condition_dict={'step2': True})
109 response, instance = testform(request)
110 self.assertEqual(instance.get_next_step(), 'step2')
112 testform = TestWizard.as_view(
113 [('start', Step1), ('step2', Step2), ('step3', Step3)],
114 condition_dict={'step2': False})
115 response, instance = testform(request)
116 self.assertEqual(instance.get_next_step(), 'step3')
118 def test_form_kwargs(self):
119 request = get_request()
121 testform = TestWizard.as_view([('start', Step1),
122 ('kwargs_test', CustomKwargsStep1)])
123 response, instance = testform(request)
125 self.assertEqual(instance.get_form_kwargs('start'), {})
126 self.assertEqual(instance.get_form_kwargs('kwargs_test'), {'test': True})
127 self.assertEqual(instance.get_form('kwargs_test').test, True)
129 def test_form_prefix(self):
130 request = get_request()
132 testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
133 response, instance = testform(request)
135 self.assertEqual(instance.get_form_prefix(), 'start')
136 self.assertEqual(instance.get_form_prefix('another'), 'another')
138 def test_form_initial(self):
139 request = get_request()
141 testform = TestWizard.as_view([('start', Step1), ('step2', Step2)],
142 initial_dict={'start': {'name': 'value1'}})
143 response, instance = testform(request)
145 self.assertEqual(instance.get_form_initial('start'), {'name': 'value1'})
146 self.assertEqual(instance.get_form_initial('step2'), {})
148 def test_form_instance(self):
149 request = get_request()
150 the_instance = User()
151 testform = TestWizard.as_view([('start', UserForm), ('step2', Step2)],
152 instance_dict={'start': the_instance})
153 response, instance = testform(request)
155 self.assertEqual(
156 instance.get_form_instance('start'),
157 the_instance)
158 self.assertEqual(
159 instance.get_form_instance('non_exist_instance'),
160 None)
162 def test_formset_instance(self):
163 request = get_request()
164 the_instance1, created = User.objects.get_or_create(
165 username='testuser1')
166 the_instance2, created = User.objects.get_or_create(
167 username='testuser2')
168 testform = TestWizard.as_view([('start', UserFormSet), ('step2', Step2)],
169 instance_dict={'start': User.objects.filter(username='testuser1')})
170 response, instance = testform(request)
172 self.assertEqual(list(instance.get_form_instance('start')), [the_instance1])
173 self.assertEqual(instance.get_form_instance('non_exist_instance'), None)
175 self.assertEqual(instance.get_form().initial_form_count(), 1)
177 def test_done(self):
178 request = get_request()
180 testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
181 response, instance = testform(request)
183 self.assertRaises(NotImplementedError, instance.done, None)
185 def test_revalidation(self):
186 request = get_request()
188 testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
189 response, instance = testform(request)
190 instance.render_done(None)
191 self.assertEqual(instance.storage.current_step, 'start')
194 class SessionFormTests(TestCase):
195 def test_init(self):
196 request = get_request()
197 testform = SessionWizardView.as_view([('start', Step1)])
198 self.assertTrue(isinstance(testform(request), TemplateResponse))
201 class CookieFormTests(TestCase):
202 def test_init(self):
203 request = get_request()
204 testform = CookieWizardView.as_view([('start', Step1)])
205 self.assertTrue(isinstance(testform(request), TemplateResponse))