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

[#3688] Add migration to set required fields from global configuration #3870

Merged
merged 1 commit into from
Feb 13, 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Generated by Django 3.2.24 on 2024-02-12 16:47

from django.db import migrations
from django.db.migrations.state import StateApps
from django.db.backends.base.schema import BaseDatabaseSchemaEditor

from openforms.registrations.contrib.objects_api.plugin import (
PLUGIN_IDENTIFIER as OBJECTS_API_PLUGIN_IDENTIFIER,
)


def fill_objects_api_registration_backend_required_fields(
apps: StateApps, schema_editor: BaseDatabaseSchemaEditor
) -> None:
"""Explicitly use the globally configured ProductAanvraag objecttype and version for forms relying on the default."""

ObjectsAPIConfig = apps.get_model("registrations_objects_api", "ObjectsAPIConfig")

try:
objects_api_config = ObjectsAPIConfig.objects.get()
except ObjectsAPIConfig.DoesNotExist:
return

objecttype_url = objects_api_config.objecttype
objecttype_version = objects_api_config.objecttype_version

if not (objecttype_url and objecttype_version):
return

FormRegistrationBackend = apps.get_model("forms", "FormRegistrationBackend")

for form_registration_backend in FormRegistrationBackend.objects.filter(
backend=OBJECTS_API_PLUGIN_IDENTIFIER
).iterator():
form_registration_backend.options.setdefault("objecttype", objecttype_url)
form_registration_backend.options.setdefault(
"objecttype_version", objecttype_version
)
form_registration_backend.save()


class Migration(migrations.Migration):

dependencies = [
("registrations_objects_api", "0011_create_objecttypesypes_service_from_url"),
("forms", "0104_allow_invalid_input_datetime"),
]

operations = [
migrations.RunPython(
fill_objects_api_registration_backend_required_fields,
migrations.RunPython.noop,
),
]
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,46 @@
from openforms.utils.tests.test_migrations import TestMigrations


class SetRequiredObjectsAPIOptionsFields(TestMigrations):
app = "registrations_objects_api"
migrate_from = "0011_create_objecttypesypes_service_from_url"
migrate_to = "0012_fill_required_fields"

def setUpBeforeMigration(self, apps: StateApps):
ObjectsAPIConfig = apps.get_model(
"registrations_objects_api", "ObjectsAPIConfig"
)
ObjectsAPIConfig.objects.create(
objecttype="https://objecttypen.nl/path/api/v1/objecttypes/2c66dabf-a967-4057-9969-0700320d23a2",
objecttype_version=1,
)

Form = apps.get_model("forms", "Form")
form = Form.objects.create(name="test form")

FormRegistrationBackend = apps.get_model("forms", "FormRegistrationBackend")
FormRegistrationBackend.objects.create(
form=form,
key="dummy",
name="dummy",
backend=OBJECTS_API_PLUGIN_IDENTIFIER,
options={},
)

def test_migration_sets_required_fields(self):
FormRegistrationBackend = self.apps.get_model(
"forms", "FormRegistrationBackend"
)

form_registration_backend = FormRegistrationBackend.objects.first()

self.assertEqual(
form_registration_backend.options["objecttype"],
"https://objecttypen.nl/path/api/v1/objecttypes/2c66dabf-a967-4057-9969-0700320d23a2",
)
self.assertEqual(form_registration_backend.options["objecttype_version"], 1)


class ObjecttypesServiceFromDefaultUrlMigrationTests(TestMigrations):
app = "registrations_objects_api"
migrate_from = "0010_objectsapiconfig_objecttypes_service"
Expand Down
Loading