
* initial api and schema Signed-off-by: Jens Langhammer <jens@goauthentik.io> * separate blueprint importer from yaml parsing Signed-off-by: Jens Langhammer <jens@goauthentik.io> * cleanup Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add new "must_created" state to blueprints to prevent overwriting objects Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rework validation and error response to make it actually usable Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lint errors Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add defaults Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rework transaction_rollback Signed-off-by: Jens Langhammer <jens@goauthentik.io> * use static method for string imports of subclass Signed-off-by: Jens Langhammer <jens@goauthentik.io> * slight cleanup Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
"""Test blueprints v1"""
|
|
from django.test import TransactionTestCase
|
|
|
|
from authentik.blueprints.v1.importer import Importer
|
|
from authentik.flows.models import Flow
|
|
from authentik.lib.generators import generate_id
|
|
from authentik.lib.tests.utils import load_fixture
|
|
|
|
|
|
class TestBlueprintsV1State(TransactionTestCase):
|
|
"""Test Blueprints state attribute"""
|
|
|
|
def test_state_present(self):
|
|
"""Test state present"""
|
|
flow_slug = generate_id()
|
|
import_yaml = load_fixture("fixtures/state_present.yaml", id=flow_slug)
|
|
|
|
importer = Importer.from_string(import_yaml)
|
|
self.assertTrue(importer.validate()[0])
|
|
self.assertTrue(importer.apply())
|
|
# Ensure object exists
|
|
flow: Flow = Flow.objects.filter(slug=flow_slug).first()
|
|
self.assertEqual(flow.slug, flow_slug)
|
|
|
|
# Update object
|
|
flow.title = "bar"
|
|
flow.save()
|
|
|
|
flow.refresh_from_db()
|
|
self.assertEqual(flow.title, "bar")
|
|
|
|
# Ensure importer updates it
|
|
importer = Importer.from_string(import_yaml)
|
|
self.assertTrue(importer.validate()[0])
|
|
self.assertTrue(importer.apply())
|
|
flow: Flow = Flow.objects.filter(slug=flow_slug).first()
|
|
self.assertEqual(flow.title, "foo")
|
|
|
|
def test_state_created(self):
|
|
"""Test state created"""
|
|
flow_slug = generate_id()
|
|
import_yaml = load_fixture("fixtures/state_created.yaml", id=flow_slug)
|
|
|
|
importer = Importer.from_string(import_yaml)
|
|
self.assertTrue(importer.validate()[0])
|
|
self.assertTrue(importer.apply())
|
|
# Ensure object exists
|
|
flow: Flow = Flow.objects.filter(slug=flow_slug).first()
|
|
self.assertEqual(flow.slug, flow_slug)
|
|
|
|
# Update object
|
|
flow.title = "bar"
|
|
flow.save()
|
|
|
|
flow.refresh_from_db()
|
|
self.assertEqual(flow.title, "bar")
|
|
|
|
# Ensure importer doesn't update it
|
|
importer = Importer.from_string(import_yaml)
|
|
self.assertTrue(importer.validate()[0])
|
|
self.assertTrue(importer.apply())
|
|
flow: Flow = Flow.objects.filter(slug=flow_slug).first()
|
|
self.assertEqual(flow.title, "bar")
|
|
|
|
def test_state_absent(self):
|
|
"""Test state absent"""
|
|
flow_slug = generate_id()
|
|
import_yaml = load_fixture("fixtures/state_created.yaml", id=flow_slug)
|
|
|
|
importer = Importer.from_string(import_yaml)
|
|
self.assertTrue(importer.validate()[0])
|
|
self.assertTrue(importer.apply())
|
|
# Ensure object exists
|
|
flow: Flow = Flow.objects.filter(slug=flow_slug).first()
|
|
self.assertEqual(flow.slug, flow_slug)
|
|
|
|
import_yaml = load_fixture("fixtures/state_absent.yaml", id=flow_slug)
|
|
importer = Importer.from_string(import_yaml)
|
|
self.assertTrue(importer.validate()[0])
|
|
self.assertTrue(importer.apply())
|
|
flow: Flow = Flow.objects.filter(slug=flow_slug).first()
|
|
self.assertIsNone(flow)
|