﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
30121	assertURLEqual() should coerce URLs built with reverse_lazy()	Jon Dufresne	nobody	"Calling `assertRedirects()` now uses the new `assertURLEqual()`. If a URL is built with `reverse_lazy()`, `assertRedirects()` now results in the exception:

{{{
Traceback (most recent call last):
  ... # My project calls assertRedirects()
  File ""django/django/test/testcases.py"", line 383, in assertRedirects
    msg_prefix + ""Response redirected to '%s', expected '%s'"" % (url, expected_url)
  File ""django/django/test/testcases.py"", line 404, in assertURLEqual
    normalize(url1), normalize(url2),
  File ""django/django/test/testcases.py"", line 399, in normalize
    scheme, netloc, path, params, query, fragment = urlparse(url)
  File ""/usr/lib64/python3.7/urllib/parse.py"", line 367, in urlparse
    url, scheme, _coerce_result = _coerce_args(url, scheme)
  File ""/usr/lib64/python3.7/urllib/parse.py"", line 123, in _coerce_args
    return _decode_args(args) + (_encode_result,)
  File ""/usr/lib64/python3.7/urllib/parse.py"", line 107, in _decode_args
    return tuple(x.decode(encoding, errors) if x else '' for x in args)
  File ""/usr/lib64/python3.7/urllib/parse.py"", line 107, in <genexpr>
    return tuple(x.decode(encoding, errors) if x else '' for x in args)
AttributeError: '__proxy__' object has no attribute 'decode'
}}}

This does not happen with Django 2.1. Bisected to commit 24959e48d949a20be969f649ece3576dbc7ce422. A `reverse_lazy()` URL may be used as a class or module attribute to be reused by multiple tests methods.

To solve this, the inner function in `assertURLequal()` can coerce the `url` argument using `str()`.

https://github.com/django/django/blob/2.2a1/django/test/testcases.py#L394-L398"	Bug	closed	Testing framework	2.2	Release blocker	fixed			Unreviewed	1	0	0	0	0	0
