diff --git a/app/main/forms.py b/app/main/forms.py index b66950051..180179349 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -431,15 +431,9 @@ class RequestToGoLiveForm(Form): ], validators=[DataRequired()] ) - channel = RadioField( - 'What kind of messages will you be sending?', - choices=[ - ('emails', 'Emails'), - ('text messages', 'Text messages'), - ('emails and text messages', 'Both') - ], - validators=[DataRequired()] - ) + channel_email = BooleanField('Emails') + channel_sms = BooleanField('Text messages') + channel_letter = BooleanField('Letters') start_date = StringField( 'When will you be ready to start sending messages?', validators=[DataRequired(message='Can’t be empty')] diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 866d19873..ccad8e04b 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -34,6 +34,7 @@ from app.main.forms import ( LetterBranding, ServiceInboundApiForm) from app import user_api_client, current_service, organisations_client, inbound_number_client +from notifications_utils.formatters import formatted_list dummy_bearer_token = 'bearer_token_set' @@ -166,7 +167,11 @@ def service_request_to_go_live(service_id): current_service['name'], url_for('main.service_dashboard', service_id=current_service['id'], _external=True), form.mou.data, - form.channel.data, + formatted_list(filter(None, ( + 'email' if form.channel_email.data else None, + 'text messages' if form.channel_sms.data else None, + 'letters' if form.channel_letter.data else None, + )), before_each='', after_each=''), form.start_date.data, form.start_volume.data, form.peak_volume.data, diff --git a/app/templates/components/checkbox.html b/app/templates/components/checkbox.html index 0f81c8831..ee2f8fb8d 100644 --- a/app/templates/components/checkbox.html +++ b/app/templates/components/checkbox.html @@ -20,3 +20,18 @@ {% endmacro %} + + +{% macro checkbox_group( + legend, + fields +) %} +
+ + {{ legend }} + + {% for field in fields %} + {{ checkbox(field) }} + {% endfor %} +
+{% endmacro %} diff --git a/app/templates/views/service-settings/request-to-go-live.html b/app/templates/views/service-settings/request-to-go-live.html index e6fe09188..0a7f087ca 100644 --- a/app/templates/views/service-settings/request-to-go-live.html +++ b/app/templates/views/service-settings/request-to-go-live.html @@ -1,4 +1,5 @@ {% extends "withnav_template.html" %} +{% from "components/checkbox.html" import checkbox_group %} {% from "components/textbox.html" import textbox %} {% from "components/radios.html" import radios %} {% from "components/page-footer.html" import page_footer %} @@ -38,8 +39,12 @@ 'don’t know': 'We’ll check for you', }) }} + {{ checkbox_group('What kind of messages will you be sending?', [ + form.channel_email, + form.channel_sms, + form.channel_letter + ]) }}
- {{ radios(form.channel) }} {{ textbox(form.start_date, width='1-1') }} {{ textbox(form.start_volume, width='1-1', hint='For example, ‘1000 a month’.') }} {{ textbox(form.peak_volume, width='1-1', hint='For example, ‘Messages will increase to 20,000 a month in January’.') }} diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index ec0eacef4..48aa2c109 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -435,43 +435,48 @@ def test_should_raise_duplicate_name_handled( def test_should_show_request_to_go_live( - logged_in_client, - mock_get_service, - service_one + client_request, ): - response = logged_in_client.get( - url_for('main.service_request_to_go_live', service_id=service_one['id'])) - assert response.status_code == 200 - resp_data = response.get_data(as_text=True) - assert 'Request to go live' in resp_data - assert mock_get_service.called + page = client_request.get( + 'main.service_request_to_go_live', service_id=SERVICE_ONE_ID + ) + assert page.h1.text == 'Request to go live' + for channel, label in ( + ('email', 'Emails'), + ('sms', 'Text messages'), + ('letter', 'Letters'), + ): + assert normalize_spaces( + page.select_one('label[for=channel_{}]'.format(channel)).text + ) == label def test_should_redirect_after_request_to_go_live( - logged_in_client, - active_user_with_permissions, - service_one, - mocker, - single_reply_to_email_addresses, - mock_get_letter_organisations, - mock_get_inbound_number_for_service + client_request, + mocker, + active_user_with_permissions, + single_reply_to_email_addresses, + mock_get_letter_organisations, + mock_get_inbound_number_for_service, ): mock_post = mocker.patch( 'app.main.views.feedback.requests.post', - return_value=Mock(status_code=201)) - response = logged_in_client.post( - url_for('main.service_request_to_go_live', service_id=service_one['id']), - data={ + return_value=Mock(status_code=201), + ) + page = client_request.post( + 'main.service_request_to_go_live', + service_id=SERVICE_ONE_ID, + _data={ 'mou': 'yes', - 'channel': 'emails', + 'channel_email': 'y', + 'channel_sms': 'y', 'start_date': '01/01/2017', 'start_volume': '100,000', 'peak_volume': '2,000,000', 'upload_or_api': 'API' }, - follow_redirects=True + _follow_redirects=True ) - assert response.status_code == 200 mock_post.assert_called_with( ANY, data={ @@ -486,17 +491,18 @@ def test_should_redirect_after_request_to_go_live( ) returned_message = mock_post.call_args[1]['data']['message'] - assert 'emails' in returned_message - assert '01/01/2017' in returned_message - assert '100,000' in returned_message - assert '2,000,000' in returned_message - assert 'API' in returned_message + assert 'Channel: email and text messages' in returned_message + assert 'Start date: 01/01/2017' in returned_message + assert 'Start volume: 100,000' in returned_message + assert 'Peak volume: 2,000,000' in returned_message + assert 'Upload or API: API' in returned_message - page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') - flash_banner = page.find('div', class_='banner-default').string.strip() - h1 = page.find('h1').string.strip() - assert flash_banner == 'We’ve received your request to go live' - assert h1 == 'Settings' + assert normalize_spaces(page.select_one('.banner-default').text) == ( + 'We’ve received your request to go live' + ) + assert normalize_spaces(page.select_one('h1').text) == ( + 'Settings' + ) def test_log_error_on_request_to_go_live(