Allow international phone numbers in spreadsheet

If a service can send internationally, our CSV validation should not
catch valid international phone numbers. This means calling through
to code added to utils in:
- [ ] https://github.com/alphagov/notifications-utils/pull/156
This commit is contained in:
Chris Hill-Scott
2017-04-26 16:19:49 +01:00
parent d62fbcb4cb
commit fd7a34f1e4
3 changed files with 50 additions and 2 deletions

View File

@@ -218,7 +218,6 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False):
upload_id=upload_id
) if not letters_as_pdf else None
)
recipients = RecipientCSV(
contents,
template_type=template.template_type,
@@ -228,7 +227,8 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False):
whitelist=itertools.chain.from_iterable(
[user.name, user.mobile_number, user.email_address] for user in users
) if current_service['restricted'] else None,
remaining_messages=remaining_messages
remaining_messages=remaining_messages,
international_sms=current_service['can_send_international_sms'],
)
if request.args.get('from_test'):

View File

@@ -9,6 +9,7 @@ import pytest
from bs4 import BeautifulSoup
from flask import url_for
from notifications_utils.template import LetterPreviewTemplate
from notifications_utils.recipients import RecipientCSV
from app.main.views.send import get_check_messages_back_url
@@ -18,6 +19,8 @@ from tests.conftest import (
mock_get_service_template,
mock_get_service_template_with_placeholders,
mock_get_service_letter_template,
mock_get_service,
mock_get_international_service,
)
template_types = ['email', 'sms']
@@ -424,6 +427,42 @@ def test_upload_csvfile_with_valid_phone_shows_all_numbers(
mock_get_detailed_service_for_today.assert_called_once_with(fake_uuid)
@pytest.mark.parametrize('service_mock, should_allow_international', [
(mock_get_service, False),
(mock_get_international_service, True),
])
def test_upload_csvfile_with_international_validates(
mocker,
api_user_active,
logged_in_client,
mock_get_service_template,
mock_s3_upload,
mock_has_permissions,
mock_get_users_by_service,
mock_get_detailed_service_for_today,
fake_uuid,
service_mock,
should_allow_international,
):
service_mock(mocker, api_user_active)
mocker.patch('app.main.views.send.s3download', return_value='')
mock_recipients = mocker.patch(
'app.main.views.send.RecipientCSV',
return_value=RecipientCSV("", template_type="sms"),
)
response = logged_in_client.post(
url_for('main.send_messages', service_id=fake_uuid, template_id=fake_uuid),
data={'file': (BytesIO(''.encode('utf-8')), 'valid.csv')},
content_type='multipart/form-data',
follow_redirects=True,
)
assert response.status_code == 200
assert mock_recipients.call_args[1]['international_sms'] == should_allow_international
def test_test_message_can_only_be_sent_now(
logged_in_client,
mocker,

View File

@@ -77,6 +77,15 @@ def mock_get_service(mocker, api_user_active):
return mocker.patch('app.service_api_client.get_service', side_effect=_get)
@pytest.fixture(scope='function')
def mock_get_international_service(mocker, api_user_active):
def _get(service_id):
service = service_json(service_id, users=[api_user_active.id], can_send_international_sms=True)
return {'data': service}
return mocker.patch('app.service_api_client.get_service', side_effect=_get)
@pytest.fixture(scope='function')
def mock_get_detailed_service(mocker, api_user_active):
def _get(service_id):