mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-18 05:29:38 -04:00
We were getting some weirdness like ‘Failed both’. This commit fixes the problem, and adds some tests for the page headings to make sure they don’t break again.
308 lines
14 KiB
Python
308 lines
14 KiB
Python
from flask import url_for
|
|
from bs4 import BeautifulSoup
|
|
import json
|
|
from app.utils import generate_notifications_csv
|
|
from tests import notification_json
|
|
|
|
|
|
def test_should_return_list_of_all_jobs(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_login,
|
|
mock_get_service,
|
|
mock_get_jobs,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for('main.view_jobs', service_id=101))
|
|
|
|
assert response.status_code == 200
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
assert page.h1.string == 'Notifications activity'
|
|
jobs = page.tbody.find_all('tr')
|
|
assert len(jobs) == 5
|
|
|
|
|
|
def test_should_show_page_for_one_job(
|
|
app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_service_template,
|
|
job_data,
|
|
mock_get_job,
|
|
mock_get_notifications,
|
|
mock_has_permissions
|
|
):
|
|
service_id = job_data['service']
|
|
job_id = job_data['id']
|
|
file_name = job_data['original_file_name']
|
|
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for('main.view_job', service_id=service_id, job_id=job_id))
|
|
|
|
assert response.status_code == 200
|
|
content = response.get_data(as_text=True)
|
|
assert "Test Service: Your vehicle tax is about to expire" in content
|
|
assert file_name in content
|
|
|
|
|
|
def test_should_show_updates_for_one_job_as_json(
|
|
app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_service_template,
|
|
job_data,
|
|
mock_get_job,
|
|
mock_get_notifications,
|
|
mock_has_permissions
|
|
):
|
|
service_id = job_data['service']
|
|
job_id = job_data['id']
|
|
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for('main.view_job_updates', service_id=service_id, job_id=job_id))
|
|
|
|
assert response.status_code == 200
|
|
content = json.loads(response.get_data(as_text=True))
|
|
assert 'processed' in content['counts']
|
|
assert 'queued' in content['counts']
|
|
assert 'Recipient' in content['notifications']
|
|
assert 'Status' in content['notifications']
|
|
assert 'Started' in content['status']
|
|
|
|
|
|
def test_should_show_notifications_for_a_service(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for('main.view_notifications', service_id=service_one['id']))
|
|
assert response.status_code == 200
|
|
content = response.get_data(as_text=True)
|
|
notifications = notification_json(service_one['id'])
|
|
notification = notifications['notifications'][0]
|
|
assert notification['to'] in content
|
|
assert notification['status'] in content
|
|
assert notification['template']['name'] in content
|
|
assert '.csv' in content
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
assert page.h1.string.strip() == 'Activity'
|
|
|
|
mock_get_notifications.assert_called_with(limit_days=7, page=1, service_id=service_one['id'], status=['delivered', 'failed'], template_type=['email', 'sms']) # noqa
|
|
|
|
|
|
def test_can_view_only_sms_notifications_for_a_service(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for(
|
|
'main.view_notifications',
|
|
service_id=service_one['id'],
|
|
template_type='sms',
|
|
status='delivered,failed'))
|
|
assert response.status_code == 200
|
|
content = response.get_data(as_text=True)
|
|
|
|
notifications = notification_json(service_one['id'])
|
|
notification = notifications['notifications'][0]
|
|
assert notification['to'] in content
|
|
assert notification['status'] in content
|
|
assert notification['template']['name'] in content
|
|
assert '.csv' in content
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
assert page.h1.string.strip() == 'Text messages'
|
|
|
|
mock_get_notifications.assert_called_with(limit_days=7, page=1, service_id=service_one['id'], status=['delivered', 'failed'], template_type=['sms']) # noqa
|
|
|
|
|
|
def test_can_view_only_email_notifications_for_a_service(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for(
|
|
'main.view_notifications',
|
|
service_id=service_one['id'],
|
|
status='delivered,failed',
|
|
template_type='email'))
|
|
assert response.status_code == 200
|
|
content = response.get_data(as_text=True)
|
|
|
|
notifications = notification_json(service_one['id'])
|
|
notification = notifications['notifications'][0]
|
|
assert notification['to'] in content
|
|
assert notification['status'] in content
|
|
assert notification['template']['name'] in content
|
|
assert '.csv' in content
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
assert page.h1.string.strip() == 'Emails'
|
|
|
|
mock_get_notifications.assert_called_with(limit_days=7, page=1, service_id=service_one['id'], status=['delivered', 'failed'], template_type=['email']) # noqa
|
|
|
|
|
|
def test_can_view_successful_notifications_for_a_service(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for(
|
|
'main.view_notifications',
|
|
service_id=service_one['id'],
|
|
status='delivered'))
|
|
assert response.status_code == 200
|
|
content = response.get_data(as_text=True)
|
|
notifications = notification_json(service_one['id'])
|
|
notification = notifications['notifications'][0]
|
|
assert notification['to'] in content
|
|
assert notification['status'] in content
|
|
assert notification['template']['name'] in content
|
|
assert '.csv' in content
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
assert page.h1.string.strip() == 'Successful emails and text messages'
|
|
|
|
mock_get_notifications.assert_called_with(limit_days=7, page=1, service_id=service_one['id'], status=['delivered'], template_type=['email', 'sms']) # noqa
|
|
|
|
|
|
def test_can_view_failed_notifications_for_a_service(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for(
|
|
'main.view_notifications',
|
|
service_id=service_one['id'],
|
|
status='failed'))
|
|
assert response.status_code == 200
|
|
content = response.get_data(as_text=True)
|
|
notifications = notification_json(service_one['id'])
|
|
notification = notifications['notifications'][0]
|
|
assert notification['to'] in content
|
|
assert notification['status'] in content
|
|
assert notification['template']['name'] in content
|
|
assert '.csv' in content
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
assert page.h1.string.strip() == 'Failed emails and text messages'
|
|
|
|
mock_get_notifications.assert_called_with(limit_days=7, page=1, service_id=service_one['id'], status=['failed'], template_type=['email', 'sms']) # noqa
|
|
|
|
|
|
def test_can_view_failed_combination_of_notification_type_and_status(
|
|
app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications,
|
|
mock_has_permissions
|
|
):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for(
|
|
'main.view_notifications',
|
|
service_id=service_one['id'],
|
|
status='failed',
|
|
template_type='sms'))
|
|
assert response.status_code == 200
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
assert page.h1.string.strip() == 'Failed text messages'
|
|
|
|
mock_get_notifications.assert_called_with(limit_days=7, page=1, service_id=service_one['id'], status=['failed'], template_type=['sms']) # noqa
|
|
|
|
|
|
def test_should_show_notifications_for_a_service_with_next_previous(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications_with_previous_next,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for('main.view_notifications', service_id=service_one['id'], page=2))
|
|
assert response.status_code == 200
|
|
content = response.get_data(as_text=True)
|
|
assert url_for('main.view_notifications', service_id=service_one['id'], page=3) in content
|
|
assert url_for('main.view_notifications', service_id=service_one['id'], page=1) in content
|
|
assert 'Previous page' in content
|
|
assert 'Next page' in content
|
|
|
|
|
|
def test_should_download_notifications_for_a_service(app_,
|
|
service_one,
|
|
api_user_active,
|
|
mock_login,
|
|
mock_get_user,
|
|
mock_get_user_by_email,
|
|
mock_get_service,
|
|
mock_get_notifications,
|
|
mock_has_permissions):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
client.login(api_user_active)
|
|
response = client.get(url_for(
|
|
'main.view_notifications',
|
|
service_id=service_one['id'],
|
|
download='csv'))
|
|
csv_content = generate_notifications_csv(
|
|
mock_get_notifications(service_one['id'])['notifications'])
|
|
assert response.status_code == 200
|
|
assert response.get_data(as_text=True) == csv_content
|
|
assert 'text/csv' in response.headers['Content-Type']
|