mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-05 10:53:28 -05:00
Fix send email to self, it was always using mobile number to send mesasge. This fixes that.
260 lines
8.9 KiB
Python
260 lines
8.9 KiB
Python
import pytest
|
||
|
||
from io import BytesIO
|
||
from flask import url_for
|
||
from unittest.mock import ANY
|
||
|
||
template_types = ['email', 'sms']
|
||
|
||
|
||
@pytest.mark.parametrize("template_type", template_types)
|
||
def test_choose_template(
|
||
template_type,
|
||
app_,
|
||
api_user_active,
|
||
mock_login,
|
||
mock_get_user,
|
||
mock_get_service,
|
||
mock_check_verify_code,
|
||
mock_get_service_templates,
|
||
mock_get_jobs
|
||
):
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
response = client.get(url_for('main.choose_template', template_type=template_type, service_id=12345))
|
||
|
||
assert response.status_code == 200
|
||
content = response.get_data(as_text=True)
|
||
assert '{}_template_one'.format(template_type) in content
|
||
assert '{} template one content'.format(template_type) in content
|
||
assert '{}_template_two'.format(template_type) in content
|
||
assert '{} template two content'.format(template_type) in content
|
||
|
||
|
||
def test_upload_empty_csvfile_returns_to_upload_page(
|
||
app_,
|
||
api_user_active,
|
||
mock_login,
|
||
mock_get_user,
|
||
mock_get_service,
|
||
mock_get_service_templates,
|
||
mock_check_verify_code,
|
||
mock_get_service_template
|
||
):
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
upload_data = {'file': (BytesIO(''.encode('utf-8')), 'emtpy.csv')}
|
||
response = client.post(
|
||
url_for('main.send_messages', service_id=12345, template_id=54321),
|
||
data=upload_data,
|
||
follow_redirects=True
|
||
)
|
||
|
||
assert response.status_code == 200
|
||
content = response.get_data(as_text=True)
|
||
assert 'The file emtpy.csv contained no data' in content
|
||
|
||
|
||
def test_upload_csvfile_with_invalid_phone_shows_check_page_with_errors(
|
||
app_,
|
||
api_user_active,
|
||
mocker,
|
||
mock_login,
|
||
mock_get_service,
|
||
mock_get_service_template,
|
||
mock_s3_upload
|
||
):
|
||
|
||
contents = 'phone number,name\n+44 123,test1\n+44 456,test2'
|
||
file_data = (BytesIO(contents.encode('utf-8')), 'invalid.csv')
|
||
mocker.patch('app.main.views.send.s3download', return_value=contents)
|
||
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
upload_data = {'file': file_data}
|
||
response = client.post(
|
||
url_for('main.send_messages', service_id=12345, template_id=54321),
|
||
data=upload_data,
|
||
follow_redirects=True
|
||
)
|
||
assert response.status_code == 200
|
||
content = response.get_data(as_text=True)
|
||
assert 'Your CSV file contained missing or invalid data' in content
|
||
assert '+44 123' in content
|
||
assert '+44 456' in content
|
||
assert 'Upload a CSV file' in content
|
||
|
||
|
||
def test_upload_csvfile_removes_empty_lines_and_trailing_commas(
|
||
app_,
|
||
api_user_active,
|
||
mocker,
|
||
mock_login,
|
||
mock_get_service,
|
||
mock_get_service_template,
|
||
mock_s3_upload
|
||
):
|
||
|
||
contents = 'phone number,name,,,\n++44 7700 900981,test1,,,\n+44 7700 900981,test2,,,\n ,,, \n ,,, \t \t \n'
|
||
file_data = (BytesIO(contents.encode('utf-8')), 'invalid.csv')
|
||
|
||
expected_data = {'data': ['phone number,name', '++44 7700 900981,test1', '+44 7700 900981,test2'],
|
||
'file_name': 'invalid.csv'}
|
||
|
||
mocker.patch('app.main.views.send.s3download',
|
||
return_value='phone number,name\n++44 7700 900981,test1\n+44 7700 900981,test2')
|
||
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
upload_data = {'file': file_data}
|
||
response = client.post(
|
||
url_for('main.send_messages', service_id=12345, template_id=54321),
|
||
data=upload_data,
|
||
follow_redirects=True
|
||
)
|
||
assert response.status_code == 200
|
||
mock_s3_upload.assert_called_with(ANY, '12345', expected_data, 'eu-west-1')
|
||
|
||
|
||
def test_send_test_message_to_self(
|
||
app_,
|
||
mocker,
|
||
api_user_active,
|
||
mock_login,
|
||
mock_get_service,
|
||
mock_get_service_template,
|
||
mock_s3_upload
|
||
):
|
||
|
||
expected_data = {'data': ['phone number', '+4412341234'], 'file_name': 'Test run'}
|
||
mocker.patch('app.main.views.send.s3download', return_value='phone number\r\n+4412341234')
|
||
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
response = client.get(
|
||
url_for('main.send_message_to_self', service_id=12345, template_id=54321),
|
||
follow_redirects=True
|
||
)
|
||
assert response.status_code == 200
|
||
mock_s3_upload.assert_called_with(ANY, '12345', expected_data, 'eu-west-1')
|
||
|
||
|
||
def test_send_test_message_to_self(
|
||
app_,
|
||
mocker,
|
||
api_user_active,
|
||
mock_login,
|
||
mock_get_service,
|
||
mock_get_service_email_template,
|
||
mock_s3_upload
|
||
):
|
||
|
||
expected_data = {'data': ['email address', 'test@user.gov.uk'], 'file_name': 'Test run'}
|
||
mocker.patch('app.main.views.send.s3download', return_value='email address\r\ntest@user.gov.uk')
|
||
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
response = client.get(
|
||
url_for('main.send_message_to_self', service_id=12345, template_id=54321),
|
||
follow_redirects=True
|
||
)
|
||
assert response.status_code == 200
|
||
mock_s3_upload.assert_called_with(ANY, '12345', expected_data, 'eu-west-1')
|
||
|
||
|
||
def test_download_example_csv(
|
||
app_,
|
||
mocker,
|
||
api_user_active,
|
||
mock_login,
|
||
mock_get_service,
|
||
mock_get_service_template
|
||
):
|
||
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
response = client.get(
|
||
url_for('main.get_example_csv', service_id=12345, template_id=54321),
|
||
follow_redirects=True
|
||
)
|
||
assert response.status_code == 200
|
||
assert response.get_data(as_text=True) == 'phone number\r\n+4412341234\r\n'
|
||
assert 'text/csv' in response.headers['Content-Type']
|
||
|
||
|
||
def test_upload_csvfile_with_valid_phone_shows_all_numbers(
|
||
app_,
|
||
mocker,
|
||
api_user_active,
|
||
mock_login,
|
||
mock_get_service,
|
||
mock_get_service_template,
|
||
mock_s3_upload
|
||
):
|
||
|
||
contents = 'phone number\n+44 7700 900981\n+44 7700 900982\n+44 7700 900983\n+44 7700 900984\n+44 7700 900985\n+44 7700 900986' # noqa
|
||
file_data = (BytesIO(contents.encode('utf-8')), 'valid.csv')
|
||
mocker.patch('app.main.views.send.s3download', return_value=contents)
|
||
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
upload_data = {'file': file_data}
|
||
response = client.post(url_for('main.send_messages', service_id=12345, template_id=54321),
|
||
data=upload_data,
|
||
follow_redirects=True)
|
||
with client.session_transaction() as sess:
|
||
assert int(sess['upload_data']['template_id']) == 54321
|
||
assert sess['upload_data']['original_file_name'] == 'valid.csv'
|
||
assert sess['upload_data']['notification_count'] == 6
|
||
|
||
content = response.get_data(as_text=True)
|
||
|
||
assert response.status_code == 200
|
||
assert '+44 7700 900981' in content
|
||
assert '+44 7700 900982' in content
|
||
assert '+44 7700 900983' in content
|
||
assert '+44 7700 900984' in content
|
||
assert '+44 7700 900985' in content
|
||
assert '+44 7700 900986' in content
|
||
|
||
|
||
def test_create_job_should_call_api(
|
||
app_,
|
||
service_one,
|
||
api_user_active,
|
||
mock_login,
|
||
job_data,
|
||
mock_create_job,
|
||
mock_get_job,
|
||
mock_get_service,
|
||
mock_get_service_template
|
||
):
|
||
|
||
service_id = service_one['id']
|
||
job_id = job_data['id']
|
||
original_file_name = job_data['original_file_name']
|
||
template_id = job_data['template']
|
||
notification_count = job_data['notification_count']
|
||
|
||
with app_.test_request_context():
|
||
with app_.test_client() as client:
|
||
client.login(api_user_active)
|
||
with client.session_transaction() as session:
|
||
session['upload_data'] = {'original_file_name': original_file_name,
|
||
'template_id': template_id,
|
||
'notification_count': notification_count}
|
||
url = url_for('main.check_messages', service_id=service_one['id'], upload_id=job_id)
|
||
response = client.post(url, data=job_data, follow_redirects=True)
|
||
|
||
assert response.status_code == 200
|
||
assert 'We’ve started sending your messages' in response.get_data(as_text=True)
|
||
mock_create_job.assert_called_with(job_id, service_id, template_id, original_file_name, notification_count)
|