Opened 16 years ago

Closed 16 years ago

#5982 closed (fixed)

Different behaviour for url parameter in dev run versus test run

Reported by: Manoj Govindan <egmanoj@…> 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)

5982-r7023.diff (2.8 KB ) - added by Russell Keith-Magee 16 years ago.
Test case for bug, against r7023
5982-r7264.diff (5.3 KB ) - added by Leo Shklovskii 16 years ago.
modified test case and patch

Download all attachments as: .zip

Change History (10)

comment:1 by Manoj Govindan <egmanoj@…>, 16 years ago

Cc: egmanoj@… added

comment:2 by Chris Beaven, 16 years ago

Triage Stage: UnreviewedDesign decision needed

So it's probably a bug, I'm guessing the test client should be unquoting. Care to attach your test?

by Russell Keith-Magee, 16 years ago

Attachment: 5982-r7023.diff added

Test case for bug, against r7023

comment:3 by Russell Keith-Magee, 16 years ago

Triage Stage: Design decision neededAccepted

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 Leo Shklovskii, 16 years ago

Owner: changed from nobody to Leo Shklovskii
Status: newassigned

by Leo Shklovskii, 16 years ago

Attachment: 5982-r7264.diff added

modified test case and patch

comment:5 by Leo Shklovskii, 16 years ago

Has patch: set
Triage Stage: AcceptedReady 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 Leo Shklovskii, 16 years ago

Triage Stage: Ready for checkinAccepted

moving back to accepted (wasn't sure if I should have moved it)

comment:7 by Jacob, 16 years ago

Triage Stage: AcceptedReady for checkin

comment:8 by Malcolm Tredinnick, 16 years ago

Resolution: fixed
Status: assignedclosed

(In [7330]) Fixed #5982 -- Changed test client's URL processing to match core's (everything
gets run through urllib.unquote()). Patch from Leo Shklovskii and Russell
Keith-Magee.

Note: See TracTickets for help on using tickets.
Back to Top