authentik.blueprints.tests.test_v1_api
Test blueprints v1 api
1"""Test blueprints v1 api""" 2 3from json import loads 4from tempfile import NamedTemporaryFile, mkdtemp 5 6from django.urls import reverse 7from rest_framework.test import APITestCase 8from yaml import dump 9 10from authentik.core.tests.utils import create_test_admin_user 11from authentik.lib.config import CONFIG 12 13TMP = mkdtemp("authentik-blueprints") 14 15 16class TestBlueprintsV1API(APITestCase): 17 """Test Blueprints API""" 18 19 def setUp(self) -> None: 20 self.user = create_test_admin_user() 21 self.client.force_login(self.user) 22 23 @CONFIG.patch("blueprints_dir", TMP) 24 def test_api_available(self): 25 """Test valid file""" 26 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 27 file.write( 28 dump( 29 { 30 "version": 1, 31 "entries": [], 32 } 33 ) 34 ) 35 file.flush() 36 res = self.client.get(reverse("authentik_api:blueprintinstance-available")) 37 self.assertEqual(res.status_code, 200) 38 response = loads(res.content.decode()) 39 self.assertEqual(len(response), 1) 40 self.assertEqual( 41 response[0]["hash"], 42 ( 43 "e52bb445b03cd36057258dc9f0ce0fbed8278498ee1470e45315293e5f026d1bd1f9b352" 44 "6871c0003f5c07be5c3316d9d4a08444bd8fed1b3f03294e51e44522" 45 ), 46 ) 47 48 def test_api_oci(self): 49 """Test validation with OCI path""" 50 res = self.client.post( 51 reverse("authentik_api:blueprintinstance-list"), 52 data={"name": "foo", "path": "oci://foo/bar"}, 53 ) 54 self.assertEqual(res.status_code, 201) 55 56 def test_api_blank(self): 57 """Test blank""" 58 res = self.client.post( 59 reverse("authentik_api:blueprintinstance-list"), 60 data={ 61 "name": "foo", 62 }, 63 ) 64 self.assertEqual(res.status_code, 400) 65 self.assertJSONEqual( 66 res.content.decode(), {"non_field_errors": ["Either path or content must be set."]} 67 ) 68 69 def test_api_content(self): 70 """Test blank""" 71 res = self.client.post( 72 reverse("authentik_api:blueprintinstance-list"), 73 data={ 74 "name": "foo", 75 "content": '{"version": 3}', 76 }, 77 ) 78 self.assertEqual(res.status_code, 400) 79 self.assertJSONEqual( 80 res.content.decode(), 81 {"content": ["Failed to validate blueprint", "- Invalid blueprint version"]}, 82 )
TMP =
'/tmp/tmpknon0ieaauthentik-blueprints'
class
TestBlueprintsV1API(rest_framework.test.APITestCase):
17class TestBlueprintsV1API(APITestCase): 18 """Test Blueprints API""" 19 20 def setUp(self) -> None: 21 self.user = create_test_admin_user() 22 self.client.force_login(self.user) 23 24 @CONFIG.patch("blueprints_dir", TMP) 25 def test_api_available(self): 26 """Test valid file""" 27 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 28 file.write( 29 dump( 30 { 31 "version": 1, 32 "entries": [], 33 } 34 ) 35 ) 36 file.flush() 37 res = self.client.get(reverse("authentik_api:blueprintinstance-available")) 38 self.assertEqual(res.status_code, 200) 39 response = loads(res.content.decode()) 40 self.assertEqual(len(response), 1) 41 self.assertEqual( 42 response[0]["hash"], 43 ( 44 "e52bb445b03cd36057258dc9f0ce0fbed8278498ee1470e45315293e5f026d1bd1f9b352" 45 "6871c0003f5c07be5c3316d9d4a08444bd8fed1b3f03294e51e44522" 46 ), 47 ) 48 49 def test_api_oci(self): 50 """Test validation with OCI path""" 51 res = self.client.post( 52 reverse("authentik_api:blueprintinstance-list"), 53 data={"name": "foo", "path": "oci://foo/bar"}, 54 ) 55 self.assertEqual(res.status_code, 201) 56 57 def test_api_blank(self): 58 """Test blank""" 59 res = self.client.post( 60 reverse("authentik_api:blueprintinstance-list"), 61 data={ 62 "name": "foo", 63 }, 64 ) 65 self.assertEqual(res.status_code, 400) 66 self.assertJSONEqual( 67 res.content.decode(), {"non_field_errors": ["Either path or content must be set."]} 68 ) 69 70 def test_api_content(self): 71 """Test blank""" 72 res = self.client.post( 73 reverse("authentik_api:blueprintinstance-list"), 74 data={ 75 "name": "foo", 76 "content": '{"version": 3}', 77 }, 78 ) 79 self.assertEqual(res.status_code, 400) 80 self.assertJSONEqual( 81 res.content.decode(), 82 {"content": ["Failed to validate blueprint", "- Invalid blueprint version"]}, 83 )
Test Blueprints API
def
setUp(self) -> None:
20 def setUp(self) -> None: 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.
@CONFIG.patch('blueprints_dir', TMP)
def
test_api_available(self):
24 @CONFIG.patch("blueprints_dir", TMP) 25 def test_api_available(self): 26 """Test valid file""" 27 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 28 file.write( 29 dump( 30 { 31 "version": 1, 32 "entries": [], 33 } 34 ) 35 ) 36 file.flush() 37 res = self.client.get(reverse("authentik_api:blueprintinstance-available")) 38 self.assertEqual(res.status_code, 200) 39 response = loads(res.content.decode()) 40 self.assertEqual(len(response), 1) 41 self.assertEqual( 42 response[0]["hash"], 43 ( 44 "e52bb445b03cd36057258dc9f0ce0fbed8278498ee1470e45315293e5f026d1bd1f9b352" 45 "6871c0003f5c07be5c3316d9d4a08444bd8fed1b3f03294e51e44522" 46 ), 47 )
Test valid file
def
test_api_oci(self):
49 def test_api_oci(self): 50 """Test validation with OCI path""" 51 res = self.client.post( 52 reverse("authentik_api:blueprintinstance-list"), 53 data={"name": "foo", "path": "oci://foo/bar"}, 54 ) 55 self.assertEqual(res.status_code, 201)
Test validation with OCI path
def
test_api_blank(self):
57 def test_api_blank(self): 58 """Test blank""" 59 res = self.client.post( 60 reverse("authentik_api:blueprintinstance-list"), 61 data={ 62 "name": "foo", 63 }, 64 ) 65 self.assertEqual(res.status_code, 400) 66 self.assertJSONEqual( 67 res.content.decode(), {"non_field_errors": ["Either path or content must be set."]} 68 )
Test blank
def
test_api_content(self):
70 def test_api_content(self): 71 """Test blank""" 72 res = self.client.post( 73 reverse("authentik_api:blueprintinstance-list"), 74 data={ 75 "name": "foo", 76 "content": '{"version": 3}', 77 }, 78 ) 79 self.assertEqual(res.status_code, 400) 80 self.assertJSONEqual( 81 res.content.decode(), 82 {"content": ["Failed to validate blueprint", "- Invalid blueprint version"]}, 83 )
Test blank