authentik.endpoints.tests.test_api
1from unittest.mock import PropertyMock, patch 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.endpoints.connectors.agent.models import AgentConnector 8from authentik.endpoints.controller import BaseController 9from authentik.endpoints.models import StageMode 10from authentik.lib.generators import generate_id 11 12 13class TestAPI(APITestCase): 14 def setUp(self): 15 self.user = create_test_admin_user() 16 self.client.force_login(self.user) 17 18 def test_endpoint_stage_agent(self): 19 connector = AgentConnector.objects.create(name=generate_id()) 20 res = self.client.post( 21 reverse("authentik_api:stages-endpoint-list"), 22 data={ 23 "name": generate_id(), 24 "connector": str(connector.pk), 25 "mode": StageMode.REQUIRED, 26 }, 27 ) 28 self.assertEqual(res.status_code, 201) 29 30 def test_endpoint_stage_agent_no_stage(self): 31 connector = AgentConnector.objects.create(name=generate_id()) 32 33 class controller(BaseController): 34 def capabilities(self): 35 return [] 36 37 with patch.object(AgentConnector, "controller", PropertyMock(return_value=controller)): 38 res = self.client.post( 39 reverse("authentik_api:stages-endpoint-list"), 40 data={ 41 "name": generate_id(), 42 "connector": str(connector.pk), 43 "mode": StageMode.REQUIRED, 44 }, 45 ) 46 self.assertEqual(res.status_code, 400) 47 self.assertJSONEqual( 48 res.content, {"connector": ["Selected connector is not compatible with this stage."]} 49 )
class
TestAPI(rest_framework.test.APITestCase):
14class TestAPI(APITestCase): 15 def setUp(self): 16 self.user = create_test_admin_user() 17 self.client.force_login(self.user) 18 19 def test_endpoint_stage_agent(self): 20 connector = AgentConnector.objects.create(name=generate_id()) 21 res = self.client.post( 22 reverse("authentik_api:stages-endpoint-list"), 23 data={ 24 "name": generate_id(), 25 "connector": str(connector.pk), 26 "mode": StageMode.REQUIRED, 27 }, 28 ) 29 self.assertEqual(res.status_code, 201) 30 31 def test_endpoint_stage_agent_no_stage(self): 32 connector = AgentConnector.objects.create(name=generate_id()) 33 34 class controller(BaseController): 35 def capabilities(self): 36 return [] 37 38 with patch.object(AgentConnector, "controller", PropertyMock(return_value=controller)): 39 res = self.client.post( 40 reverse("authentik_api:stages-endpoint-list"), 41 data={ 42 "name": generate_id(), 43 "connector": str(connector.pk), 44 "mode": StageMode.REQUIRED, 45 }, 46 ) 47 self.assertEqual(res.status_code, 400) 48 self.assertJSONEqual( 49 res.content, {"connector": ["Selected connector is not compatible with this stage."]} 50 )
Similar to TransactionTestCase, but use transaction.atomic() to achieve
test isolation.
In most situations, TestCase should be preferred to TransactionTestCase as it allows faster execution. However, there are some situations where using TransactionTestCase might be necessary (e.g. testing some transactional behavior).
On database backends with no transaction support, TestCase behaves as TransactionTestCase.
def
test_endpoint_stage_agent(self):
19 def test_endpoint_stage_agent(self): 20 connector = AgentConnector.objects.create(name=generate_id()) 21 res = self.client.post( 22 reverse("authentik_api:stages-endpoint-list"), 23 data={ 24 "name": generate_id(), 25 "connector": str(connector.pk), 26 "mode": StageMode.REQUIRED, 27 }, 28 ) 29 self.assertEqual(res.status_code, 201)
def
test_endpoint_stage_agent_no_stage(self):
31 def test_endpoint_stage_agent_no_stage(self): 32 connector = AgentConnector.objects.create(name=generate_id()) 33 34 class controller(BaseController): 35 def capabilities(self): 36 return [] 37 38 with patch.object(AgentConnector, "controller", PropertyMock(return_value=controller)): 39 res = self.client.post( 40 reverse("authentik_api:stages-endpoint-list"), 41 data={ 42 "name": generate_id(), 43 "connector": str(connector.pk), 44 "mode": StageMode.REQUIRED, 45 }, 46 ) 47 self.assertEqual(res.status_code, 400) 48 self.assertJSONEqual( 49 res.content, {"connector": ["Selected connector is not compatible with this stage."]} 50 )