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
,
14 class DummyRequest(http
.HttpRequest
):
15 def __init__(self
, POST
=None):
16 super(DummyRequest
, self
).__init
__()
17 self
.method
= POST
and "POST" or "GET"
19 self
.POST
.update(POST
)
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)
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
):
43 return super(CustomKwargsStep1
, self
).__init
__(*args
, **kwargs
)
45 class UserForm(forms
.ModelForm
):
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
)
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':
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
)])
71 testform
['form_list'], {u
'start': Step1
, u
'step2': Step2
})
73 testform
= TestWizard
.get_initkwargs([Step1
, Step2
, ('finish', Step3
)])
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',
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
)
156 instance
.get_form_instance('start'),
159 instance
.get_form_instance('non_exist_instance'),
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)
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
):
196 request
= get_request()
197 testform
= SessionWizardView
.as_view([('start', Step1
)])
198 self
.assertTrue(isinstance(testform(request
), TemplateResponse
))
201 class CookieFormTests(TestCase
):
203 request
= get_request()
204 testform
= CookieWizardView
.as_view([('start', Step1
)])
205 self
.assertTrue(isinstance(testform(request
), TemplateResponse
))