diff --git a/testapp/settings.py b/testapp/settings.py index 7433b094..e1abcd85 100644 --- a/testapp/settings.py +++ b/testapp/settings.py @@ -42,6 +42,7 @@ "simple_certmanager", "zgw_consumers", "notifications_api_common", + "django_setup_configuration", "vng_api_common", "vng_api_common.authorizations", "vng_api_common.notifications", diff --git a/tests/files/setup_config_jwtsecrets.yaml b/tests/files/setup_config_jwtsecrets.yaml new file mode 100644 index 00000000..8618d293 --- /dev/null +++ b/tests/files/setup_config_jwtsecrets.yaml @@ -0,0 +1,7 @@ +vng_api_common_credentials_config_enable: True +vng_api_common_credentials: + items: + - identifier: user-id + secret: super-secret + - identifier: user-id2 + secret: super-secret2 diff --git a/tests/test_configuration_steps.py b/tests/test_configuration_steps.py new file mode 100644 index 00000000..7f79d6eb --- /dev/null +++ b/tests/test_configuration_steps.py @@ -0,0 +1,62 @@ +import pytest +from django_setup_configuration.test_utils import execute_single_step + +from vng_api_common.contrib.setup_configuration.steps import JWTSecretsConfigurationStep +from vng_api_common.models import JWTSecret + +CONFIG_FILE_PATH = "tests/files/setup_config_jwtsecrets.yaml" + + +@pytest.mark.django_db +def test_execute_configuration_step_success(): + execute_single_step(JWTSecretsConfigurationStep, yaml_source=CONFIG_FILE_PATH) + + assert JWTSecret.objects.count() == 2 + + credential1, credential2 = JWTSecret.objects.all() + + assert credential1.identifier == "user-id" + assert credential1.secret == "super-secret" + + assert credential2.identifier == "user-id2" + assert credential2.secret == "super-secret2" + + +@pytest.mark.django_db +def test_execute_configuration_step_update_existing(): + JWTSecret.objects.create(identifier="user-id", secret="old") + JWTSecret.objects.create(identifier="user-id2", secret="old2") + + execute_single_step(JWTSecretsConfigurationStep, yaml_source=CONFIG_FILE_PATH) + + assert JWTSecret.objects.count() == 2 + + credential1, credential2 = JWTSecret.objects.all() + + assert credential1.identifier == "user-id" + assert credential1.secret == "super-secret" + + assert credential2.identifier == "user-id2" + assert credential2.secret == "super-secret2" + + +@pytest.mark.django_db +def test_execute_configuration_step_idempotent(): + def make_assertions(): + assert JWTSecret.objects.count() == 2 + + credential1, credential2 = JWTSecret.objects.all() + + assert credential1.identifier == "user-id" + assert credential1.secret == "super-secret" + + assert credential2.identifier == "user-id2" + assert credential2.secret == "super-secret2" + + execute_single_step(JWTSecretsConfigurationStep, yaml_source=CONFIG_FILE_PATH) + + make_assertions() + + execute_single_step(JWTSecretsConfigurationStep, yaml_source=CONFIG_FILE_PATH) + + make_assertions() diff --git a/tox.ini b/tox.ini index a65dae50..3661226b 100644 --- a/tox.ini +++ b/tox.ini @@ -19,6 +19,7 @@ DJANGO = extras = tests coverage + setup-configuration deps = django42: Django~=4.2.0 setenv =