Просмотр исходного кода

Move misago.admin tests to pytest

rafalp 6 лет назад
Родитель
Сommit
b3daaa3ea8

+ 9 - 0
misago/admin/tests/test_404_view.py

@@ -0,0 +1,9 @@
+from django.urls import reverse
+
+from ...test import assert_contains
+
+
+def test_admin_displays_own_error_page_on_404_error(admin_client):
+    response = admin_client.get(reverse("misago:admin:index") + "404-not-found/")
+    assert_contains(response, "Administration", 404)
+    assert_contains(response, "Requested page could not be found.", 404)

+ 0 - 76
misago/admin/tests/test_admin_index.py

@@ -1,76 +0,0 @@
-from django.test import TestCase, override_settings
-from django.urls import reverse
-
-from ..test import AdminTestCase
-from ..views.index import check_misago_address
-
-
-class AdminIndexViewTests(AdminTestCase):
-    def test_view_returns_200(self):
-        """admin index view returns 200"""
-        response = self.client.get(reverse("misago:admin:index"))
-
-        self.assertContains(response, self.user.username)
-
-    def test_view_contains_address_check(self):
-        """admin index view contains address check"""
-        response = self.client.get(reverse("misago:admin:index"))
-
-        self.assertContains(response, "MISAGO_ADDRESS")
-
-
-class RequestMock:
-    absolute_uri = "https://misago-project.org/somewhere/"
-
-    def build_absolute_uri(self, location):
-        assert location == "/"
-        return self.absolute_uri
-
-
-request = RequestMock()
-incorrect_address = "http://somewhere.com"
-correct_address = request.absolute_uri
-
-
-class AdminIndexAddressCheckTests(TestCase):
-    @override_settings(MISAGO_ADDRESS=None)
-    def test_address_not_set(self):
-        """check handles address not set"""
-        result = check_misago_address(request)
-
-        self.assertEqual(
-            result,
-            {
-                "is_correct": False,
-                "set_address": None,
-                "correct_address": request.absolute_uri,
-            },
-        )
-
-    @override_settings(MISAGO_ADDRESS=incorrect_address)
-    def test_address_set_invalid(self):
-        """check handles incorrect address"""
-        result = check_misago_address(request)
-
-        self.assertEqual(
-            result,
-            {
-                "is_correct": False,
-                "set_address": incorrect_address,
-                "correct_address": request.absolute_uri,
-            },
-        )
-
-    @override_settings(MISAGO_ADDRESS=correct_address)
-    def test_address_set_valid(self):
-        """check handles correct address"""
-        result = check_misago_address(request)
-
-        self.assertEqual(
-            result,
-            {
-                "is_correct": True,
-                "set_address": correct_address,
-                "correct_address": request.absolute_uri,
-            },
-        )

+ 60 - 0
misago/admin/tests/test_admin_index_view.py

@@ -0,0 +1,60 @@
+from django.test import override_settings
+from django.urls import reverse
+
+from ...test import assert_contains
+from ..views.index import check_misago_address
+
+admin_link = reverse("misago:admin:index")
+
+
+def test_view_has_no_showstoppers(admin_client):
+    response = admin_client.get(admin_link)
+    assert response.status_code == 200
+
+
+def test_view_has_misago_address_check(admin_client):
+    response = admin_client.get(admin_link)
+    assert_contains(response, "MISAGO_ADDRESS")
+
+
+class RequestMock:
+    absolute_uri = "https://misago-project.org/somewhere/"
+
+    def build_absolute_uri(self, location):
+        assert location == "/"
+        return self.absolute_uri
+
+
+request = RequestMock()
+incorrect_address = "http://somewhere.com"
+correct_address = request.absolute_uri
+
+
+@override_settings(MISAGO_ADDRESS=None)
+def test_misago_address_check_handles_setting_not_configured():
+    result = check_misago_address(request)
+    assert result == {
+        "is_correct": False,
+        "set_address": None,
+        "correct_address": request.absolute_uri,
+    }
+
+
+@override_settings(MISAGO_ADDRESS=incorrect_address)
+def test_misago_address_check_detects_invalid_address_configuration():
+    result = check_misago_address(request)
+    assert result == {
+        "is_correct": False,
+        "set_address": incorrect_address,
+        "correct_address": request.absolute_uri,
+    }
+
+
+@override_settings(MISAGO_ADDRESS=correct_address)
+def test_misago_address_check_detects_valid_address_configuration():
+    result = check_misago_address(request)
+    assert result == {
+        "is_correct": True,
+        "set_address": correct_address,
+        "correct_address": request.absolute_uri,
+    }

+ 0 - 0
misago/admin/tests/test_admin_hierarchy.py → misago/admin/tests/test_admin_site_hierarchy.py


+ 0 - 77
misago/admin/tests/test_admin_views.py

@@ -1,77 +0,0 @@
-from django.test import TestCase
-from django.urls import reverse
-
-from ...users.test import create_test_user
-from ..test import AdminTestCase
-from ..views import get_protected_namespace
-
-
-class AdminViewAccessTests(AdminTestCase):
-    def test_admin_denies_non_staff_non_superuser(self):
-        """admin middleware rejects user thats non staff and non superuser"""
-        self.user.is_staff = False
-        self.user.is_superuser = False
-        self.user.save()
-
-        response = self.client.get(reverse("misago:admin:index"))
-        self.assertContains(response, "Sign in")
-
-    def test_admin_denies_non_staff_superuser(self):
-        """admin middleware rejects user thats non staff and superuser"""
-        self.user.is_staff = False
-        self.user.is_superuser = True
-        self.user.save()
-
-        response = self.client.get(reverse("misago:admin:index"))
-        self.assertContains(response, "Sign in")
-
-    def test_admin_passess_in_staff_non_superuser(self):
-        """admin middleware passess user thats staff and non superuser"""
-        self.user.is_staff = True
-        self.user.is_superuser = False
-        self.user.save()
-
-        response = self.client.get(reverse("misago:admin:index"))
-        self.assertContains(response, self.user.username)
-
-    def test_admin_passess_in_staff_superuser(self):
-        """admin middleware passess user thats staff and superuser"""
-        self.user.is_staff = True
-        self.user.is_superuser = True
-        self.user.save()
-
-        response = self.client.get(reverse("misago:admin:index"))
-        self.assertContains(response, self.user.username)
-
-
-class Admin404ErrorTests(AdminTestCase):
-    def test_list_search_unicode_handling(self):
-        """querystring creation handles unicode strings"""
-        test_link = "%stotally-errored/" % reverse("misago:admin:index")
-
-        response = self.client.get(test_link)
-
-        self.assertContains(
-            response, "Requested page could not be found.", status_code=404
-        )
-
-
-class AdminGenericViewsTests(AdminTestCase):
-    def test_view_redirected_queryvar(self):
-        """querystring redirected value is handled"""
-        test_link = reverse("misago:admin:users:accounts:index")
-
-        # request resulted in redirect with redirected=1 bit
-        response = self.client.get("%s?username=lorem" % test_link)
-        self.assertEqual(response.status_code, 302)
-        self.assertIn("redirected=1", response["location"])
-
-        # request with flag muted redirect
-        response = self.client.get("%s?redirected=1&username=lorem" % test_link)
-        self.assertEqual(response.status_code, 200)
-
-    def test_list_search_unicode_handling(self):
-        """querystring creation handles unicode strings"""
-        test_link = reverse("misago:admin:users:accounts:index")
-        response = self.client.get("%s?redirected=1&username=%s" % (test_link, "łut"))
-        self.assertEqual(response.status_code, 200)

+ 43 - 0
misago/admin/tests/test_admin_views_are_protected.py

@@ -0,0 +1,43 @@
+from django.urls import reverse
+
+from ...test import assert_contains, assert_not_contains
+from ..auth import is_admin_authorized
+
+admin_link = reverse("misago:admin:index")
+
+
+def assert_requires_admin_login(response):
+    assert response.status_code == 200
+    assert_contains(response, "Administration")
+    assert_contains(response, "Sign in")
+
+
+def test_anonymous_user_is_asked_to_login_to_access_admin_view(db, client):
+    response = client.get(admin_link)
+    assert_requires_admin_login(response)
+
+
+def test_authenticated_user_is_asked_to_login_to_access_admin_view(client, user):
+    client.force_login(user)
+    response = client.get(admin_link)
+    assert_requires_admin_login(response)
+
+
+def test_unathorized_admin_is_asked_to_login_to_access_admin_view(client, superuser):
+    client.force_login(superuser)
+    response = client.get(admin_link)
+    assert_requires_admin_login(response)
+
+
+def test_authorized_admin_is_allowed_to_access_admin_view(admin_client):
+    response = admin_client.get(admin_link)
+    assert is_admin_authorized(response.wsgi_request)
+    assert_not_contains(response, "Sign in")
+
+
+def test_admin_authorization_is_checked_on_admin_view_access(mocker, client, user):
+    admin_authorization = mocker.patch(
+        "misago.admin.middleware.is_admin_authorized", return_value=False
+    )
+    response = client.get(admin_link)
+    admin_authorization.assert_called_once_with(response.wsgi_request)

+ 0 - 0
misago/admin/tests/test_auth.py → misago/admin/tests/test_authorization.py


+ 39 - 0
misago/admin/tests/test_generic_admin_list_view.py

@@ -0,0 +1,39 @@
+from urllib.parse import urlencode
+
+from django.urls import reverse
+
+list_link = reverse("misago:admin:users:accounts:index")
+
+
+def test_view_redirects_if_redirected_flag_is_not_present_in_querystring(admin_client):
+    response = admin_client.get(list_link)
+    assert response.status_code == 302
+
+
+def test_view_sets_redirect_flag_in_redirect_url(admin_client):
+    response = admin_client.get(list_link)
+    assert response.status_code == 302
+    assert "redirected=1" in response["location"]
+
+
+def test_view_checks_only_redirect_flag_presence_and_not_value(admin_client):
+    response = admin_client.get(list_link + "?redirected")
+    assert response.status_code == 200
+
+
+def test_view_preserves_rest_of_querystring_in_redirect_url(admin_client):
+    response = admin_client.get(list_link + "?username=test")
+    assert response.status_code == 302
+    assert "redirected=1" in response["location"]
+    assert "username=test" in response["location"]
+
+
+def test_unicode_is_preserved_in_redirect_querystring(admin_client):
+    response = admin_client.get(list_link + "?username=łóć")
+    assert response.status_code == 302
+    assert urlencode({"username": "łóć"}) in response["location"]
+
+
+def test_view_is_not_redirecting_if_flag_is_set_in_querystring(admin_client):
+    response = admin_client.get("%s?redirected=1" % list_link)
+    assert response.status_code == 200

+ 1 - 1
misago/admin/views/generic/list.py

@@ -152,7 +152,7 @@ class ListView(AdminView):
                     "%s%s" % (reverse(self.root_link), context["querystring"])
                 )
 
-        if refresh_querystring and not request.GET.get("redirected"):
+        if refresh_querystring and "redirected" not in request.GET:
             return redirect("%s%s" % (request.path, context["querystring"]))
 
         return self.render(request, context)

+ 6 - 0
misago/test.py

@@ -2,3 +2,9 @@ def assert_contains(response, string, status_code=200):
     assert response.status_code == status_code
     fail_message = f'"{string}" not found in response.content'
     assert string in response.content.decode("utf-8"), fail_message
+
+
+def assert_not_contains(response, string, status_code=200):
+    assert response.status_code == status_code
+    fail_message = f'"{string}" was found in response.content'
+    assert string not in response.content.decode("utf-8"), fail_message