authentik.core.tests.test_source_property_mappings

Test Source Property mappings

 1"""Test Source Property mappings"""
 2
 3from django.test import TestCase
 4
 5from authentik.core.models import Group, PropertyMapping, Source, User
 6from authentik.core.sources.mapper import SourceMapper
 7from authentik.lib.generators import generate_id
 8from authentik.lib.models import InternallyManagedMixin
 9
10
11class ProxySource(InternallyManagedMixin, Source):
12    @property
13    def property_mapping_type(self):
14        return PropertyMapping
15
16    def get_base_user_properties(self, **kwargs):
17        return {
18            "username": kwargs.get("username", None),
19            "email": kwargs.get("email", "default@authentik"),
20        }
21
22    def get_base_group_properties(self, **kwargs):
23        return {"name": kwargs.get("name", None)}
24
25    class Meta:
26        proxy = True
27
28
29class TestSourcePropertyMappings(TestCase):
30    """Test Source PropertyMappings"""
31
32    def test_base_properties(self):
33        source = ProxySource.objects.create(name=generate_id(), slug=generate_id(), enabled=True)
34        mapper = SourceMapper(source)
35
36        user_base_properties = mapper.get_base_properties(User, username="test1")
37        self.assertEqual(
38            user_base_properties,
39            {
40                "username": "test1",
41                "email": "default@authentik",
42                "path": f"goauthentik.io/sources/{source.slug}",
43            },
44        )
45
46        group_base_properties = mapper.get_base_properties(Group)
47        self.assertEqual(group_base_properties, {"name": None})
48
49    def test_build_properties(self):
50        source = ProxySource.objects.create(name=generate_id(), slug=generate_id(), enabled=True)
51        mapper = SourceMapper(source)
52
53        source.user_property_mappings.add(
54            PropertyMapping.objects.create(
55                name=generate_id(),
56                expression="""
57                    return {"username": data.get("username", None), "email": None}
58                """,
59            )
60        )
61
62        properties = mapper.build_object_properties(
63            object_type=User, user=None, request=None, username="test1", data={"username": "test2"}
64        )
65
66        self.assertEqual(
67            properties,
68            {
69                "username": "test2",
70                "path": f"goauthentik.io/sources/{source.slug}",
71                "attributes": {},
72            },
73        )
12class ProxySource(InternallyManagedMixin, Source):
13    @property
14    def property_mapping_type(self):
15        return PropertyMapping
16
17    def get_base_user_properties(self, **kwargs):
18        return {
19            "username": kwargs.get("username", None),
20            "email": kwargs.get("email", "default@authentik"),
21        }
22
23    def get_base_group_properties(self, **kwargs):
24        return {"name": kwargs.get("name", None)}
25
26    class Meta:
27        proxy = True

ProxySource(pbm_uuid, policy_engine_mode, policybindingmodel_ptr, managed, name, slug, user_path_template, enabled, promoted, icon, authentication_flow, enrollment_flow, user_matching_mode, group_matching_mode)

property_mapping_type
13    @property
14    def property_mapping_type(self):
15        return PropertyMapping

Return property mapping type used by this object

def get_base_user_properties(self, **kwargs):
17    def get_base_user_properties(self, **kwargs):
18        return {
19            "username": kwargs.get("username", None),
20            "email": kwargs.get("email", "default@authentik"),
21        }

Get base properties for a user to build final properties upon.

def get_base_group_properties(self, **kwargs):
23    def get_base_group_properties(self, **kwargs):
24        return {"name": kwargs.get("name", None)}

Get base properties for a group to build final properties upon.

class ProxySource.DoesNotExist(authentik.core.models.Source.DoesNotExist):

The requested object does not exist

class ProxySource.MultipleObjectsReturned(authentik.core.models.Source.MultipleObjectsReturned):

The query returned multiple objects when only one was expected.

class TestSourcePropertyMappings(django.test.testcases.TestCase):
30class TestSourcePropertyMappings(TestCase):
31    """Test Source PropertyMappings"""
32
33    def test_base_properties(self):
34        source = ProxySource.objects.create(name=generate_id(), slug=generate_id(), enabled=True)
35        mapper = SourceMapper(source)
36
37        user_base_properties = mapper.get_base_properties(User, username="test1")
38        self.assertEqual(
39            user_base_properties,
40            {
41                "username": "test1",
42                "email": "default@authentik",
43                "path": f"goauthentik.io/sources/{source.slug}",
44            },
45        )
46
47        group_base_properties = mapper.get_base_properties(Group)
48        self.assertEqual(group_base_properties, {"name": None})
49
50    def test_build_properties(self):
51        source = ProxySource.objects.create(name=generate_id(), slug=generate_id(), enabled=True)
52        mapper = SourceMapper(source)
53
54        source.user_property_mappings.add(
55            PropertyMapping.objects.create(
56                name=generate_id(),
57                expression="""
58                    return {"username": data.get("username", None), "email": None}
59                """,
60            )
61        )
62
63        properties = mapper.build_object_properties(
64            object_type=User, user=None, request=None, username="test1", data={"username": "test2"}
65        )
66
67        self.assertEqual(
68            properties,
69            {
70                "username": "test2",
71                "path": f"goauthentik.io/sources/{source.slug}",
72                "attributes": {},
73            },
74        )

Test Source PropertyMappings

def test_base_properties(self):
33    def test_base_properties(self):
34        source = ProxySource.objects.create(name=generate_id(), slug=generate_id(), enabled=True)
35        mapper = SourceMapper(source)
36
37        user_base_properties = mapper.get_base_properties(User, username="test1")
38        self.assertEqual(
39            user_base_properties,
40            {
41                "username": "test1",
42                "email": "default@authentik",
43                "path": f"goauthentik.io/sources/{source.slug}",
44            },
45        )
46
47        group_base_properties = mapper.get_base_properties(Group)
48        self.assertEqual(group_base_properties, {"name": None})
def test_build_properties(self):
50    def test_build_properties(self):
51        source = ProxySource.objects.create(name=generate_id(), slug=generate_id(), enabled=True)
52        mapper = SourceMapper(source)
53
54        source.user_property_mappings.add(
55            PropertyMapping.objects.create(
56                name=generate_id(),
57                expression="""
58                    return {"username": data.get("username", None), "email": None}
59                """,
60            )
61        )
62
63        properties = mapper.build_object_properties(
64            object_type=User, user=None, request=None, username="test1", data={"username": "test2"}
65        )
66
67        self.assertEqual(
68            properties,
69            {
70                "username": "test2",
71                "path": f"goauthentik.io/sources/{source.slug}",
72                "attributes": {},
73            },
74        )