Skip to content

Commit

Permalink
[#2809] Anonymous contact form should not send empty email or phone
Browse files Browse the repository at this point in the history
  • Loading branch information
swrichards committed Oct 15, 2024
1 parent df9656f commit ff0f98f
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 6 deletions.
57 changes: 57 additions & 0 deletions src/open_inwoner/openklant/tests/test_contactform.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,63 @@ def test_submit_and_register_anon_via_api_without_klant(
self.assertTimelineLog("registered contactmoment by API")
mock_send_confirm.assert_called_once_with("foo@example.com", subject.subject)

def test_submit_and_register_anon_via_api_without_klant_does_not_send_empty_email_or_telephone(
self, m, mock_send_confirm, mock_captcha
):
config = OpenKlantConfig.get_solo()
config.register_contact_moment = True
config.register_bronorganisatie_rsin = "123456789"
config.register_type = "Melding"
config.register_channel = "contactformulier"
config.register_employee_id = "FooVonBar"
config.save()

MockAPICreateData.setUpServices()
data = MockAPICreateData()
data.install_mocks_anon_without_klant(m)

subject = ContactFormSubjectFactory(
config=config,
subject="Aanvraag document",
subject_code="afdeling-xyz",
)

for contact_details in (
{"phonenumber": "+31612345678", "email": ""},
{"phonenumber": "", "email": "foo@example.com"},
):
with self.subTest():
m.reset_mock()
response = self.app.get(self.url)
form = response.forms["contactmoment-form"]
form["subject"].select(text=subject.subject)
form["first_name"] = "Foo"
form["infix"] = "de"
form["last_name"] = "Bar"
form["question"] = "foobar"
form["phonenumber"] = contact_details["phonenumber"]
form["email"] = contact_details["email"]

response = form.submit().follow()

contactmoment_create_data = data.matchers[1].request_history[0].json()
contactgegevens = contactmoment_create_data["contactgegevens"]

if contact_details["email"]:
self.assertEqual(
contactgegevens["emailadres"], contact_details["email"]
)
else:
self.assertNotIn("emailadres", contactgegevens.keys())

if contact_details["phonenumber"]:
self.assertEqual(
contactgegevens["telefoonnummer"],
contact_details["phonenumber"],
)
else:
self.assertNotIn("telefoonnummer", contactgegevens.keys())

def test_register_bsn_user_via_api_without_id(
self, m, mock_send_confirm, mock_captcha
):
Expand Down
19 changes: 13 additions & 6 deletions src/open_inwoner/openklant/views/contactform.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,10 +234,16 @@ def register_by_api(self, form, config: OpenKlantConfig) -> tuple[bool, str]:
}

if not self.request.user.is_authenticated:
data["contactgegevens"] = {
"emailadres": form.cleaned_data["email"],
"telefoonnummer": form.cleaned_data["phonenumber"],
}
# Ensure we don't send an empty (and thus invalid) email or phonenumber
contactgegevens = {}
if form.cleaned_data["email"]:
contactgegevens["emailadres"] = form.cleaned_data["email"]

if form.cleaned_data["phonenumber"]:
contactgegevens["telefoonnummer"] = form.cleaned_data["phonenumber"]

if contactgegevens:
data["contactgegevens"] = contactgegevens

if employee_id := config.register_employee_id:
data["medewerkerIdentificatie"] = {"identificatie": employee_id}
Expand All @@ -252,7 +258,8 @@ def register_by_api(self, form, config: OpenKlantConfig) -> tuple[bool, str]:
)
return True, user_email
else:
self.log_system_action(
"error while registering contactmoment by API", user=self.request.user
self.log_system_error(
"error while registering contactmoment by API",
user=self.request.user,
)
return False, user_email

0 comments on commit ff0f98f

Please sign in to comment.