Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#2587] Require all services except forms in ZGWApiGroupConfig #1278

Merged
merged 1 commit into from
Jun 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions src/open_inwoner/cms/cases/tests/test_contactform.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@
from open_inwoner.openklant.models import OpenKlantConfig
from open_inwoner.openklant.tests.data import CONTACTMOMENTEN_ROOT, KLANTEN_ROOT
from open_inwoner.openzaak.models import CatalogusConfig, OpenZaakConfig
from open_inwoner.openzaak.tests.factories import ServiceFactory, ZaakTypeConfigFactory
from open_inwoner.openzaak.tests.factories import (
ServiceFactory,
ZaakTypeConfigFactory,
ZGWApiGroupConfigFactory,
)
from open_inwoner.openzaak.tests.helpers import generate_oas_component_cached
from open_inwoner.openzaak.tests.shared import (
CATALOGI_ROOT,
Expand Down Expand Up @@ -61,19 +65,15 @@ def setUp(self):
self.user = DigidUserFactory(bsn="900222086")

# services
self.zaak_service = ServiceFactory(api_root=ZAKEN_ROOT, api_type=APITypes.zrc)
self.catalogi_service = ServiceFactory(
api_root=CATALOGI_ROOT, api_type=APITypes.ztc
)
self.document_service = ServiceFactory(
api_root=DOCUMENTEN_ROOT, api_type=APITypes.drc
ZGWApiGroupConfigFactory(
zrc_service__api_root=ZAKEN_ROOT,
ztc_service__api_root=CATALOGI_ROOT,
drc_service__api_root=DOCUMENTEN_ROOT,
form_service=None,
)

# openzaak config
self.oz_config = OpenZaakConfig.get_solo()
self.oz_config.zaak_service = self.zaak_service
self.oz_config.catalogi_service = self.catalogi_service
self.oz_config.document_service = self.document_service
self.oz_config.document_max_confidentiality = (
VertrouwelijkheidsAanduidingen.beperkt_openbaar
)
Expand Down
15 changes: 6 additions & 9 deletions src/open_inwoner/cms/cases/tests/test_htmx.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
ZaakTypeConfigFactory,
ZaakTypeInformatieObjectTypeConfigFactory,
ZaakTypeStatusTypeConfigFactory,
ZGWApiGroupConfigFactory,
)
from open_inwoner.openzaak.tests.helpers import generate_oas_component_cached
from open_inwoner.openzaak.tests.shared import (
Expand Down Expand Up @@ -71,18 +72,14 @@ def setUp(self) -> None:
self.config.save()

# services
self.zaak_service = ServiceFactory(api_root=ZAKEN_ROOT, api_type=APITypes.zrc)
self.catalogi_service = ServiceFactory(
api_root=CATALOGI_ROOT, api_type=APITypes.ztc
)
self.document_service = ServiceFactory(
api_root=DOCUMENTEN_ROOT, api_type=APITypes.drc
ZGWApiGroupConfigFactory(
ztc_service__api_root=CATALOGI_ROOT,
zrc_service__api_root=ZAKEN_ROOT,
drc_service__api_root=DOCUMENTEN_ROOT,
form_service=None,
)
# openzaak config
self.oz_config = OpenZaakConfig.get_solo()
self.oz_config.zaak_service = self.zaak_service
self.oz_config.catalogi_service = self.catalogi_service
self.oz_config.document_service = self.document_service
self.oz_config.document_max_confidentiality = (
VertrouwelijkheidsAanduidingen.beperkt_openbaar
)
Expand Down
21 changes: 10 additions & 11 deletions src/open_inwoner/cms/products/tests/test_plugin_categories.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from furl import furl
from requests import RequestException
from zgw_consumers.api_models.constants import VertrouwelijkheidsAanduidingen
from zgw_consumers.constants import APITypes

from open_inwoner.accounts.tests.factories import (
DigidUserFactory,
Expand All @@ -22,7 +21,10 @@
from open_inwoner.configurations.models import SiteConfiguration
from open_inwoner.kvk.branches import KVK_BRANCH_SESSION_VARIABLE
from open_inwoner.openzaak.models import OpenZaakConfig
from open_inwoner.openzaak.tests.factories import ServiceFactory, ZaakTypeConfigFactory
from open_inwoner.openzaak.tests.factories import (
ZaakTypeConfigFactory,
ZGWApiGroupConfigFactory,
)
from open_inwoner.openzaak.tests.helpers import generate_oas_component_cached
from open_inwoner.openzaak.tests.shared import (
CATALOGI_ROOT,
Expand Down Expand Up @@ -387,18 +389,15 @@ def setUp(self):
self.eherkenning_user = eHerkenningUserFactory(kvk="12345678", rsin="123456789")

# services
self.zaak_service = ServiceFactory(api_root=ZAKEN_ROOT, api_type=APITypes.zrc)
self.catalogi_service = ServiceFactory(
api_root=CATALOGI_ROOT, api_type=APITypes.ztc
)
self.document_service = ServiceFactory(
api_root=DOCUMENTEN_ROOT, api_type=APITypes.drc
ZGWApiGroupConfigFactory(
zrc_service__api_root=ZAKEN_ROOT,
ztc_service__api_root=CATALOGI_ROOT,
drc_service__api_root=DOCUMENTEN_ROOT,
form_service=None,
)

# openzaak config
self.config = OpenZaakConfig.get_solo()
self.config.zaak_service = self.zaak_service
self.config.catalogi_service = self.catalogi_service
self.config.document_service = self.document_service
self.config.document_max_confidentiality = (
VertrouwelijkheidsAanduidingen.beperkt_openbaar
)
Expand Down
35 changes: 17 additions & 18 deletions src/open_inwoner/configurations/bootstrap/zgw.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
build_forms_client,
build_zaken_client,
)
from open_inwoner.openzaak.models import OpenZaakConfig
from open_inwoner.openzaak.models import OpenZaakConfig, ZGWApiGroupConfig
from open_inwoner.utils.api import ClientError

from .base import ConfigSettingsBase
Expand Down Expand Up @@ -301,27 +301,26 @@ class ZGWAPIsConfigurationStep(BaseConfigurationStep):
enable_setting = "ZGW_CONFIG_ENABLE"

def is_configured(self) -> bool:
"""Verify that at least 1 ZGW API set is configured."""
zgw_config = OpenZaakConfig.get_solo()
return (
bool(zgw_config.zaak_service)
and bool(zgw_config.catalogi_service)
and bool(zgw_config.document_service)
and bool(zgw_config.form_service)
)
return ZGWApiGroupConfig.objects.filter(open_zaak_config=zgw_config).exists()

def configure(self):
config = OpenZaakConfig.get_solo()
config.zaak_service = Service.objects.get(
api_root=settings.ZGW_ZAAK_SERVICE_API_ROOT
)
config.catalogi_service = Service.objects.get(
api_root=settings.ZGW_CATALOGI_SERVICE_API_ROOT
)
config.document_service = Service.objects.get(
api_root=settings.ZGW_DOCUMENTEN_SERVICE_API_ROOT
)
config.form_service = Service.objects.get(
api_root=settings.ZGW_FORM_SERVICE_API_ROOT
ZGWApiGroupConfig.objects.create(
open_zaak_config=config,
zrc_service=Service.objects.get(
api_root=settings.ZGW_ZAAK_SERVICE_API_ROOT
),
ztc_service=Service.objects.get(
api_root=settings.ZGW_CATALOGI_SERVICE_API_ROOT
),
drc_service=Service.objects.get(
api_root=settings.ZGW_DOCUMENTEN_SERVICE_API_ROOT
),
form_service=Service.objects.get(
api_root=settings.ZGW_FORM_SERVICE_API_ROOT
),
)

# General config options
Expand Down
15 changes: 8 additions & 7 deletions src/open_inwoner/openklant/tests/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@
)
from open_inwoner.openklant.constants import Status
from open_inwoner.openklant.models import OpenKlantConfig
from open_inwoner.openzaak.models import OpenZaakConfig
from open_inwoner.openzaak.tests.factories import ServiceFactory
from open_inwoner.openzaak.tests.factories import (
ServiceFactory,
ZGWApiGroupConfigFactory,
)
from open_inwoner.openzaak.tests.helpers import generate_oas_component_cached
from open_inwoner.openzaak.tests.shared import ZAKEN_ROOT
from open_inwoner.utils.test import paginated_response

KLANTEN_ROOT = "https://klanten.nl/api/v1/"
CONTACTMOMENTEN_ROOT = "https://contactmomenten.nl/api/v1/"
ZAKEN_ROOT = "https://zaken.nl/api/v1/"


class MockAPIData:
Expand All @@ -29,11 +31,10 @@ def setUpServices(cls):
)
config.save()

oz_config = OpenZaakConfig.get_solo()
oz_config.zaak_service = ServiceFactory(
api_root=ZAKEN_ROOT, api_type=APITypes.zrc
# services
ZGWApiGroupConfigFactory(
zrc_service__api_root=ZAKEN_ROOT,
)
oz_config.save()


class MockAPIReadPatchData(MockAPIData):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Generated by Django 4.2.11 on 2024-06-25 14:11

import django.db.models.deletion
from django.db import DataError, migrations, models


def validate_no_missing_service_fields(apps, schema_editor):
ZGWApiGroupConfig = apps.get_model("openzaak", "ZGWApiGroupConfig")

if rows_with_missing_services := ZGWApiGroupConfig.objects.filter(
models.Q(drc_service__isnull=True)
| models.Q(zrc_service__isnull=True)
| models.Q(ztc_service__isnull=True)
).count():
raise DataError(
f"Your database contains {rows_with_missing_services} ZGWApiGroupConfig"
" row(s) with missing ztc, drc, or ztc service fields. All these fields"
" are now required, with the exception of your form field. Please manually"
" update all the affected rows"
)


class Migration(migrations.Migration):

dependencies = [
("zgw_consumers", "0019_alter_service_uuid"),
("openzaak", "0053_zaaktypeconfig_catalogus_is_required"),
]

operations = [
migrations.RunPython(
validate_no_missing_service_fields,
reverse_code=lambda *args, **kwargs: None,
),
migrations.AlterField(
model_name="zgwapigroupconfig",
name="drc_service",
field=models.ForeignKey(
limit_choices_to={"api_type": "drc"},
on_delete=django.db.models.deletion.PROTECT,
related_name="zgwset_drc_config",
to="zgw_consumers.service",
verbose_name="Documenten API",
),
),
migrations.AlterField(
model_name="zgwapigroupconfig",
name="form_service",
field=models.OneToOneField(
blank=True,
limit_choices_to={"api_type": "orc"},
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="zgwset_orc_form_config",
to="zgw_consumers.service",
verbose_name="Form API",
),
),
migrations.AlterField(
model_name="zgwapigroupconfig",
name="zrc_service",
field=models.ForeignKey(
limit_choices_to={"api_type": "zrc"},
on_delete=django.db.models.deletion.PROTECT,
related_name="zgwset_zrc_config",
to="zgw_consumers.service",
verbose_name="Zaken API",
),
),
migrations.AlterField(
model_name="zgwapigroupconfig",
name="ztc_service",
field=models.ForeignKey(
limit_choices_to={"api_type": "ztc"},
on_delete=django.db.models.deletion.PROTECT,
related_name="zgwset_ztc_config",
to="zgw_consumers.service",
verbose_name="Catalogi API",
),
),
]
15 changes: 11 additions & 4 deletions src/open_inwoner/openzaak/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,23 +65,26 @@ class ZGWApiGroupConfig(models.Model):
on_delete=models.PROTECT,
limit_choices_to={"api_type": APITypes.zrc},
related_name="zgwset_zrc_config",
null=True,
null=False,
blank=False,
)
drc_service = models.ForeignKey(
"zgw_consumers.Service",
verbose_name=_("Documenten API"),
on_delete=models.PROTECT,
limit_choices_to={"api_type": APITypes.drc},
related_name="zgwset_drc_config",
null=True,
null=False,
blank=False,
)
ztc_service = models.ForeignKey(
"zgw_consumers.Service",
verbose_name=_("Catalogi API"),
on_delete=models.PROTECT,
limit_choices_to={"api_type": APITypes.ztc},
related_name="zgwset_ztc_config",
null=True,
null=False,
blank=False,
)
form_service = models.OneToOneField(
"zgw_consumers.Service",
Expand All @@ -90,6 +93,7 @@ class ZGWApiGroupConfig(models.Model):
limit_choices_to={"api_type": APITypes.orc},
related_name="zgwset_orc_form_config",
null=True,
blank=True,
)

class Meta:
Expand Down Expand Up @@ -144,7 +148,10 @@ def _set_zgw_service(self, field: str, service):

with transaction.atomic():
if self.default_zgw_api_group is None:
ZGWApiGroupConfig.objects.create(open_zaak_config=self)
raise RuntimeError(
"You must define a default set of ZGW APIs before you can access them "
"using the legacy `*_client` getters/setters."
)

default_group = self.default_zgw_api_group
setattr(default_group, field, service)
Expand Down
18 changes: 7 additions & 11 deletions src/open_inwoner/openzaak/tests/test_case_detail.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
from ...utils.tests.helpers import AssertRedirectsMixin
from ..api_models import Status, StatusType
from ..models import OpenZaakConfig
from .factories import CatalogusConfigFactory, ServiceFactory
from .factories import CatalogusConfigFactory, ServiceFactory, ZGWApiGroupConfigFactory
from .helpers import generate_oas_component_cached
from .shared import CATALOGI_ROOT, DOCUMENTEN_ROOT, ZAKEN_ROOT

Expand Down Expand Up @@ -81,22 +81,18 @@ def setUp(self):
login_type=LoginTypeChoices.eherkenning,
)
# services
self.zaak_service = ServiceFactory(api_root=ZAKEN_ROOT, api_type=APITypes.zrc)
self.catalogi_service = ServiceFactory(
api_root=CATALOGI_ROOT, api_type=APITypes.ztc
)
self.document_service = ServiceFactory(
api_root=DOCUMENTEN_ROOT, api_type=APITypes.drc
)
self.contactmoment_service = ServiceFactory(
api_root=CONTACTMOMENTEN_ROOT, api_type=APITypes.cmc
)
ZGWApiGroupConfigFactory(
ztc_service__api_root=CATALOGI_ROOT,
zrc_service__api_root=ZAKEN_ROOT,
drc_service__api_root=DOCUMENTEN_ROOT,
form_service=None,
)

# openzaak config
self.config = OpenZaakConfig.get_solo()
self.config.zaak_service = self.zaak_service
self.config.catalogi_service = self.catalogi_service
self.config.document_service = self.document_service
self.config.document_max_confidentiality = (
VertrouwelijkheidsAanduidingen.beperkt_openbaar
)
Expand Down
Loading
Loading