authentik.policies.tests.test_policies_api

Test policies API

 1"""Test policies API"""
 2
 3from json import loads
 4from unittest.mock import MagicMock, patch
 5
 6from django.urls import reverse
 7from rest_framework.test import APITestCase
 8
 9from authentik.core.tests.utils import create_test_admin_user
10from authentik.policies.dummy.models import DummyPolicy
11from authentik.policies.types import PolicyResult
12
13
14class TestPoliciesAPI(APITestCase):
15    """Test policies API"""
16
17    def setUp(self) -> None:
18        super().setUp()
19        self.policy = DummyPolicy.objects.create(name="dummy", result=True)
20        self.user = create_test_admin_user()
21        self.client.force_login(self.user)
22
23    @patch("authentik.policies.dummy.models.DummyPolicy.passes")
24    def test_test_call(self, passes_mock: MagicMock):
25        """Test Policy's test endpoint"""
26        passes_mock.return_value = PolicyResult(True, "dummy")
27        response = self.client.post(
28            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
29            data={
30                "user": self.user.pk,
31            },
32        )
33        body = loads(response.content.decode())
34        self.assertEqual(body["passing"], True)
35        self.assertEqual(body["messages"], ["dummy"])
36        self.assertEqual(body["log_messages"], [])
37
38    def test_test_call_invalid(self):
39        """Test invalid policy test"""
40        response = self.client.post(
41            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
42            data={},
43        )
44        self.assertEqual(response.status_code, 400)
45        response = self.client.post(
46            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
47            data={
48                "user": self.user.pk + 1,
49            },
50        )
51        self.assertEqual(response.status_code, 400)
52
53    def test_types(self):
54        """Test Policy's types endpoint"""
55        response = self.client.get(
56            reverse("authentik_api:policy-types"),
57        )
58        self.assertEqual(response.status_code, 200)
59
60    def test_cache_info(self):
61        """Test Policy's cache_info endpoint"""
62        response = self.client.get(
63            reverse("authentik_api:policy-cache-info"),
64        )
65        self.assertEqual(response.status_code, 200)
66
67    def test_cache_clear(self):
68        """Test Policy's cache_clear endpoint"""
69        response = self.client.post(
70            reverse("authentik_api:policy-cache-clear"),
71        )
72        self.assertEqual(response.status_code, 204)
class TestPoliciesAPI(rest_framework.test.APITestCase):
15class TestPoliciesAPI(APITestCase):
16    """Test policies API"""
17
18    def setUp(self) -> None:
19        super().setUp()
20        self.policy = DummyPolicy.objects.create(name="dummy", result=True)
21        self.user = create_test_admin_user()
22        self.client.force_login(self.user)
23
24    @patch("authentik.policies.dummy.models.DummyPolicy.passes")
25    def test_test_call(self, passes_mock: MagicMock):
26        """Test Policy's test endpoint"""
27        passes_mock.return_value = PolicyResult(True, "dummy")
28        response = self.client.post(
29            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
30            data={
31                "user": self.user.pk,
32            },
33        )
34        body = loads(response.content.decode())
35        self.assertEqual(body["passing"], True)
36        self.assertEqual(body["messages"], ["dummy"])
37        self.assertEqual(body["log_messages"], [])
38
39    def test_test_call_invalid(self):
40        """Test invalid policy test"""
41        response = self.client.post(
42            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
43            data={},
44        )
45        self.assertEqual(response.status_code, 400)
46        response = self.client.post(
47            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
48            data={
49                "user": self.user.pk + 1,
50            },
51        )
52        self.assertEqual(response.status_code, 400)
53
54    def test_types(self):
55        """Test Policy's types endpoint"""
56        response = self.client.get(
57            reverse("authentik_api:policy-types"),
58        )
59        self.assertEqual(response.status_code, 200)
60
61    def test_cache_info(self):
62        """Test Policy's cache_info endpoint"""
63        response = self.client.get(
64            reverse("authentik_api:policy-cache-info"),
65        )
66        self.assertEqual(response.status_code, 200)
67
68    def test_cache_clear(self):
69        """Test Policy's cache_clear endpoint"""
70        response = self.client.post(
71            reverse("authentik_api:policy-cache-clear"),
72        )
73        self.assertEqual(response.status_code, 204)

Test policies API

def setUp(self) -> None:
18    def setUp(self) -> None:
19        super().setUp()
20        self.policy = DummyPolicy.objects.create(name="dummy", result=True)
21        self.user = create_test_admin_user()
22        self.client.force_login(self.user)

Hook method for setting up the test fixture before exercising it.

@patch('authentik.policies.dummy.models.DummyPolicy.passes')
def test_test_call(self, passes_mock: unittest.mock.MagicMock):
24    @patch("authentik.policies.dummy.models.DummyPolicy.passes")
25    def test_test_call(self, passes_mock: MagicMock):
26        """Test Policy's test endpoint"""
27        passes_mock.return_value = PolicyResult(True, "dummy")
28        response = self.client.post(
29            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
30            data={
31                "user": self.user.pk,
32            },
33        )
34        body = loads(response.content.decode())
35        self.assertEqual(body["passing"], True)
36        self.assertEqual(body["messages"], ["dummy"])
37        self.assertEqual(body["log_messages"], [])

Test Policy's test endpoint

def test_test_call_invalid(self):
39    def test_test_call_invalid(self):
40        """Test invalid policy test"""
41        response = self.client.post(
42            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
43            data={},
44        )
45        self.assertEqual(response.status_code, 400)
46        response = self.client.post(
47            reverse("authentik_api:policy-test", kwargs={"pk": self.policy.pk}),
48            data={
49                "user": self.user.pk + 1,
50            },
51        )
52        self.assertEqual(response.status_code, 400)

Test invalid policy test

def test_types(self):
54    def test_types(self):
55        """Test Policy's types endpoint"""
56        response = self.client.get(
57            reverse("authentik_api:policy-types"),
58        )
59        self.assertEqual(response.status_code, 200)

Test Policy's types endpoint

def test_cache_info(self):
61    def test_cache_info(self):
62        """Test Policy's cache_info endpoint"""
63        response = self.client.get(
64            reverse("authentik_api:policy-cache-info"),
65        )
66        self.assertEqual(response.status_code, 200)

Test Policy's cache_info endpoint

def test_cache_clear(self):
68    def test_cache_clear(self):
69        """Test Policy's cache_clear endpoint"""
70        response = self.client.post(
71            reverse("authentik_api:policy-cache-clear"),
72        )
73        self.assertEqual(response.status_code, 204)

Test Policy's cache_clear endpoint