From 7265ef7eacd4340fc95b09322c129c291a09a65d Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Thu, 18 Apr 2024 15:11:03 +0200 Subject: [PATCH 1/2] :white_check_mark: [#2324] Add test for setup_configuration command --- .../bootstrap/test_setup_configuration.py | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py diff --git a/src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py b/src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py new file mode 100644 index 0000000000..cd829c5ac7 --- /dev/null +++ b/src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py @@ -0,0 +1,138 @@ +from io import StringIO +from unittest.mock import patch + +from django.core.management import call_command + +from rest_framework.test import APITestCase + +from open_inwoner.configurations.bootstrap.auth import ( + AdminOIDCConfigurationStep, + DigiDConfigurationStep, + DigiDOIDCConfigurationStep, + eHerkenningConfigurationStep, + eHerkenningOIDCConfigurationStep, +) +from open_inwoner.configurations.bootstrap.kic import ( + ContactmomentenAPIConfigurationStep, + KICAPIsConfigurationStep, + KlantenAPIConfigurationStep, +) +from open_inwoner.configurations.bootstrap.siteconfig import SiteConfigurationStep +from open_inwoner.configurations.bootstrap.zgw import ( + CatalogiAPIConfigurationStep, + DocumentenAPIConfigurationStep, + FormulierenAPIConfigurationStep, + ZakenAPIConfigurationStep, + ZGWAPIsConfigurationStep, +) + + +class SetupConfigurationTests(APITestCase): + maxDiff = None + + @patch( + "open_inwoner.configurations.bootstrap.zgw.ZakenAPIConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.zgw.CatalogiAPIConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.zgw.DocumentenAPIConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.zgw.FormulierenAPIConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.zgw.ZGWAPIsConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.kic.KlantenAPIConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.kic.ContactmomentenAPIConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.kic.KICAPIsConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.siteconfig.SiteConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.auth.DigiDOIDCConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.auth.eHerkenningOIDCConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.auth.AdminOIDCConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.auth.DigiDConfigurationStep.configure" + ) + @patch( + "open_inwoner.configurations.bootstrap.auth.eHerkenningConfigurationStep.configure" + ) + def test_setup_configuration_success(self, *mocks): + stdout = StringIO() + + call_command( + "setup_configuration", + no_selftest=True, + stdout=stdout, + no_color=True, + ) + + steps_to_configure = [ + ZakenAPIConfigurationStep(), + CatalogiAPIConfigurationStep(), + DocumentenAPIConfigurationStep(), + FormulierenAPIConfigurationStep(), + ZGWAPIsConfigurationStep(), + KlantenAPIConfigurationStep(), + ContactmomentenAPIConfigurationStep(), + KICAPIsConfigurationStep(), + SiteConfigurationStep(), + DigiDOIDCConfigurationStep(), + eHerkenningOIDCConfigurationStep(), + AdminOIDCConfigurationStep(), + DigiDConfigurationStep(), + eHerkenningConfigurationStep(), + ] + + command_output = stdout.getvalue().splitlines() + expected_output = [ + "Configuration will be set up with following steps: " + f"[{', '.join(str(step) for step in steps_to_configure)}]", + f"Configuring {ZakenAPIConfigurationStep()}...", + f"{ZakenAPIConfigurationStep()} is successfully configured", + f"Configuring {CatalogiAPIConfigurationStep()}...", + f"{CatalogiAPIConfigurationStep()} is successfully configured", + f"Configuring {DocumentenAPIConfigurationStep()}...", + f"{DocumentenAPIConfigurationStep()} is successfully configured", + f"Configuring {FormulierenAPIConfigurationStep()}...", + f"{FormulierenAPIConfigurationStep()} is successfully configured", + f"Configuring {ZGWAPIsConfigurationStep()}...", + f"{ZGWAPIsConfigurationStep()} is successfully configured", + f"Configuring {KlantenAPIConfigurationStep()}...", + f"{KlantenAPIConfigurationStep()} is successfully configured", + f"Configuring {ContactmomentenAPIConfigurationStep()}...", + f"{ContactmomentenAPIConfigurationStep()} is successfully configured", + f"Configuring {KICAPIsConfigurationStep()}...", + f"{KICAPIsConfigurationStep()} is successfully configured", + f"Configuring {SiteConfigurationStep()}...", + f"{SiteConfigurationStep()} is successfully configured", + f"Configuring {DigiDOIDCConfigurationStep()}...", + f"{DigiDOIDCConfigurationStep()} is successfully configured", + f"Configuring {eHerkenningOIDCConfigurationStep()}...", + f"{eHerkenningOIDCConfigurationStep()} is successfully configured", + f"Configuring {AdminOIDCConfigurationStep()}...", + f"{AdminOIDCConfigurationStep()} is successfully configured", + f"Configuring {DigiDConfigurationStep()}...", + f"{DigiDConfigurationStep()} is successfully configured", + f"Configuring {eHerkenningConfigurationStep()}...", + f"{eHerkenningConfigurationStep()} is successfully configured", + "Selftest is skipped.", + "Instance configuration completed.", + ] + + self.assertEqual(command_output, expected_output) From 10b3c2dff1e591141f4678c5252cbf9313e1597c Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Thu, 18 Apr 2024 16:25:31 +0200 Subject: [PATCH 2/2] :ok_hand: [#2324] PR feedback --- .../bootstrap/test_setup_configuration.py | 135 +++++++----------- 1 file changed, 48 insertions(+), 87 deletions(-) diff --git a/src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py b/src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py index cd829c5ac7..9c5fbdb664 100644 --- a/src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py +++ b/src/open_inwoner/configurations/tests/bootstrap/test_setup_configuration.py @@ -2,6 +2,7 @@ from unittest.mock import patch from django.core.management import call_command +from django.test import override_settings from rest_framework.test import APITestCase @@ -26,52 +27,51 @@ ZGWAPIsConfigurationStep, ) +STEPS_TO_CONFIGURE = [ + ZakenAPIConfigurationStep(), + CatalogiAPIConfigurationStep(), + DocumentenAPIConfigurationStep(), + FormulierenAPIConfigurationStep(), + ZGWAPIsConfigurationStep(), + KlantenAPIConfigurationStep(), + ContactmomentenAPIConfigurationStep(), + KICAPIsConfigurationStep(), + SiteConfigurationStep(), + DigiDOIDCConfigurationStep(), + eHerkenningOIDCConfigurationStep(), + AdminOIDCConfigurationStep(), + DigiDConfigurationStep(), + eHerkenningConfigurationStep(), +] +REQUIRED_SETTINGS = { + setting_name: "SET" + for step in STEPS_TO_CONFIGURE + for setting_name in step.required_settings +} + + +@override_settings(**REQUIRED_SETTINGS) class SetupConfigurationTests(APITestCase): maxDiff = None - @patch( - "open_inwoner.configurations.bootstrap.zgw.ZakenAPIConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.zgw.CatalogiAPIConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.zgw.DocumentenAPIConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.zgw.FormulierenAPIConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.zgw.ZGWAPIsConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.kic.KlantenAPIConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.kic.ContactmomentenAPIConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.kic.KICAPIsConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.siteconfig.SiteConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.auth.DigiDOIDCConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.auth.eHerkenningOIDCConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.auth.AdminOIDCConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.auth.DigiDConfigurationStep.configure" - ) - @patch( - "open_inwoner.configurations.bootstrap.auth.eHerkenningConfigurationStep.configure" - ) + def setUp(self): + super().setUp() + + self.mocks = [] + for step in STEPS_TO_CONFIGURE: + mock_step = patch( + f"{step.__class__.__module__}.{step.__class__.__qualname__}.configure" + ) + self.mocks.append(mock_step) + mock_step.start() + + def stop_mocks(): + for mock_step in self.mocks: + mock_step.stop() + + self.addCleanup(stop_mocks) + def test_setup_configuration_success(self, *mocks): stdout = StringIO() @@ -82,55 +82,16 @@ def test_setup_configuration_success(self, *mocks): no_color=True, ) - steps_to_configure = [ - ZakenAPIConfigurationStep(), - CatalogiAPIConfigurationStep(), - DocumentenAPIConfigurationStep(), - FormulierenAPIConfigurationStep(), - ZGWAPIsConfigurationStep(), - KlantenAPIConfigurationStep(), - ContactmomentenAPIConfigurationStep(), - KICAPIsConfigurationStep(), - SiteConfigurationStep(), - DigiDOIDCConfigurationStep(), - eHerkenningOIDCConfigurationStep(), - AdminOIDCConfigurationStep(), - DigiDConfigurationStep(), - eHerkenningConfigurationStep(), - ] + output_per_step = [] + for step in STEPS_TO_CONFIGURE: + output_per_step.append(f"Configuring {str(step)}...") + output_per_step.append(f"{str(step)} is successfully configured") command_output = stdout.getvalue().splitlines() expected_output = [ "Configuration will be set up with following steps: " - f"[{', '.join(str(step) for step in steps_to_configure)}]", - f"Configuring {ZakenAPIConfigurationStep()}...", - f"{ZakenAPIConfigurationStep()} is successfully configured", - f"Configuring {CatalogiAPIConfigurationStep()}...", - f"{CatalogiAPIConfigurationStep()} is successfully configured", - f"Configuring {DocumentenAPIConfigurationStep()}...", - f"{DocumentenAPIConfigurationStep()} is successfully configured", - f"Configuring {FormulierenAPIConfigurationStep()}...", - f"{FormulierenAPIConfigurationStep()} is successfully configured", - f"Configuring {ZGWAPIsConfigurationStep()}...", - f"{ZGWAPIsConfigurationStep()} is successfully configured", - f"Configuring {KlantenAPIConfigurationStep()}...", - f"{KlantenAPIConfigurationStep()} is successfully configured", - f"Configuring {ContactmomentenAPIConfigurationStep()}...", - f"{ContactmomentenAPIConfigurationStep()} is successfully configured", - f"Configuring {KICAPIsConfigurationStep()}...", - f"{KICAPIsConfigurationStep()} is successfully configured", - f"Configuring {SiteConfigurationStep()}...", - f"{SiteConfigurationStep()} is successfully configured", - f"Configuring {DigiDOIDCConfigurationStep()}...", - f"{DigiDOIDCConfigurationStep()} is successfully configured", - f"Configuring {eHerkenningOIDCConfigurationStep()}...", - f"{eHerkenningOIDCConfigurationStep()} is successfully configured", - f"Configuring {AdminOIDCConfigurationStep()}...", - f"{AdminOIDCConfigurationStep()} is successfully configured", - f"Configuring {DigiDConfigurationStep()}...", - f"{DigiDConfigurationStep()} is successfully configured", - f"Configuring {eHerkenningConfigurationStep()}...", - f"{eHerkenningConfigurationStep()} is successfully configured", + f"[{', '.join(str(step) for step in STEPS_TO_CONFIGURE)}]", + *output_per_step, "Selftest is skipped.", "Instance configuration completed.", ]