Im testing a redirection (login required) on a view.
Test snippet:
...
expected_url = build_url(
self.login_url,
get={'next': self.url}
)
self.assertRedirects(
response,
expected_url,
status_code=302
)
I get AssertionError because expected_url is percent encoded, the one django is displaying through login_required (django.contrib.auth.decorators.login_required) is not percent-encoded.
So I get:
AssertionError: Response redirected to 'http://testserver/log_in/?next=/payments/purchase/'
expected 'http://testserver/log_in/?next=payments%3Apurchase'
I have my build_url func as described below. Im encoding a dict with urllib.urlencode.
build_url source: How do i pass GET parameters using django urlresolvers reverse
def build_url(*args, **kwargs):
get = kwargs.pop('get', {})
url = reverse(*args, **kwargs)
if get:
url += '?' + urllib.urlencode(get)
return url
Questions:
Is there a way to tell django to display
login_urlpercent-encoded?Should I use something instead
urllib.urlencodeto build a url from adict?- Is percent-encoding important so I must follow it?