On Tuesday, 7 August 2012 10:30:22 UTC+8, jscn  wrote:
> On Monday, 9 July 2012 16:43:19 UTC+8, James Rivett-Carnac  wrote:
> 
> > I am trying to write test cases for a django 1.4 CookieWizardView 
> > (django.contrib.formtools.wizard.views.CookieWizardView), and I'm not sure 
> > how to handle sending multiple posts to the view.
> 
> > 
> 
> > class TestWizardView(TestCase):
> 
> >     def setUp(self):
> 
> >         self.form_one_post = QueryDict('field_1=value')
> 
> >         self.form_two_post = QueryDict('field_2=value2')
> 
> >         self.c = Client()
> 
> > 
> 
> >     def test_form(self):
> 
> >         response = self.c.post('/wzd/url/',self.form_one_post)
> 
> >         self.assertContains(...)
> 
> >         response = self.c.post('/wzd/url/',self.form_two_post)
> 
> >         self.assertRedirects(...)  # Successful post should redirect to 
> > Done page.
> 
> > 
> 
> > But when I do this, i get:
> 
> > ValidationError: 'ManagementForm data is missing or has been tampered.'
> 
> > 
> 
> > This makes sense, since I haven't put any post information for the 
> > management_form (django.contrib.formtools.wizard.forms.ManagementForm), but 
> > I don't know where to get that information/where to put that information or 
> > what that information is supposed to be.
> 
> > 
> 
> > Any help on how to resolve this or better ways to implement a view test for 
> > a wizard would be appreciated.
> 
> > 
> 
> > James
> 
> 
> 
> I've been having the exact same problem. After looking at the unit tests for 
> the form wizard and much messing around, I eventually figured it out. You're 
> right about needing to pass in some extra data in.
> 
> 
> 
> Specifically, you need to add a field to the POST data called 
> 'your_views_name-current_step' with the zero-based value of the step to which 
> you're POSTing. Additionally, you need to prepend the zero-based step number 
> to the names of the other fields you're POSTing.
> 
> 
> 
> Assuming you have some classes like:
> 
> 
> 
> class MyForm(forms.Form):
> 
>     some_field = forms.CharField()
> 
> 
> 
> class MyWizard(SessionWizardView):
> 
>     # ...do some stuff...
> 
> 
> 
> And a url like:
> 
> 
> 
> url(r'^wizard/$', views.MyWizard.as_view([MyForm, MyOtherForm]))
> 
> 
> 
> 
> 
> Then your test needs to look like:
> 
> class TestWizardView(TestCase):
> 
>     def test_form(self):
> 
>         data = {'my_wizard_view-current_step': '0', '0-some_field': 
> 'whatever'}
> 
>         response = self.client.post('/wizard/', data=data)
> 
>         # your assertions here
> 
> 
> 
> Josh

Oops, that should be: data = {'my_wizard-current_step': '0', '0-some_field': 
'whatever'}

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/MaWDVfBJsZ8J.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to