from django.test import override_settings, TestCase from django.urls import reverse class TestLoginRedirect(TestCase): @override_settings(LOGIN_URL="/custom/login/") def test_custom_login_view_with_url(self): """Test login redirect when LOGIN_URL is set to custom url""" response = self.client.get(reverse("helpdesk:login")) # We expect that that helpdesk:home url is passed as next parameter in # the redirect url, so that the custom login can redirect the browser # back to helpdesk after the login. home_url = reverse("helpdesk:home") expected = "/custom/login/?next={}".format(home_url) self.assertRedirects(response, expected, fetch_redirect_response=False) @override_settings(LOGIN_URL="/custom/login/") def test_custom_login_next_param(self): """Test that the next url parameter is correctly relayed to custom login""" next_param = "/redirect/back" url = reverse("helpdesk:login") + "?next=" + next_param response = self.client.get(url) expected = "/custom/login/?next={}".format(next_param) self.assertRedirects(response, expected, fetch_redirect_response=False) @override_settings(LOGIN_URL="helpdesk:login", SITE_ID=1) def test_default_login_view(self): """Test that default login is used when LOGIN_URL is helpdesk:login""" response = self.client.get(reverse("helpdesk:login")) self.assertTemplateUsed(response, "helpdesk/registration/login.html") @override_settings(LOGIN_URL=None, SITE_ID=1) def test_login_url_none(self): """Test that default login is used when LOGIN_URL is None""" response = self.client.get(reverse("helpdesk:login")) self.assertTemplateUsed(response, "helpdesk/registration/login.html") @override_settings(LOGIN_URL="admin:login", SITE_ID=1) def test_custom_login_view_with_name(self): """Test that LOGIN_URL can be a view name""" response = self.client.get(reverse("helpdesk:login")) home_url = reverse("helpdesk:home") expected = reverse("admin:login") + "?next=" + home_url self.assertRedirects(response, expected)