authentik.sources.oauth.tests.test_property_mappings

Apple Type tests

  1"""Apple Type tests"""
  2
  3from copy import deepcopy
  4
  5from django.contrib.auth.models import AnonymousUser
  6from django.test import TestCase
  7
  8from authentik.core.tests.utils import RequestFactory
  9from authentik.lib.generators import generate_id
 10from authentik.sources.oauth.models import OAuthSource, OAuthSourcePropertyMapping
 11from authentik.sources.oauth.views.callback import OAuthSourceFlowManager
 12
 13INFO = {
 14    "sub": "83692",
 15    "name": "Alice Adams",
 16    "email": "alice@example.com",
 17    "department": "Engineering",
 18    "birthdate": "1975-12-31",
 19    "nickname": "foo",
 20}
 21IDENTIFIER = INFO["sub"]
 22
 23
 24class TestPropertyMappings(TestCase):
 25    """OAuth Source tests"""
 26
 27    def setUp(self):
 28        self.source = OAuthSource.objects.create(
 29            name="test",
 30            slug="test",
 31            provider_type="openidconnect",
 32            authorization_url="",
 33            profile_url="",
 34            consumer_key=generate_id(),
 35        )
 36        self.request_factory = RequestFactory()
 37
 38    def test_user_base_properties(self):
 39        """Test user base properties"""
 40        properties = self.source.get_base_user_properties(info=INFO)
 41        self.assertEqual(
 42            properties,
 43            {
 44                "email": "alice@example.com",
 45                "groups": [],
 46                "name": "Alice Adams",
 47                "username": "foo",
 48            },
 49        )
 50
 51    def test_group_base_properties(self):
 52        """Test group base properties"""
 53        info = deepcopy(INFO)
 54        info["groups"] = ["group 1", "group 2"]
 55        properties = self.source.get_base_user_properties(info=info)
 56        self.assertEqual(properties["groups"], ["group 1", "group 2"])
 57        for group_id in info["groups"]:
 58            properties = self.source.get_base_group_properties(info=info, group_id=group_id)
 59            self.assertEqual(properties, {"name": group_id})
 60
 61    def test_user_property_mappings(self):
 62        self.source.user_property_mappings.add(
 63            OAuthSourcePropertyMapping.objects.create(
 64                name="test",
 65                expression="return {'attributes': {'department': info.get('department')}}",
 66            )
 67        )
 68        request = self.request_factory.get("/", user=AnonymousUser())
 69        flow_manager = OAuthSourceFlowManager(self.source, request, IDENTIFIER, {"info": INFO}, {})
 70        self.assertEqual(
 71            flow_manager.user_properties,
 72            {
 73                "attributes": {
 74                    "department": "Engineering",
 75                },
 76                "email": "alice@example.com",
 77                "name": "Alice Adams",
 78                "username": "foo",
 79                "path": self.source.get_user_path(),
 80            },
 81        )
 82
 83    def test_grup_property_mappings(self):
 84        info = deepcopy(INFO)
 85        info["groups"] = ["group 1", "group 2"]
 86        self.source.group_property_mappings.add(
 87            OAuthSourcePropertyMapping.objects.create(
 88                name="test",
 89                expression="return {'attributes': {'id': group_id}}",
 90            )
 91        )
 92        request = self.request_factory.get("/", user=AnonymousUser())
 93        flow_manager = OAuthSourceFlowManager(self.source, request, IDENTIFIER, {"info": info}, {})
 94        self.assertEqual(
 95            flow_manager.groups_properties,
 96            {
 97                "group 1": {
 98                    "name": "group 1",
 99                    "attributes": {
100                        "id": "group 1",
101                    },
102                },
103                "group 2": {
104                    "name": "group 2",
105                    "attributes": {
106                        "id": "group 2",
107                    },
108                },
109            },
110        )
INFO = {'sub': '83692', 'name': 'Alice Adams', 'email': 'alice@example.com', 'department': 'Engineering', 'birthdate': '1975-12-31', 'nickname': 'foo'}
IDENTIFIER = '83692'
class TestPropertyMappings(django.test.testcases.TestCase):
 25class TestPropertyMappings(TestCase):
 26    """OAuth Source tests"""
 27
 28    def setUp(self):
 29        self.source = OAuthSource.objects.create(
 30            name="test",
 31            slug="test",
 32            provider_type="openidconnect",
 33            authorization_url="",
 34            profile_url="",
 35            consumer_key=generate_id(),
 36        )
 37        self.request_factory = RequestFactory()
 38
 39    def test_user_base_properties(self):
 40        """Test user base properties"""
 41        properties = self.source.get_base_user_properties(info=INFO)
 42        self.assertEqual(
 43            properties,
 44            {
 45                "email": "alice@example.com",
 46                "groups": [],
 47                "name": "Alice Adams",
 48                "username": "foo",
 49            },
 50        )
 51
 52    def test_group_base_properties(self):
 53        """Test group base properties"""
 54        info = deepcopy(INFO)
 55        info["groups"] = ["group 1", "group 2"]
 56        properties = self.source.get_base_user_properties(info=info)
 57        self.assertEqual(properties["groups"], ["group 1", "group 2"])
 58        for group_id in info["groups"]:
 59            properties = self.source.get_base_group_properties(info=info, group_id=group_id)
 60            self.assertEqual(properties, {"name": group_id})
 61
 62    def test_user_property_mappings(self):
 63        self.source.user_property_mappings.add(
 64            OAuthSourcePropertyMapping.objects.create(
 65                name="test",
 66                expression="return {'attributes': {'department': info.get('department')}}",
 67            )
 68        )
 69        request = self.request_factory.get("/", user=AnonymousUser())
 70        flow_manager = OAuthSourceFlowManager(self.source, request, IDENTIFIER, {"info": INFO}, {})
 71        self.assertEqual(
 72            flow_manager.user_properties,
 73            {
 74                "attributes": {
 75                    "department": "Engineering",
 76                },
 77                "email": "alice@example.com",
 78                "name": "Alice Adams",
 79                "username": "foo",
 80                "path": self.source.get_user_path(),
 81            },
 82        )
 83
 84    def test_grup_property_mappings(self):
 85        info = deepcopy(INFO)
 86        info["groups"] = ["group 1", "group 2"]
 87        self.source.group_property_mappings.add(
 88            OAuthSourcePropertyMapping.objects.create(
 89                name="test",
 90                expression="return {'attributes': {'id': group_id}}",
 91            )
 92        )
 93        request = self.request_factory.get("/", user=AnonymousUser())
 94        flow_manager = OAuthSourceFlowManager(self.source, request, IDENTIFIER, {"info": info}, {})
 95        self.assertEqual(
 96            flow_manager.groups_properties,
 97            {
 98                "group 1": {
 99                    "name": "group 1",
100                    "attributes": {
101                        "id": "group 1",
102                    },
103                },
104                "group 2": {
105                    "name": "group 2",
106                    "attributes": {
107                        "id": "group 2",
108                    },
109                },
110            },
111        )

OAuth Source tests

def setUp(self):
28    def setUp(self):
29        self.source = OAuthSource.objects.create(
30            name="test",
31            slug="test",
32            provider_type="openidconnect",
33            authorization_url="",
34            profile_url="",
35            consumer_key=generate_id(),
36        )
37        self.request_factory = RequestFactory()

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

def test_user_base_properties(self):
39    def test_user_base_properties(self):
40        """Test user base properties"""
41        properties = self.source.get_base_user_properties(info=INFO)
42        self.assertEqual(
43            properties,
44            {
45                "email": "alice@example.com",
46                "groups": [],
47                "name": "Alice Adams",
48                "username": "foo",
49            },
50        )

Test user base properties

def test_group_base_properties(self):
52    def test_group_base_properties(self):
53        """Test group base properties"""
54        info = deepcopy(INFO)
55        info["groups"] = ["group 1", "group 2"]
56        properties = self.source.get_base_user_properties(info=info)
57        self.assertEqual(properties["groups"], ["group 1", "group 2"])
58        for group_id in info["groups"]:
59            properties = self.source.get_base_group_properties(info=info, group_id=group_id)
60            self.assertEqual(properties, {"name": group_id})

Test group base properties

def test_user_property_mappings(self):
62    def test_user_property_mappings(self):
63        self.source.user_property_mappings.add(
64            OAuthSourcePropertyMapping.objects.create(
65                name="test",
66                expression="return {'attributes': {'department': info.get('department')}}",
67            )
68        )
69        request = self.request_factory.get("/", user=AnonymousUser())
70        flow_manager = OAuthSourceFlowManager(self.source, request, IDENTIFIER, {"info": INFO}, {})
71        self.assertEqual(
72            flow_manager.user_properties,
73            {
74                "attributes": {
75                    "department": "Engineering",
76                },
77                "email": "alice@example.com",
78                "name": "Alice Adams",
79                "username": "foo",
80                "path": self.source.get_user_path(),
81            },
82        )
def test_grup_property_mappings(self):
 84    def test_grup_property_mappings(self):
 85        info = deepcopy(INFO)
 86        info["groups"] = ["group 1", "group 2"]
 87        self.source.group_property_mappings.add(
 88            OAuthSourcePropertyMapping.objects.create(
 89                name="test",
 90                expression="return {'attributes': {'id': group_id}}",
 91            )
 92        )
 93        request = self.request_factory.get("/", user=AnonymousUser())
 94        flow_manager = OAuthSourceFlowManager(self.source, request, IDENTIFIER, {"info": info}, {})
 95        self.assertEqual(
 96            flow_manager.groups_properties,
 97            {
 98                "group 1": {
 99                    "name": "group 1",
100                    "attributes": {
101                        "id": "group 1",
102                    },
103                },
104                "group 2": {
105                    "name": "group 2",
106                    "attributes": {
107                        "id": "group 2",
108                    },
109                },
110            },
111        )