Opened 13 years ago

Last modified 11 years ago

#4476 closed

Modify test client to follow redirect chains — at Version 3

Reported by: Chris Moffitt <chris.moffitt@…> Owned by: Adrian Holovaty
Component: Testing framework Version: master
Severity: Keywords:
Cc: kbussell@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Russell Keith-Magee)

When using assertRedirects, I find myself doing an assert redirects, then wanting to validate the text where I'm redirecting. The process seems a little clunky and an assertRedirectContains would be useful.

Current process:

self.assertRedirects(response, '/confirm/', status_code=302, target_status_code=200)
response = self.client.get('/confirm/')
self.assertContains(response, "Total = $54.50", count=1, status_code=200)

It would be nice to have something like:

self.assertRedirectContains(response, "Total = $54.50", count=1, status_code=302, target_status_code=200)

I'm assuming there's no other shortcut I'm missing.

* UPDATE (from russellm) *

Rather that assertRedirectContains, I'm favouring a modification to the test client that will follow redirects. Details in the comment below

Change History (3)

comment:1 Changed 13 years ago by John Shaffer <jshaffer2112@…>

Component: UncategorizedUnit test system
Owner: changed from Jacob to Adrian Holovaty

comment:2 Changed 13 years ago by Simon G. <dev@…>

Triage Stage: UnreviewedDesign decision needed

comment:3 Changed 13 years ago by Russell Keith-Magee

Description: modified (diff)
Summary: Proposal for assertRedirectContainsModify test client to follow redirect chains
Triage Stage: Design decision neededAccepted

I'm not a fan of assertRedirectContains, because it sounds like start of aggregating groups of tests together. It works for a single redirect, but then you have a page that redirects to a redirect, so you need to add 'assertRedirectRedirectContains', and then the madness starts :-). So, -1 to the literal idea.

However, I'm going to mark the ticket is as accepted and change the summary, because the general problem is valid.

Rather than assertRedirectContains, I'm going to suggest that the test Client should be modified to do what a normal web client will do - follow redirect trails. So, if you had a site with:

/first -> redirects to /second
/second -> redirects to /final
/final -> a page of content

response = client.get('/first', follow=True)

you would get back the content at '/final', with a response code of 200. The response should also have some extra meta-data to indicate the paths that were visited along the way. There may also be a need to modify the assertions to allow for checking that a redirect occurred; e.g.,

assertContains(response, "content of /final", count=1, status_code=200, redirected=True)

However, I'll leave the details of any assertion changes as a detail for the implementer.

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