Skip to content

Commit

Permalink
Fixes #3212 -- Added code to test client to allow posting of multi-fo…
Browse files Browse the repository at this point in the history
…rm values (e.g., MultipleChoiceFields). Thanks, Ben Dean Kawamura.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@4774 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
freakboy3742 committed Mar 22, 2007
1 parent 635fedc commit f157bce
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 1 deletion.
8 changes: 8 additions & 0 deletions django/test/client.py
Expand Up @@ -69,6 +69,14 @@ def encode_multipart(boundary, data):
'', '',
value.read() value.read()
]) ])
elif hasattr(value, '__iter__'):
for item in value:
lines.extend([
'--' + boundary,
'Content-Disposition: form-data; name="%s"' % key,
'',
str(item)
])
else: else:
lines.extend([ lines.extend([
'--' + boundary, '--' + boundary,
Expand Down
38 changes: 37 additions & 1 deletion tests/modeltests/test_client/models.py
Expand Up @@ -81,7 +81,43 @@ def test_redirect(self):


# Check that the response was a 302 (redirect) # Check that the response was a 302 (redirect)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)


def test_valid_form(self):
"POST valid data to a form"
post_data = {
'text': 'Hello World',
'email': 'foo@example.com',
'value': 37,
'single': 'b',
'multi': ('b','c','e')
}
response = self.client.post('/test_client/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.template.name, "Valid POST Template")

def test_incomplete_data_form(self):
"POST incomplete data to a form"
post_data = {
'text': 'Hello World',
'value': 37
}
response = self.client.post('/test_client/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.template.name, "Invalid POST Template")

def test_form_error(self):
"POST erroneous data to a form"
post_data = {
'text': 'Hello World',
'email': 'not an email address',
'value': 37,
'single': 'b',
'multi': ('b','c','e')
}
response = self.client.post('/test_client/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.template.name, "Invalid POST Template")

def test_unknown_page(self): def test_unknown_page(self):
"GET an invalid URL" "GET an invalid URL"
response = self.client.get('/test_client/unknown_view/') response = self.client.get('/test_client/unknown_view/')
Expand Down
1 change: 1 addition & 0 deletions tests/modeltests/test_client/urls.py
Expand Up @@ -6,6 +6,7 @@
(r'^post_view/$', views.post_view), (r'^post_view/$', views.post_view),
(r'^raw_post_view/$', views.raw_post_view), (r'^raw_post_view/$', views.raw_post_view),
(r'^redirect_view/$', views.redirect_view), (r'^redirect_view/$', views.redirect_view),
(r'^form_view/$', views.form_view),
(r'^login_protected_view/$', views.login_protected_view), (r'^login_protected_view/$', views.login_protected_view),
(r'^session_view/$', views.session_view), (r'^session_view/$', views.session_view),
(r'^broken_view/$', views.broken_view) (r'^broken_view/$', views.broken_view)
Expand Down
34 changes: 34 additions & 0 deletions tests/modeltests/test_client/views.py
Expand Up @@ -2,6 +2,8 @@
from django.template import Context, Template from django.template import Context, Template
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.newforms.forms import Form
from django.newforms import fields


def get_view(request): def get_view(request):
"A simple view that expects a GET request, and returns a rendered template" "A simple view that expects a GET request, and returns a rendered template"
Expand Down Expand Up @@ -45,7 +47,39 @@ def raw_post_view(request):
def redirect_view(request): def redirect_view(request):
"A view that redirects all requests to the GET view" "A view that redirects all requests to the GET view"
return HttpResponseRedirect('/test_client/get_view/') return HttpResponseRedirect('/test_client/get_view/')

TestChoices = (
('a', 'First Choice'),
('b', 'Second Choice'),
('c', 'Third Choice'),
('d', 'Fourth Choice'),
('e', 'Fifth Choice')
)

class TestForm(Form):
text = fields.CharField()
email = fields.EmailField()
value = fields.IntegerField()
single = fields.ChoiceField(choices=TestChoices)
multi = fields.MultipleChoiceField(choices=TestChoices)

def form_view(request):
"A view that tests a simple form"
if request.method == 'POST':
form = TestForm(request.POST)
if form.is_valid():
t = Template('Valid POST data.', name='Valid POST Template')
c = Context()
else:
t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
c = Context({'form': form})
else:
form = TestForm()
t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
c = Context({'form': form})


return HttpResponse(t.render(c))

def login_protected_view(request): def login_protected_view(request):
"A simple view that is login protected." "A simple view that is login protected."
t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template') t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
Expand Down

0 comments on commit f157bce

Please sign in to comment.