Commit 619455eb authored by Enrico Zini's avatar Enrico Zini
Browse files

Sync impersonation with changes from contributors.d.o. refs: #25

parent 53f5bb2e
...@@ -574,3 +574,19 @@ class SignonFixtureMixin(BaseFixtureMixin): ...@@ -574,3 +574,19 @@ class SignonFixtureMixin(BaseFixtureMixin):
cls.user1 = cls.persons.user1 cls.user1 = cls.persons.user1
cls.user2 = cls.persons.user2 cls.user2 = cls.persons.user2
class ImpersonateFixtureMixin(BaseFixtureMixin):
"""
Base test fixture for impersonate tests
"""
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.create_person("admin", status=const.STATUS_DD_NU, is_staff=True, is_superuser=True)
cls.create_person("user1", status=const.STATUS_DD_NU)
cls.create_person("user2", status=const.STATUS_DD_NU)
cls.admin = cls.persons.admin
cls.user1 = cls.persons.user1
cls.user2 = cls.persons.user2
from __future__ import annotations from __future__ import annotations
from django.test import TestCase from django.test import TestCase
from django.urls import reverse from django.urls import reverse
from backend.unittest import TestBase from impersonate.unittest import ImpersonateFixtureMixin
from django.contrib.auth import get_user_model
class TestPermissions(TestBase, TestCase): class TestPermissions(ImpersonateFixtureMixin, TestCase):
def test_impersonate_staff(self): def test_impersonate_staff(self):
User = get_user_model() visitor = self.admin
visitor = User.objects.create_superuser(email="admin@example.org", fullname="Admin", audit_skip=True) visited = self.user1
visited = User.objects.create_user(email="user@example.org", fullname="User", audit_skip=True)
client = self.make_test_client(visitor) client = self.make_test_client(visitor)
response = client.get(reverse("impersonate:whoami")) response = client.get(reverse("impersonate:whoami"))
...@@ -32,9 +30,8 @@ class TestPermissions(TestBase, TestCase): ...@@ -32,9 +30,8 @@ class TestPermissions(TestBase, TestCase):
}) })
def test_impersonate_user(self): def test_impersonate_user(self):
User = get_user_model() visitor = self.user1
visitor = User.objects.create_user(email="user@example.org", fullname="User", audit_skip=True) visited = self.user2
visited = User.objects.create_user(email="user1@example.org", fullname="User1", audit_skip=True)
client = self.make_test_client(visitor) client = self.make_test_client(visitor)
response = client.post(reverse("impersonate:impersonate"), data={"pk": visited.pk}) response = client.post(reverse("impersonate:impersonate"), data={"pk": visited.pk})
self.assertPermissionDenied(response) self.assertPermissionDenied(response)
...@@ -48,8 +45,7 @@ class TestPermissions(TestBase, TestCase): ...@@ -48,8 +45,7 @@ class TestPermissions(TestBase, TestCase):
}) })
def test_impersonate_anonymous(self): def test_impersonate_anonymous(self):
User = get_user_model() visited = self.user1
visited = User.objects.create_user(email="user@example.org", fullname="User", audit_skip=True)
client = self.make_test_client(None) client = self.make_test_client(None)
response = client.post(reverse("impersonate:impersonate"), data={"pk": visited.pk}) response = client.post(reverse("impersonate:impersonate"), data={"pk": visited.pk})
self.assertPermissionDenied(response) self.assertPermissionDenied(response)
......
from __future__ import annotations
from django.utils.module_loading import import_string
from django.core.exceptions import ImproperlyConfigured
from django.conf import settings
from signon import providers
_name = getattr(settings, "IMPERSONATE_TEST_FIXTURE", None)
if _name is None:
raise ImproperlyConfigured(
"You need to set IMPERSONATE_TEST_FIXTURE to a valid dotted module.class path, to use impersonate unittests")
class ImpersonateFixtureMixin(import_string(_name)):
def setUp(self):
super().setUp()
# Reset the providers cache before each test
providers.providers_by_name = None
__all__ = ["ImpersonateFixtureMixin"]
...@@ -253,6 +253,7 @@ SIGNON_PROVIDERS = [ ...@@ -253,6 +253,7 @@ SIGNON_PROVIDERS = [
SIGNON_AUTO_BIND = False SIGNON_AUTO_BIND = False
SIGNON_TEST_FIXTURE = "backend.unittest.SignonFixtureMixin" SIGNON_TEST_FIXTURE = "backend.unittest.SignonFixtureMixin"
IMPERSONATE_TEST_FIXTURE = "backend.unittest.ImpersonateFixtureMixin"
# Sync with this salsa host # Sync with this salsa host
SALSA_HOST = "https://salsa-test.debian.net" SALSA_HOST = "https://salsa-test.debian.net"
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment