authentik.core.tests.test_property_mapping_api

Test property mappings API

 1"""Test property mappings API"""
 2
 3from json import dumps
 4
 5from django.urls import reverse
 6from rest_framework.serializers import ValidationError
 7from rest_framework.test import APITestCase
 8
 9from authentik.core.api.property_mappings import PropertyMappingSerializer
10from authentik.core.models import Group, PropertyMapping
11from authentik.core.tests.utils import create_test_admin_user
12from authentik.lib.generators import generate_id
13
14
15class TestPropertyMappingAPI(APITestCase):
16    """Test property mappings API"""
17
18    def setUp(self) -> None:
19        super().setUp()
20        self.user = create_test_admin_user()
21        self.client.force_login(self.user)
22
23    def test_test_call(self):
24        """Test PropertyMappings's test endpoint"""
25        mapping = PropertyMapping.objects.create(
26            name="dummy", expression="""return {'foo': 'bar', 'baz': user.username}"""
27        )
28        response = self.client.post(
29            reverse("authentik_api:propertymapping-test", kwargs={"pk": mapping.pk}),
30            data={
31                "user": self.user.pk,
32            },
33        )
34        self.assertJSONEqual(
35            response.content.decode(),
36            {"result": dumps({"foo": "bar", "baz": self.user.username}), "successful": True},
37        )
38
39    def test_test_call_group(self):
40        """Test PropertyMappings's test endpoint"""
41        mapping = PropertyMapping.objects.create(
42            name="dummy", expression="""return {'foo': 'bar', 'baz': group.name}"""
43        )
44        group = Group.objects.create(name=generate_id())
45        response = self.client.post(
46            reverse("authentik_api:propertymapping-test", kwargs={"pk": mapping.pk}),
47            data={
48                "group": group.pk,
49            },
50        )
51        self.assertJSONEqual(
52            response.content.decode(),
53            {"result": dumps({"foo": "bar", "baz": group.name}), "successful": True},
54        )
55
56    def test_validate(self):
57        """Test PropertyMappings's validation"""
58        # Because the root property-mapping has no write operation, we just instantiate
59        # a serializer and test inline
60        expr = "return True"
61        self.assertEqual(PropertyMappingSerializer().validate_expression(expr), expr)
62        with self.assertRaises(ValidationError):
63            PropertyMappingSerializer().validate_expression("/")
64
65    def test_types(self):
66        """Test PropertyMapping's types endpoint"""
67        response = self.client.get(
68            reverse("authentik_api:propertymapping-types"),
69        )
70        self.assertEqual(response.status_code, 200)
class TestPropertyMappingAPI(rest_framework.test.APITestCase):
16class TestPropertyMappingAPI(APITestCase):
17    """Test property mappings API"""
18
19    def setUp(self) -> None:
20        super().setUp()
21        self.user = create_test_admin_user()
22        self.client.force_login(self.user)
23
24    def test_test_call(self):
25        """Test PropertyMappings's test endpoint"""
26        mapping = PropertyMapping.objects.create(
27            name="dummy", expression="""return {'foo': 'bar', 'baz': user.username}"""
28        )
29        response = self.client.post(
30            reverse("authentik_api:propertymapping-test", kwargs={"pk": mapping.pk}),
31            data={
32                "user": self.user.pk,
33            },
34        )
35        self.assertJSONEqual(
36            response.content.decode(),
37            {"result": dumps({"foo": "bar", "baz": self.user.username}), "successful": True},
38        )
39
40    def test_test_call_group(self):
41        """Test PropertyMappings's test endpoint"""
42        mapping = PropertyMapping.objects.create(
43            name="dummy", expression="""return {'foo': 'bar', 'baz': group.name}"""
44        )
45        group = Group.objects.create(name=generate_id())
46        response = self.client.post(
47            reverse("authentik_api:propertymapping-test", kwargs={"pk": mapping.pk}),
48            data={
49                "group": group.pk,
50            },
51        )
52        self.assertJSONEqual(
53            response.content.decode(),
54            {"result": dumps({"foo": "bar", "baz": group.name}), "successful": True},
55        )
56
57    def test_validate(self):
58        """Test PropertyMappings's validation"""
59        # Because the root property-mapping has no write operation, we just instantiate
60        # a serializer and test inline
61        expr = "return True"
62        self.assertEqual(PropertyMappingSerializer().validate_expression(expr), expr)
63        with self.assertRaises(ValidationError):
64            PropertyMappingSerializer().validate_expression("/")
65
66    def test_types(self):
67        """Test PropertyMapping's types endpoint"""
68        response = self.client.get(
69            reverse("authentik_api:propertymapping-types"),
70        )
71        self.assertEqual(response.status_code, 200)

Test property mappings API

def setUp(self) -> None:
19    def setUp(self) -> None:
20        super().setUp()
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.

def test_test_call(self):
24    def test_test_call(self):
25        """Test PropertyMappings's test endpoint"""
26        mapping = PropertyMapping.objects.create(
27            name="dummy", expression="""return {'foo': 'bar', 'baz': user.username}"""
28        )
29        response = self.client.post(
30            reverse("authentik_api:propertymapping-test", kwargs={"pk": mapping.pk}),
31            data={
32                "user": self.user.pk,
33            },
34        )
35        self.assertJSONEqual(
36            response.content.decode(),
37            {"result": dumps({"foo": "bar", "baz": self.user.username}), "successful": True},
38        )

Test PropertyMappings's test endpoint

def test_test_call_group(self):
40    def test_test_call_group(self):
41        """Test PropertyMappings's test endpoint"""
42        mapping = PropertyMapping.objects.create(
43            name="dummy", expression="""return {'foo': 'bar', 'baz': group.name}"""
44        )
45        group = Group.objects.create(name=generate_id())
46        response = self.client.post(
47            reverse("authentik_api:propertymapping-test", kwargs={"pk": mapping.pk}),
48            data={
49                "group": group.pk,
50            },
51        )
52        self.assertJSONEqual(
53            response.content.decode(),
54            {"result": dumps({"foo": "bar", "baz": group.name}), "successful": True},
55        )

Test PropertyMappings's test endpoint

def test_validate(self):
57    def test_validate(self):
58        """Test PropertyMappings's validation"""
59        # Because the root property-mapping has no write operation, we just instantiate
60        # a serializer and test inline
61        expr = "return True"
62        self.assertEqual(PropertyMappingSerializer().validate_expression(expr), expr)
63        with self.assertRaises(ValidationError):
64            PropertyMappingSerializer().validate_expression("/")

Test PropertyMappings's validation

def test_types(self):
66    def test_types(self):
67        """Test PropertyMapping's types endpoint"""
68        response = self.client.get(
69            reverse("authentik_api:propertymapping-types"),
70        )
71        self.assertEqual(response.status_code, 200)

Test PropertyMapping's types endpoint