Skip to content

Commit f2303b6

Browse files
committed
Fixed #4402 -- Modified test client to allow multi-valued inputs on GET requests. Thanks for the suggestion, eddymul@gmail.com.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5741 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent 6a4f164 commit f2303b6

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

django/test/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def get(self, path, data={}, **extra):
195195
'CONTENT_LENGTH': None,
196196
'CONTENT_TYPE': 'text/html; charset=utf-8',
197197
'PATH_INFO': path,
198-
'QUERY_STRING': urlencode(data),
198+
'QUERY_STRING': urlencode(data, doseq=True),
199199
'REQUEST_METHOD': 'GET',
200200
}
201201
r.update(extra)

django/utils/http.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ def urlencode(query, doseq=0):
3030
"""
3131
if hasattr(query, 'items'):
3232
query = query.items()
33-
return urllib.urlencode([(smart_str(k), smart_str(v)) for k,
34-
v in query], doseq)
33+
return urllib.urlencode(
34+
[(smart_str(k),
35+
isinstance(v, (list,tuple)) and [smart_str(i) for i in v] or smart_str(v))
36+
for k, v in query],
37+
doseq)
3538

tests/modeltests/test_client/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,18 @@ def test_valid_form(self):
122122
self.assertEqual(response.status_code, 200)
123123
self.assertTemplateUsed(response, "Valid POST Template")
124124

125+
def test_valid_form_with_hints(self):
126+
"GET a form, providing hints in the GET data"
127+
hints = {
128+
'text': 'Hello World',
129+
'multi': ('b','c','e')
130+
}
131+
response = self.client.get('/test_client/form_view/', data=hints)
132+
self.assertEqual(response.status_code, 200)
133+
self.assertTemplateUsed(response, "Form GET Template")
134+
# Check that the multi-value data has been rolled out ok
135+
self.assertContains(response, 'Select a valid choice.', 0)
136+
125137
def test_incomplete_data_form(self):
126138
"POST incomplete data to a form"
127139
post_data = {

tests/modeltests/test_client/views.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def form_view(request):
8484
t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
8585
c = Context({'form': form})
8686
else:
87-
form = TestForm()
87+
form = TestForm(request.GET)
8888
t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
8989
c = Context({'form': form})
9090

@@ -107,7 +107,6 @@ def form_view_with_template(request):
107107
'message': message
108108
}
109109
)
110-
111110

112111
def login_protected_view(request):
113112
"A simple view that is login protected."

0 commit comments

Comments
 (0)