diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index 24fe38039..a6153dcbc 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -5,3 +5,5 @@ $(() => GOVUK.modules.start()); $(() => new GOVUK.SelectionButtons('.block-label input, .sms-message-option input')); $(() => $('.error-message').eq(0).parent('label').next('input').trigger('focus')); + +$(() => $('.banner-dangerous').eq(0).trigger('focus')); diff --git a/app/assets/stylesheets/components/banner.scss b/app/assets/stylesheets/components/banner.scss index 5c40f11ec..9aded8655 100644 --- a/app/assets/stylesheets/components/banner.scss +++ b/app/assets/stylesheets/components/banner.scss @@ -54,6 +54,10 @@ margin: 15px 0; text-align: left; + &:focus { + outline: 3px solid $yellow; + } + .button { @include button($error-colour); margin-top: 10px; diff --git a/app/templates/components/banner.html b/app/templates/components/banner.html index d008b5b57..a21984b25 100644 --- a/app/templates/components/banner.html +++ b/app/templates/components/banner.html @@ -1,5 +1,11 @@ {% macro banner(body, type=None, with_tick=False, delete_button=None, subhead=None) %} -
+
{% if subhead -%} {{ subhead }}  {%- endif -%} diff --git a/app/templates/views/api/whitelist.html b/app/templates/views/api/whitelist.html index 3e7c25b6e..441c1b00c 100644 --- a/app/templates/views/api/whitelist.html +++ b/app/templates/views/api/whitelist.html @@ -1,4 +1,5 @@ {% extends "withnav_template.html" %} +{% from "components/banner.html" import banner_wrapper %} {% from "components/table.html" import list_table, field, hidden_field_heading %} {% from "components/api-key.html" import api_key %} {% from "components/page-footer.html" import page_footer %} @@ -10,9 +11,30 @@ {% block maincolumn_content %} -

- Whitelist -

+ {% if form.email_addresses.errors or form.phone_numbers.errors %} + {% call banner_wrapper(type='dangerous') %} +

+ There was a problem with your whitelist +

+

Fix these errors:

+ + {% endcall %} + {% else %} +

+ Whitelist +

+ {% endif %}

You and members of diff --git a/tests/app/main/views/test_api_keys.py b/tests/app/main/views/test_api_keys.py index 38c1100ee..a3c809e67 100644 --- a/tests/app/main/views/test_api_keys.py +++ b/tests/app/main/views/test_api_keys.py @@ -318,3 +318,33 @@ def test_should_update_whitelist( mock_update_whitelist.assert_called_once_with(service_id, { 'email_addresses': ['test@example.com', 'test@example.com'], 'phone_numbers': ['07900900000']}) + + +def test_should_validate_whitelist_items( + logged_in_client, + mock_login, + api_user_active, + mock_get_service, + mock_has_permissions, + mock_update_whitelist +): + + response = logged_in_client.post( + url_for('main.whitelist', service_id=str(uuid.uuid4())), + data=OrderedDict([ + ('email_addresses-1', 'abc'), + ('phone_numbers-0', '123') + ]) + ) + + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + assert page.h1.string.strip() == 'There was a problem with your whitelist' + jump_links = page.select('.banner-dangerous a') + + assert jump_links[0].string.strip() == 'Enter valid email addresses' + assert jump_links[0]['href'] == '#email_addresses' + + assert jump_links[1].string.strip() == 'Enter valid phone numbers' + assert jump_links[1]['href'] == '#phone_numbers' + + mock_update_whitelist.assert_not_called()