Fix unit test failures due to duplicate url names
Reset the correct URLs module to fix test failures. Fix third party auth to reconfigure the registry on test cleanup.
This commit is contained in:
@@ -30,8 +30,10 @@ class TestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestCase, self).setUp()
|
||||
self._original_providers = provider.Registry._get_all()
|
||||
provider.Registry._reset()
|
||||
|
||||
def tearDown(self):
|
||||
provider.Registry._reset()
|
||||
provider.Registry.configure_once(self._original_providers)
|
||||
super(TestCase, self).tearDown()
|
||||
|
||||
@@ -19,19 +19,38 @@ class UrlResetMixin(object):
|
||||
that affect the contents of urls.py
|
||||
"""
|
||||
|
||||
def _reset_urls(self, urlconf=None):
|
||||
if urlconf is None:
|
||||
urlconf = settings.ROOT_URLCONF
|
||||
|
||||
if urlconf in sys.modules:
|
||||
reload(sys.modules[urlconf])
|
||||
def _reset_urls(self, urlconf_modules):
|
||||
for urlconf in urlconf_modules:
|
||||
if urlconf in sys.modules:
|
||||
reload(sys.modules[urlconf])
|
||||
clear_url_caches()
|
||||
|
||||
# Resolve a URL so that the new urlconf gets loaded
|
||||
resolve('/')
|
||||
|
||||
def setUp(self, **kwargs):
|
||||
"""Reset django default urlconf before tests and after tests"""
|
||||
def setUp(self, *args, **kwargs):
|
||||
"""Reset Django urls before tests and after tests
|
||||
|
||||
If you need to reset `urls.py` from a particular Django app (or apps),
|
||||
specify these modules in *args.
|
||||
|
||||
Examples:
|
||||
|
||||
# Reload only the root urls.py
|
||||
super(MyTestCase, self).setUp()
|
||||
|
||||
# Reload urls from my_app
|
||||
super(MyTestCase, self).setUp("my_app.urls")
|
||||
|
||||
# Reload urls from my_app and another_app
|
||||
super(MyTestCase, self).setUp("my_app.urls", "another_app.urls")
|
||||
|
||||
"""
|
||||
super(UrlResetMixin, self).setUp(**kwargs)
|
||||
self._reset_urls()
|
||||
self.addCleanup(self._reset_urls)
|
||||
|
||||
urlconf_modules = [settings.ROOT_URLCONF]
|
||||
if args:
|
||||
urlconf_modules.extend(args)
|
||||
|
||||
self._reset_urls(urlconf_modules)
|
||||
self.addCleanup(lambda: self._reset_urls(urlconf_modules))
|
||||
|
||||
@@ -47,7 +47,7 @@ class StudentAccountViewTest(UrlResetMixin, TestCase):
|
||||
|
||||
@patch.dict(settings.FEATURES, {'ENABLE_NEW_DASHBOARD': True})
|
||||
def setUp(self):
|
||||
super(StudentAccountViewTest, self).setUp()
|
||||
super(StudentAccountViewTest, self).setUp("student_account.urls")
|
||||
|
||||
# Create/activate a new account
|
||||
activation_key = account_api.create_account(self.USERNAME, self.PASSWORD, self.OLD_EMAIL)
|
||||
@@ -62,8 +62,8 @@ class StudentAccountViewTest(UrlResetMixin, TestCase):
|
||||
self.assertContains(response, "Student Account")
|
||||
|
||||
@ddt.data(
|
||||
("login", "login"),
|
||||
("register", "register"),
|
||||
("account_login", "login"),
|
||||
("account_register", "register"),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_login_and_registration_form(self, url_name, initial_mode):
|
||||
@@ -71,7 +71,7 @@ class StudentAccountViewTest(UrlResetMixin, TestCase):
|
||||
expected_data = u"data-initial-mode=\"{mode}\"".format(mode=initial_mode)
|
||||
self.assertContains(response, expected_data)
|
||||
|
||||
@ddt.data("login", "register")
|
||||
@ddt.data("account_login", "account_register")
|
||||
def test_login_and_registration_third_party_auth_urls(self, url_name):
|
||||
response = self.client.get(reverse(url_name))
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ from django.conf import settings
|
||||
|
||||
urlpatterns = patterns(
|
||||
'student_account.views',
|
||||
url(r'^login/$', 'login_and_registration_form', {'initial_mode': 'login'}, name='login'),
|
||||
url(r'^register/$', 'login_and_registration_form', {'initial_mode': 'register'}, name='register'),
|
||||
url(r'^login/$', 'login_and_registration_form', {'initial_mode': 'login'}, name='account_login'),
|
||||
url(r'^register/$', 'login_and_registration_form', {'initial_mode': 'register'}, name='account_register'),
|
||||
)
|
||||
|
||||
if settings.FEATURES.get('ENABLE_NEW_DASHBOARD'):
|
||||
|
||||
@@ -35,7 +35,7 @@ class StudentProfileViewTest(UrlResetMixin, TestCase):
|
||||
|
||||
@patch.dict(settings.FEATURES, {'ENABLE_NEW_DASHBOARD': True})
|
||||
def setUp(self):
|
||||
super(StudentProfileViewTest, self).setUp()
|
||||
super(StudentProfileViewTest, self).setUp("student_profile.urls")
|
||||
|
||||
# Create/activate a new account
|
||||
activation_key = account_api.create_account(self.USERNAME, self.PASSWORD, self.EMAIL)
|
||||
|
||||
Reference in New Issue
Block a user