Opened 17 years ago
Closed 17 years ago
#5982 closed (fixed)
Different behaviour for url parameter in dev run versus test run
Reported by: | Owned by: | Leo Shklovskii | |
---|---|---|---|
Component: | Testing framework | Version: | dev |
Severity: | Keywords: | ||
Cc: | egmanoj@… | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
URL configuration:
url(r'^/find_thing/(?P<thing_name>.+)/$', 'django_mi.app.views.find_thing', name = 'find_thing'),
View:
def find_thing(request, thing_name): print thing_name # perform look up of thing and return.
In the development environment (manage.py runserver) the view works well when passed a string with a space in it, say 'my thing'.
The portion of the url representing the parameter shows up as 'my%20thing'.
I then wrote a test for the view using Django's test client. I used the utility reverse() method to pass the path to Client.get().
The test failed (the query set was empty) for identical input.
I added a print statement inside the view. On accessing the view in the development environment the parameter was printed as
'my thing'. However on running the test it was printed as 'my%20thing'. The latter caused the database lookup to return empty.
Why is the behaviour different in development/production and testing?
Attachments (2)
Change History (10)
comment:1 by , 17 years ago
Cc: | added |
---|
comment:2 by , 17 years ago
Triage Stage: | Unreviewed → Design decision needed |
---|
comment:3 by , 17 years ago
Triage Stage: | Design decision needed → Accepted |
---|
Bug appears to be real. I've added a test case; haven't had a chance to dig around for a fix.
comment:4 by , 17 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:5 by , 17 years ago
Has patch: | set |
---|---|
Triage Stage: | Accepted → Ready for checkin |
Fixing this bug by adding urllib.unquote to the spot where PATH_INFO gets set in the test client. Based on
what I saw at django.core.servers.basehttp:565. That occurs for requests that come in via a normal client (on a dev server).
I've made a few minor changes to the test itself:
- mixed space/tab indentation changed to all spaces
- added cases to do a POST as well as a GET (since there are two separate code paths in the test client that set PATH_INFO)
Zero functional change cleanup changes in this patch:
- removed unused imports from tests/regressiontests/test_client_regress/views.py
- added myself to the AUTHORS file
comment:6 by , 17 years ago
Triage Stage: | Ready for checkin → Accepted |
---|
moving back to accepted (wasn't sure if I should have moved it)
comment:7 by , 17 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
comment:8 by , 17 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
So it's probably a bug, I'm guessing the test client should be unquoting. Care to attach your test?