authentik.policies.tests.test_bindings_api

Test bindings API

 1"""Test bindings API"""
 2
 3from django.urls import reverse
 4from rest_framework.test import APITestCase
 5
 6from authentik.core.tests.utils import create_test_admin_user
 7from authentik.policies.models import PolicyBindingModel
 8
 9
10class TestBindingsAPI(APITestCase):
11    """Test bindings API"""
12
13    def setUp(self) -> None:
14        super().setUp()
15        self.pbm = PolicyBindingModel.objects.create()
16        self.user = create_test_admin_user()
17        self.group = self.user.groups.first()
18        self.client.force_login(self.user)
19
20    def test_valid_binding(self):
21        """Test valid binding"""
22        response = self.client.post(
23            reverse("authentik_api:policybinding-list"),
24            data={"target": self.pbm.pk, "user": self.user.pk, "order": 0},
25        )
26        self.assertEqual(response.status_code, 201)
27
28    def test_invalid_too_much(self):
29        """Test invalid binding (too much)"""
30        response = self.client.post(
31            reverse("authentik_api:policybinding-list"),
32            data={
33                "target": self.pbm.pk,
34                "user": self.user.pk,
35                "group": self.group.pk,
36                "order": 0,
37            },
38        )
39        self.assertJSONEqual(
40            response.content.decode(),
41            {"non_field_errors": ["Only one of 'group', 'policy', 'user' can be set."]},
42        )
43
44    def test_invalid_too_little(self):
45        """Test invalid binding (too little)"""
46        response = self.client.post(
47            reverse("authentik_api:policybinding-list"),
48            data={"target": self.pbm.pk, "order": 0},
49        )
50        self.assertJSONEqual(
51            response.content.decode(),
52            {"non_field_errors": ["One of 'group', 'policy', 'user' must be set."]},
53        )
class TestBindingsAPI(rest_framework.test.APITestCase):
11class TestBindingsAPI(APITestCase):
12    """Test bindings API"""
13
14    def setUp(self) -> None:
15        super().setUp()
16        self.pbm = PolicyBindingModel.objects.create()
17        self.user = create_test_admin_user()
18        self.group = self.user.groups.first()
19        self.client.force_login(self.user)
20
21    def test_valid_binding(self):
22        """Test valid binding"""
23        response = self.client.post(
24            reverse("authentik_api:policybinding-list"),
25            data={"target": self.pbm.pk, "user": self.user.pk, "order": 0},
26        )
27        self.assertEqual(response.status_code, 201)
28
29    def test_invalid_too_much(self):
30        """Test invalid binding (too much)"""
31        response = self.client.post(
32            reverse("authentik_api:policybinding-list"),
33            data={
34                "target": self.pbm.pk,
35                "user": self.user.pk,
36                "group": self.group.pk,
37                "order": 0,
38            },
39        )
40        self.assertJSONEqual(
41            response.content.decode(),
42            {"non_field_errors": ["Only one of 'group', 'policy', 'user' can be set."]},
43        )
44
45    def test_invalid_too_little(self):
46        """Test invalid binding (too little)"""
47        response = self.client.post(
48            reverse("authentik_api:policybinding-list"),
49            data={"target": self.pbm.pk, "order": 0},
50        )
51        self.assertJSONEqual(
52            response.content.decode(),
53            {"non_field_errors": ["One of 'group', 'policy', 'user' must be set."]},
54        )

Test bindings API

def setUp(self) -> None:
14    def setUp(self) -> None:
15        super().setUp()
16        self.pbm = PolicyBindingModel.objects.create()
17        self.user = create_test_admin_user()
18        self.group = self.user.groups.first()
19        self.client.force_login(self.user)

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

def test_valid_binding(self):
21    def test_valid_binding(self):
22        """Test valid binding"""
23        response = self.client.post(
24            reverse("authentik_api:policybinding-list"),
25            data={"target": self.pbm.pk, "user": self.user.pk, "order": 0},
26        )
27        self.assertEqual(response.status_code, 201)

Test valid binding

def test_invalid_too_much(self):
29    def test_invalid_too_much(self):
30        """Test invalid binding (too much)"""
31        response = self.client.post(
32            reverse("authentik_api:policybinding-list"),
33            data={
34                "target": self.pbm.pk,
35                "user": self.user.pk,
36                "group": self.group.pk,
37                "order": 0,
38            },
39        )
40        self.assertJSONEqual(
41            response.content.decode(),
42            {"non_field_errors": ["Only one of 'group', 'policy', 'user' can be set."]},
43        )

Test invalid binding (too much)

def test_invalid_too_little(self):
45    def test_invalid_too_little(self):
46        """Test invalid binding (too little)"""
47        response = self.client.post(
48            reverse("authentik_api:policybinding-list"),
49            data={"target": self.pbm.pk, "order": 0},
50        )
51        self.assertJSONEqual(
52            response.content.decode(),
53            {"non_field_errors": ["One of 'group', 'policy', 'user' must be set."]},
54        )

Test invalid binding (too little)