Skip to content

Commit

Permalink
Ensure case contact form selects klanten backend from API group
Browse files Browse the repository at this point in the history
  • Loading branch information
swrichards committed Mar 4, 2025
1 parent 56b7abf commit 6b26d01
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 7 deletions.
36 changes: 34 additions & 2 deletions src/open_inwoner/cms/cases/tests/test_contactform.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,11 @@
from open_inwoner.openklant.tests.data import CONTACTMOMENTEN_ROOT, KLANTEN_ROOT
from open_inwoner.openklant.tests.factories import OpenKlant2ConfigFactory
from open_inwoner.openklant.tests.mocks import MockOpenKlant2Service
from open_inwoner.openzaak.models import CatalogusConfig, OpenZaakConfig
from open_inwoner.openzaak.models import (
CatalogusConfig,
OpenZaakConfig,
ZGWApiGroupConfig,
)
from open_inwoner.openzaak.tests.factories import (
ServiceFactory,
ZaakTypeConfigFactory,
Expand Down Expand Up @@ -530,6 +534,12 @@ def test_form_success_with_api_esuite(
self._setUpOpenKlantMocks(m)

response = self.app.get(self.case_detail_url, user=self.user)

# Set the primary to the opposite API, to ensure we pick the connected
# backend from the ZGWApiGroup
self.klant_config.primary_backend = KlantenServiceType.OPENKLANT2.value
self.klant_config.save()

form = response.forms["contact-form"]
form.action = reverse(
"cases:case_detail_contact_form",
Expand Down Expand Up @@ -595,7 +605,9 @@ def test_form_success_with_api_openklant(
subject="oip_subject",
)

self.klant_config.primary_backend = KlantenServiceType.OPENKLANT2.value
# Set the primary to the opposite API, to ensure we pick the connected
# backend from the ZGWApiGroup
self.klant_config.primary_backend = KlantenServiceType.ESUITE.value
self.klant_config.save()

response = self.app.get(self.case_detail_url, user=self.user)
Expand Down Expand Up @@ -886,3 +898,23 @@ def test_send_email_confirmation_is_configurable__send_disabled(
form["question"] = "Sample text"
response = form.submit()
mock_send_confirm.assert_not_called()

def test_non_existent_zgw_api_group_passed(
self, m, mock_contactmoment, mock_send_confirm
):
self._setUpMocks(m)
self._setUpExtraMocks(m)
self._setUpOpenKlantMocks(m)

response = self.app.get(self.case_detail_url, user=self.user)
form = response.forms["contact-form"]

self.assertFalse(ZGWApiGroupConfig.objects.filter(id=8888).exists())

form.action = reverse(
"cases:case_detail_contact_form",
kwargs={"object_id": self.zaak["uuid"], "api_group_id": 8888},
)
response = form.submit()

self.assertEqual(response.status_code, 404)
29 changes: 24 additions & 5 deletions src/open_inwoner/cms/cases/views/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -914,6 +914,12 @@ class CaseContactFormView(CaseAccessMixin, LogMixin, FormView):
form_class = CaseContactForm

def post(self, request, *args, **kwargs):
try:
api_group = ZGWApiGroupConfig.objects.get(pk=self.kwargs["api_group_id"])
except ZGWApiGroupConfig.DoesNotExist as exc:
logger.exception("Non-existent ZGWApiGroupConfig passed")
raise Http404 from exc

form = self.get_form()

if form.is_valid():
Expand All @@ -933,7 +939,7 @@ def post(self, request, *args, **kwargs):
send_confirmation = email_success

if klant_config.register_contact_via_api:
api_success = self.register_by_api(form, config=klant_config)
api_success = self.register_by_api(form, api_group)
if api_success:
send_confirmation = klant_config.send_email_confirmation
# else keep the send_confirmation if email set it
Expand Down Expand Up @@ -1000,10 +1006,23 @@ def register_by_email(self, form, recipient_email):
)
return False

def register_by_api(self, form, config: KlantenSysteemConfig):
if config.primary_backend == KlantenServiceType.ESUITE.value:
return self._register_via_esuite(form, config=ESuiteKlantConfig.get_solo())
return self._register_via_openklant(form, config=OpenKlant2Config.get_solo())
def register_by_api(self, form, api_group: ZGWApiGroupConfig):
if not api_group.klant_backend:
return

match api_group.klant_backend:
case KlantenServiceType.ESUITE.value:
return self._register_via_esuite(
form, config=ESuiteKlantConfig.get_solo()
)
case KlantenServiceType.OPENKLANT2.value:
return self._register_via_openklant(
form, config=OpenKlant2Config.get_solo()
)
case _:
logger.error(
"Got non-existent klanten backend %s", api_group.klant_backend
)

def _register_via_openklant(self, form, config: OpenKlant2Config) -> bool:
user = self.request.user
Expand Down

0 comments on commit 6b26d01

Please sign in to comment.