Let people go live without filling the volumes

At the moment it 500s because it can’t format the `None` values as
numbers.

In the future we will stop people requesting to go live until they’ve
provided this info. For now it has to be optional.
This commit is contained in:
Chris Hill-Scott
2019-02-27 17:05:02 +00:00
parent 852ae037d1
commit 5f4280cf81
2 changed files with 56 additions and 12 deletions

View File

@@ -201,9 +201,9 @@ def submit_request_to_go_live(service_id):
'\nOrganisation type: {organisation_type}' '\nOrganisation type: {organisation_type}'
'\nAgreement signed: {agreement}' '\nAgreement signed: {agreement}'
'\nChecklist completed: {checklist}' '\nChecklist completed: {checklist}'
'\nEmails in next year: {volume_email:,.0f}' '\nEmails in next year: {volume_email_formatted}'
'\nText messages in next year: {volume_sms:,.0f}' '\nText messages in next year: {volume_sms_formatted}'
'\nLetters in next year: {volume_letter:,.0f}' '\nLetters in next year: {volume_letter_formatted}'
'\nConsent to research: {research_consent}' '\nConsent to research: {research_consent}'
'\nOther live services: {existing_live}' '\nOther live services: {existing_live}'
'\n' '\n'
@@ -225,9 +225,12 @@ def submit_request_to_go_live(service_id):
organisation_type=str(current_service.organisation_type).title(), organisation_type=str(current_service.organisation_type).title(),
agreement=AgreementInfo.from_current_user().as_human_readable, agreement=AgreementInfo.from_current_user().as_human_readable,
checklist=current_service.go_live_checklist_completed_as_yes_no, checklist=current_service.go_live_checklist_completed_as_yes_no,
volume_email=current_service.volume_email, volume_email=print_if_number(current_service.volume_email),
volume_sms=current_service.volume_sms, volume_email_formatted=format_if_number(current_service.volume_email),
volume_letter=current_service.volume_letter, volume_sms=print_if_number(current_service.volume_sms),
volume_sms_formatted=format_if_number(current_service.volume_sms),
volume_letter=print_if_number(current_service.volume_letter),
volume_letter_formatted=format_if_number(current_service.volume_letter),
research_consent='Yes' if current_service.consent_to_research else 'No', research_consent='Yes' if current_service.consent_to_research else 'No',
existing_live='Yes' if user_api_client.user_has_live_services(current_user) else 'No', existing_live='Yes' if user_api_client.user_has_live_services(current_user) else 'No',
service_id=current_service.id, service_id=current_service.id,
@@ -1070,3 +1073,11 @@ def _get_request_to_go_live_tags(service, agreement_signed):
): ):
if test: if test:
yield BASE + '_incomplete' + tag yield BASE + '_incomplete' + tag
def print_if_number(value):
return value if isinstance(value, int) else ''
def format_if_number(value):
return '{:,.0f}'.format(value) if isinstance(value, int) else ''

View File

@@ -1017,6 +1017,26 @@ def test_non_gov_users_cant_request_to_go_live(
) )
@pytest.mark.parametrize('volumes, displayed_volumes, formatted_displayed_volumes', (
(
(('email', None), ('sms', None), ('letter', None)),
', , ',
(
'Emails in next year: \n'
'Text messages in next year: \n'
'Letters in next year: \n'
),
),
(
(('email', 1234), ('sms', 0), ('letter', 999)),
'0, 1234, 999', # This is a different order to match the spreadsheet
(
'Emails in next year: 1,234\n'
'Text messages in next year: 0\n'
'Letters in next year: 999\n'
),
),
))
@freeze_time("2012-12-21") @freeze_time("2012-12-21")
def test_should_redirect_after_request_to_go_live( def test_should_redirect_after_request_to_go_live(
client_request, client_request,
@@ -1030,7 +1050,17 @@ def test_should_redirect_after_request_to_go_live(
mock_get_service_settings_page_common, mock_get_service_settings_page_common,
mock_get_service_templates, mock_get_service_templates,
mock_get_users_by_service, mock_get_users_by_service,
volumes,
displayed_volumes,
formatted_displayed_volumes,
): ):
for channel, volume in volumes:
mocker.patch(
'app.models.service.Service.volume_{}'.format(channel),
create=True,
new_callable=PropertyMock,
return_value=volume,
)
mock_post = mocker.patch('app.main.views.service_settings.zendesk_client.create_ticket', autospec=True) mock_post = mocker.patch('app.main.views.service_settings.zendesk_client.create_ticket', autospec=True)
page = client_request.post( page = client_request.post(
'main.request_to_go_live', 'main.request_to_go_live',
@@ -1053,21 +1083,24 @@ def test_should_redirect_after_request_to_go_live(
) )
assert mock_post.call_args[1]['message'] == ( assert mock_post.call_args[1]['message'] == (
'Service: service one\n' 'Service: service one\n'
'http://localhost/services/{}\n' 'http://localhost/services/{service_id}\n'
'\n' '\n'
'---\n' '---\n'
'Organisation type: Central\n' 'Organisation type: Central\n'
'Agreement signed: Cant tell (domain is user.gov.uk)\n' 'Agreement signed: Cant tell (domain is user.gov.uk)\n'
'Checklist completed: No\n' 'Checklist completed: No\n'
'Emails in next year: 111,111\n' '{formatted_displayed_volumes}'
'Text messages in next year: 222,222\n'
'Letters in next year: 333,333\n'
'Consent to research: Yes\n' 'Consent to research: Yes\n'
'Other live services: No\n' 'Other live services: No\n'
'\n' '\n'
'---\n' '---\n'
'{}, None, service one, Test User, test@user.gov.uk, -, 21/12/2012, 222222, 111111, 333333' '{service_id}, None, service one, Test User, test@user.gov.uk, -, 21/12/2012, '
).format(SERVICE_ONE_ID, SERVICE_ONE_ID) '{displayed_volumes}'
).format(
service_id=SERVICE_ONE_ID,
displayed_volumes=displayed_volumes,
formatted_displayed_volumes=formatted_displayed_volumes,
)
assert normalize_spaces(page.select_one('.banner-default').text) == ( assert normalize_spaces(page.select_one('.banner-default').text) == (
'Thanks for your request to go live. Well get back to you within one working day.' 'Thanks for your request to go live. Well get back to you within one working day.'