diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 3f779060d..83b4e9b25 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -698,7 +698,9 @@ def _get_content_count_error_and_message_for_template(template): # Check for blocked characters if contains_blocked_characters(template.content): warning = f"{s1}{s2}" - return False, Markup(warning) # 🚨 ONLY show the warning, hiding "Will be charged..." + return False, Markup( + warning + ) # 🚨 ONLY show the warning, hiding "Will be charged..." # If message is too long, return the length error if template.is_message_too_long(): diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index b057580ab..19818c5b6 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -1748,7 +1748,12 @@ def test_can_create_email_template_with_emoji( @pytest.mark.parametrize( ("template_type", "expected_error"), [ - ("sms", ("Please remove the unaccepted character 🍜 in your message, then save again")), + ( + "sms", + ( + "Please remove the unaccepted character 🍜 in your message, then save again" + ), + ), ], ) def test_should_not_create_sms_template_with_emoji( @@ -1773,14 +1778,21 @@ def test_should_not_create_sms_template_with_emoji( _expected_status=200, ) # print(page.main.prettify()) - assert expected_error in normalize_spaces(page.select_one("#template_content-error").text) + assert expected_error in normalize_spaces( + page.select_one("#template_content-error").text + ) assert mock_create_service_template.called is False @pytest.mark.parametrize( ("template_type", "expected_error"), [ - ("sms", ("Please remove the unaccepted character 🍔 in your message, then save again")), + ( + "sms", + ( + "Please remove the unaccepted character 🍔 in your message, then save again" + ), + ), ], ) def test_should_not_update_sms_template_with_emoji( diff --git a/tests/javascripts/validation.test.js b/tests/javascripts/validation.test.js index fb6b1a67e..22e85c0b5 100644 --- a/tests/javascripts/validation.test.js +++ b/tests/javascripts/validation.test.js @@ -5,14 +5,14 @@ describe("Form Validation", () => { beforeEach(() => { document.body.innerHTML = ` -
`; - form = document.querySelector(".send-one-off-form"); + form = document.querySelector('form[data-force-focus="True"]'); input = document.getElementById("test-input"); submitButton = form.querySelector("button"); @@ -59,4 +59,55 @@ describe("Form Validation", () => { expect(spy).toHaveBeenCalled(); }); + + test("Displays error if no radio in group is selected", async () => { + document.body.innerHTML = ` + + `; + + form = document.querySelector('form[data-force-focus="True"]'); + attachValidation(); + + form.dispatchEvent(new Event("submit", { bubbles: true })); + await new Promise(resolve => setTimeout(resolve, 20)); + + const errorElement = document.getElementById("group-error"); + expect(errorElement).not.toBeNull(); + expect(errorElement.textContent).toBe("Error: A selection must be made."); + }); + + test("Removes radio group error when one is selected", async () => { + document.body.innerHTML = ` + + `; + + form = document.querySelector('form[data-force-focus="True"]'); + attachValidation(); + + form.dispatchEvent(new Event("submit", { bubbles: true })); + await new Promise(resolve => setTimeout(resolve, 20)); + + const radioInput = document.getElementById("radio2"); + radioInput.checked = true; + radioInput.dispatchEvent(new Event("change", { bubbles: true })); + + const errorElement = document.getElementById("group-error"); + expect(errorElement.style.display).toBe("none"); + }); + });