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