Opened 14 years ago

Closed 10 years ago

#12571 closed Bug (fixed)

Test client doesn't set WSGIRequest instance on response

Reported by: rvdrijst Owned by: Unai Zalakain
Component: Testing framework Version: dev
Severity: Normal Keywords: test client request response WSGIRequest
Cc: rvdrijst@… 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

When you call get() or post() on the Client instance in a testcase, the returned response contains a request attribute that is a simple dict created by the client to simulate a request. This can be useful, but it is not the request instance that is used in views and middleware.

It would be very useful to have the request instance as seen (and possibly modified) by the view and middleware. This is the WSGIRequest instance created in the ClientHandler, used by the Client. This instance is based on the simple dict that is currently set on the response as the request.

I came across this problem before and worked around it, but now with the new messages framework, a clear usecase presents itself. You cannot get to the messages set by a tested view, simply because the response.request is not the WSGIRequest instance that was used for setting the messages.

A (backwards compatible) solution is to let the ClientHandler add this WSGIRequest instance as an attribute called wsgi_request to the response before it returns it.

Using this solution, you can get to the message storage by doing messages.get_messages(response.wsgi_request). It can also be useful for testing middleware, decorators and other functionalities that modify the request in any way.

Attached is the extremely simple patch that makes this one-line addition.

Attachments (1)

test_client_request.diff (595 bytes ) - added by rvdrijst 14 years ago.
adds the wsgi_request to the client response

Download all attachments as: .zip

Change History (11)

by rvdrijst, 14 years ago

Attachment: test_client_request.diff added

adds the wsgi_request to the client response

comment:1 by Russell Keith-Magee, 14 years ago

milestone: 1.2
Triage Stage: UnreviewedAccepted
Version: SVN

comment:2 by Chris Beaven, 14 years ago

Needs documentation: set
Needs tests: set

comment:3 by Matt McClanahan, 13 years ago

Severity: Normal
Type: Bug

comment:4 by Aymeric Augustin, 12 years ago

UI/UX: unset

Change UI/UX from NULL to False.

comment:5 by Aymeric Augustin, 12 years ago

Easy pickings: unset

Change Easy pickings from NULL to False.

comment:6 by Unai Zalakain, 10 years ago

This would solve the problems mentioned in https://code.djangoproject.com/ticket/15179#comment:24

comment:7 by Unai Zalakain, 10 years ago

Owner: changed from nobody to Unai Zalakain
Status: newassigned

comment:8 by Unai Zalakain, 10 years ago

Needs documentation: unset
Needs tests: unset
Version: master

comment:9 by Tim Graham, 10 years ago

Triage Stage: AcceptedReady for checkin

comment:10 by Tim Graham <timograham@…>, 10 years ago

Resolution: fixed
Status: assignedclosed

In 9eb16031ca837624433c49646289b50f9566a25d:

Fixed #12571 -- Attached originating WSGIRequest to test client responses.

Originating WSGIRequests are now attached to the wsgi_request attribute of
the HttpResponse returned by the testing client.

Thanks rvdrijst for the suggestion.

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