authentik.tenants.tests.test_local_settings

Test Settings API

  1"""Test Settings API"""
  2
  3from django.core.management import call_command
  4from django.urls import reverse
  5from rest_framework.test import APITestCase
  6
  7from authentik.core.tests.utils import create_test_admin_user
  8from authentik.tenants.flags import Flag
  9from authentik.tenants.utils import get_current_tenant
 10
 11
 12class TestLocalSettingsAPI(APITestCase):
 13    """Test settings API"""
 14
 15    def setUp(self):
 16        super().setUp()
 17        self.local_admin = create_test_admin_user()
 18        self.tenant = get_current_tenant()
 19
 20    def tearDown(self):
 21        super().tearDown()
 22        self.tenant.flags = {}
 23        self.tenant.save()
 24
 25    def test_settings_flags(self):
 26        """Test settings API"""
 27        self.tenant.flags = {}
 28        self.tenant.save()
 29
 30        class _TestFlag(Flag[bool], key="tenants_test_flag_bool"):
 31
 32            default = False
 33            visibility = "public"
 34
 35        self.client.force_login(self.local_admin)
 36        response = self.client.patch(
 37            reverse("authentik_api:tenant_settings"),
 38            data={
 39                "flags": {"tenants_test_flag_bool": True},
 40            },
 41        )
 42        self.assertEqual(response.status_code, 200)
 43        self.tenant.refresh_from_db()
 44        self.assertEqual(self.tenant.flags["tenants_test_flag_bool"], True)
 45
 46    def test_settings_flags_incorrect(self):
 47        """Test settings API"""
 48        self.tenant.flags = {}
 49        self.tenant.save()
 50
 51        class _TestFlag(Flag[bool], key="tenants_test_flag_incorrect"):
 52
 53            default = False
 54            visibility = "public"
 55
 56        self.client.force_login(self.local_admin)
 57        response = self.client.patch(
 58            reverse("authentik_api:tenant_settings"),
 59            data={
 60                "flags": {"tenants_test_flag_incorrect": 123},
 61            },
 62        )
 63        self.assertEqual(response.status_code, 400)
 64        self.assertJSONEqual(
 65            response.content,
 66            {"flags": ["Value for flag tenants_test_flag_incorrect needs to be of type bool."]},
 67        )
 68        self.tenant.refresh_from_db()
 69        self.assertEqual(self.tenant.flags, {})
 70
 71    def test_settings_flags_system(self):
 72        """Test settings API"""
 73        self.tenant.flags = {}
 74        self.tenant.save()
 75
 76        class _TestFlag(Flag[bool], key="tenants_test_flag_sys"):
 77
 78            default = False
 79            visibility = "system"
 80
 81        self.client.force_login(self.local_admin)
 82        response = self.client.patch(
 83            reverse("authentik_api:tenant_settings"),
 84            data={
 85                "flags": {"tenants_test_flag_sys": 123},
 86            },
 87        )
 88        self.assertEqual(response.status_code, 200)
 89        self.tenant.refresh_from_db()
 90        self.assertEqual(self.tenant.flags, {"setup": False, "tenants_test_flag_sys": False})
 91
 92    def test_settings_flags_system_empty_put(self):
 93        """Test settings API"""
 94        self.tenant.flags = {}
 95        self.tenant.save()
 96
 97        class _TestFlag(Flag[bool], key="tenants_test_flag_sys"):
 98
 99            default = False
100            visibility = "system"
101
102        self.client.force_login(self.local_admin)
103        response = self.client.patch(
104            reverse("authentik_api:tenant_settings"),
105            data={
106                "flags": {},
107            },
108        )
109        self.assertEqual(response.status_code, 200)
110        self.tenant.refresh_from_db()
111        self.assertEqual(self.tenant.flags, {"setup": False, "tenants_test_flag_sys": False})
112
113    def test_command(self):
114        self.tenant.flags = {}
115        self.tenant.save()
116
117        call_command("set_flag", "foo", "true")
118
119        self.tenant.refresh_from_db()
120        self.assertTrue(self.tenant.flags["foo"])
class TestLocalSettingsAPI(rest_framework.test.APITestCase):
 13class TestLocalSettingsAPI(APITestCase):
 14    """Test settings API"""
 15
 16    def setUp(self):
 17        super().setUp()
 18        self.local_admin = create_test_admin_user()
 19        self.tenant = get_current_tenant()
 20
 21    def tearDown(self):
 22        super().tearDown()
 23        self.tenant.flags = {}
 24        self.tenant.save()
 25
 26    def test_settings_flags(self):
 27        """Test settings API"""
 28        self.tenant.flags = {}
 29        self.tenant.save()
 30
 31        class _TestFlag(Flag[bool], key="tenants_test_flag_bool"):
 32
 33            default = False
 34            visibility = "public"
 35
 36        self.client.force_login(self.local_admin)
 37        response = self.client.patch(
 38            reverse("authentik_api:tenant_settings"),
 39            data={
 40                "flags": {"tenants_test_flag_bool": True},
 41            },
 42        )
 43        self.assertEqual(response.status_code, 200)
 44        self.tenant.refresh_from_db()
 45        self.assertEqual(self.tenant.flags["tenants_test_flag_bool"], True)
 46
 47    def test_settings_flags_incorrect(self):
 48        """Test settings API"""
 49        self.tenant.flags = {}
 50        self.tenant.save()
 51
 52        class _TestFlag(Flag[bool], key="tenants_test_flag_incorrect"):
 53
 54            default = False
 55            visibility = "public"
 56
 57        self.client.force_login(self.local_admin)
 58        response = self.client.patch(
 59            reverse("authentik_api:tenant_settings"),
 60            data={
 61                "flags": {"tenants_test_flag_incorrect": 123},
 62            },
 63        )
 64        self.assertEqual(response.status_code, 400)
 65        self.assertJSONEqual(
 66            response.content,
 67            {"flags": ["Value for flag tenants_test_flag_incorrect needs to be of type bool."]},
 68        )
 69        self.tenant.refresh_from_db()
 70        self.assertEqual(self.tenant.flags, {})
 71
 72    def test_settings_flags_system(self):
 73        """Test settings API"""
 74        self.tenant.flags = {}
 75        self.tenant.save()
 76
 77        class _TestFlag(Flag[bool], key="tenants_test_flag_sys"):
 78
 79            default = False
 80            visibility = "system"
 81
 82        self.client.force_login(self.local_admin)
 83        response = self.client.patch(
 84            reverse("authentik_api:tenant_settings"),
 85            data={
 86                "flags": {"tenants_test_flag_sys": 123},
 87            },
 88        )
 89        self.assertEqual(response.status_code, 200)
 90        self.tenant.refresh_from_db()
 91        self.assertEqual(self.tenant.flags, {"setup": False, "tenants_test_flag_sys": False})
 92
 93    def test_settings_flags_system_empty_put(self):
 94        """Test settings API"""
 95        self.tenant.flags = {}
 96        self.tenant.save()
 97
 98        class _TestFlag(Flag[bool], key="tenants_test_flag_sys"):
 99
100            default = False
101            visibility = "system"
102
103        self.client.force_login(self.local_admin)
104        response = self.client.patch(
105            reverse("authentik_api:tenant_settings"),
106            data={
107                "flags": {},
108            },
109        )
110        self.assertEqual(response.status_code, 200)
111        self.tenant.refresh_from_db()
112        self.assertEqual(self.tenant.flags, {"setup": False, "tenants_test_flag_sys": False})
113
114    def test_command(self):
115        self.tenant.flags = {}
116        self.tenant.save()
117
118        call_command("set_flag", "foo", "true")
119
120        self.tenant.refresh_from_db()
121        self.assertTrue(self.tenant.flags["foo"])

Test settings API

def setUp(self):
16    def setUp(self):
17        super().setUp()
18        self.local_admin = create_test_admin_user()
19        self.tenant = get_current_tenant()

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

def tearDown(self):
21    def tearDown(self):
22        super().tearDown()
23        self.tenant.flags = {}
24        self.tenant.save()

Hook method for deconstructing the test fixture after testing it.

def test_settings_flags(self):
26    def test_settings_flags(self):
27        """Test settings API"""
28        self.tenant.flags = {}
29        self.tenant.save()
30
31        class _TestFlag(Flag[bool], key="tenants_test_flag_bool"):
32
33            default = False
34            visibility = "public"
35
36        self.client.force_login(self.local_admin)
37        response = self.client.patch(
38            reverse("authentik_api:tenant_settings"),
39            data={
40                "flags": {"tenants_test_flag_bool": True},
41            },
42        )
43        self.assertEqual(response.status_code, 200)
44        self.tenant.refresh_from_db()
45        self.assertEqual(self.tenant.flags["tenants_test_flag_bool"], True)

Test settings API

def test_settings_flags_incorrect(self):
47    def test_settings_flags_incorrect(self):
48        """Test settings API"""
49        self.tenant.flags = {}
50        self.tenant.save()
51
52        class _TestFlag(Flag[bool], key="tenants_test_flag_incorrect"):
53
54            default = False
55            visibility = "public"
56
57        self.client.force_login(self.local_admin)
58        response = self.client.patch(
59            reverse("authentik_api:tenant_settings"),
60            data={
61                "flags": {"tenants_test_flag_incorrect": 123},
62            },
63        )
64        self.assertEqual(response.status_code, 400)
65        self.assertJSONEqual(
66            response.content,
67            {"flags": ["Value for flag tenants_test_flag_incorrect needs to be of type bool."]},
68        )
69        self.tenant.refresh_from_db()
70        self.assertEqual(self.tenant.flags, {})

Test settings API

def test_settings_flags_system(self):
72    def test_settings_flags_system(self):
73        """Test settings API"""
74        self.tenant.flags = {}
75        self.tenant.save()
76
77        class _TestFlag(Flag[bool], key="tenants_test_flag_sys"):
78
79            default = False
80            visibility = "system"
81
82        self.client.force_login(self.local_admin)
83        response = self.client.patch(
84            reverse("authentik_api:tenant_settings"),
85            data={
86                "flags": {"tenants_test_flag_sys": 123},
87            },
88        )
89        self.assertEqual(response.status_code, 200)
90        self.tenant.refresh_from_db()
91        self.assertEqual(self.tenant.flags, {"setup": False, "tenants_test_flag_sys": False})

Test settings API

def test_settings_flags_system_empty_put(self):
 93    def test_settings_flags_system_empty_put(self):
 94        """Test settings API"""
 95        self.tenant.flags = {}
 96        self.tenant.save()
 97
 98        class _TestFlag(Flag[bool], key="tenants_test_flag_sys"):
 99
100            default = False
101            visibility = "system"
102
103        self.client.force_login(self.local_admin)
104        response = self.client.patch(
105            reverse("authentik_api:tenant_settings"),
106            data={
107                "flags": {},
108            },
109        )
110        self.assertEqual(response.status_code, 200)
111        self.tenant.refresh_from_db()
112        self.assertEqual(self.tenant.flags, {"setup": False, "tenants_test_flag_sys": False})

Test settings API

def test_command(self):
114    def test_command(self):
115        self.tenant.flags = {}
116        self.tenant.save()
117
118        call_command("set_flag", "foo", "true")
119
120        self.tenant.refresh_from_db()
121        self.assertTrue(self.tenant.flags["foo"])