Coverage for src/mesh/tests/test_middleware.py: 100%
42 statements
« prev ^ index » next coverage.py v7.9.0, created at 2026-02-04 09:42 +0000
« prev ^ index » next coverage.py v7.9.0, created at 2026-02-04 09:42 +0000
1from django.contrib.auth.models import AnonymousUser
3from mesh.model.user.user_interfaces import ImpersonateData, UserInfo
4from mesh.views.middleware import process_impersonate_session
6from ..models.factories import UserFactory
7from ..models.user_models import User
8from .base_test_case import BaseTestCase
11class ImpersonateMiddlewareTestCase(BaseTestCase):
12 used_models = [User]
14 def setUp(self):
15 super().setUp()
16 self.request = self.dummy_request()
17 self.request.user = AnonymousUser()
19 self.user_admin = UserFactory.create()
20 self.user_to_impersonate = UserFactory.create()
22 # Serialize the data into the base request session
23 self.impersonate_data = ImpersonateData(
24 source=UserInfo.from_user(self.user_admin),
25 target_id=self.user_to_impersonate.pk,
26 )
27 self.impersonate_data.serialize(self.request.session)
29 def test_processing_impersonate_data_anonymous_user(self):
30 process_impersonate_session(self.request)
31 self.assertTrue(self.request.user.is_anonymous)
33 def test_processing_impersonate_data_normal_use(self):
34 self.request.user = self.user_admin
35 self.assertEqual(self.request.user.pk, self.user_admin.pk)
36 process_impersonate_session(self.request)
38 self.assertEqual(self.request.user.pk, self.user_to_impersonate.pk)
39 data_from_session = ImpersonateData.from_session(self.request.session)
40 self.assertIsNotNone(data_from_session)
41 self.assertEqual(data_from_session, self.impersonate_data)
43 def test_processing_impersonate_data_user_not_found(self):
44 self.user_to_impersonate.delete()
45 self.request.user = self.user_admin
46 self.assertEqual(self.request.user.pk, self.user_admin.pk)
47 process_impersonate_session(self.request)
49 self.assertEqual(self.request.user.pk, self.user_admin.pk)
50 self.assertIsNone(ImpersonateData.from_session(self.request.session))
52 def test_processing_impersonate_data_invalid(self):
53 self.impersonate_data.timestamp_start -= 10**6 # type:ignore
54 self.impersonate_data.serialize(self.request.session)
56 self.request.user = self.user_admin
57 self.assertEqual(self.request.user.pk, self.user_admin.pk)
58 process_impersonate_session(self.request)
60 self.assertEqual(self.request.user.pk, self.user_admin.pk)
61 self.assertIsNone(ImpersonateData.from_session(self.request.session))