mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-05 06:01:46 -04:00
Added letters info to service / admin dashboard & activity page
This commit is contained in:
@@ -217,7 +217,7 @@ def notification_json(
|
||||
service_id,
|
||||
job=None,
|
||||
template=None,
|
||||
to='07123456789',
|
||||
to=None,
|
||||
status=None,
|
||||
sent_at=None,
|
||||
job_row_number=None,
|
||||
@@ -230,6 +230,13 @@ def notification_json(
|
||||
):
|
||||
if template is None:
|
||||
template = template_json(service_id, str(generate_uuid()), type_=template_type)
|
||||
if to is None:
|
||||
if template_type == 'letter':
|
||||
to = '1 Example Street'
|
||||
elif template_type == 'email':
|
||||
to = 'example@gov.uk'
|
||||
else:
|
||||
to = '07123456789'
|
||||
if sent_at is None:
|
||||
sent_at = str(datetime.utcnow().time())
|
||||
if created_at is None:
|
||||
@@ -266,7 +273,7 @@ def notification_json(
|
||||
'service': service_id,
|
||||
'template_version': template['version'],
|
||||
'personalisation': personalisation or {},
|
||||
'notification_type': 'sms',
|
||||
'notification_type': template_type,
|
||||
} for i in range(rows)],
|
||||
'total': rows,
|
||||
'page_size': 50,
|
||||
|
||||
@@ -8,8 +8,14 @@ from bs4 import BeautifulSoup
|
||||
|
||||
from app.main.views.jobs import get_time_left, get_status_filters
|
||||
from tests import notification_json
|
||||
from tests.conftest import SERVICE_ONE_ID, mock_get_notifications, normalize_spaces
|
||||
from tests.conftest import (
|
||||
SERVICE_ONE_ID,
|
||||
mock_get_notifications,
|
||||
normalize_spaces,
|
||||
mock_get_notifications
|
||||
)
|
||||
from freezegun import freeze_time
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
@@ -344,3 +350,63 @@ def test_redacts_templates_that_should_be_redacted(
|
||||
assert normalize_spaces(page.select('tbody tr th')[0].text) == (
|
||||
'07123456789 hello hidden'
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"message_type, tablist_visible, search_bar_visible", [
|
||||
('email', True, True),
|
||||
('sms', True, True),
|
||||
('letter', False, False)
|
||||
]
|
||||
)
|
||||
def test_big_numbers_and_search_dont_show_for_letters(
|
||||
client_request,
|
||||
service_one,
|
||||
mock_get_notifications,
|
||||
active_user_with_permissions,
|
||||
mock_get_detailed_service,
|
||||
message_type,
|
||||
tablist_visible,
|
||||
search_bar_visible
|
||||
):
|
||||
page = client_request.get(
|
||||
'main.view_notifications',
|
||||
service_id=service_one['id'],
|
||||
message_type=message_type,
|
||||
status='',
|
||||
page=1,
|
||||
)
|
||||
|
||||
assert (len(page.select("[role=tablist]")) > 0) == tablist_visible
|
||||
assert (len(page.select("[type=search]")) > 0) == search_bar_visible
|
||||
|
||||
|
||||
@freeze_time("2017-09-27 16:30:00.000000")
|
||||
@pytest.mark.parametrize(
|
||||
"message_type, hint_status_visible", [
|
||||
('email', True),
|
||||
('sms', True),
|
||||
('letter', False)
|
||||
]
|
||||
)
|
||||
def test_sending_status_hint_does_not_include_status_for_letters(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mock_get_detailed_service,
|
||||
message_type,
|
||||
hint_status_visible,
|
||||
mocker
|
||||
):
|
||||
mock_get_notifications(mocker, True, diff_template_type=message_type)
|
||||
|
||||
page = client_request.get(
|
||||
'main.view_notifications',
|
||||
service_id=service_one['id'],
|
||||
message_type=message_type
|
||||
)
|
||||
|
||||
if message_type == 'letter':
|
||||
assert normalize_spaces(page.select(".align-with-message-body")[0].text) == "27 September at 5:30pm"
|
||||
else:
|
||||
assert normalize_spaces(page.select(".align-with-message-body")[0].text) == "Delivered 27 September at 5:31pm"
|
||||
|
||||
@@ -361,6 +361,33 @@ def test_should_show_upcoming_jobs_on_dashboard(
|
||||
assert table_rows[1].find_all('td')[0].text.strip() == '1'
|
||||
|
||||
|
||||
@pytest.mark.parametrize('permissions, column_name, expected_column_count', [
|
||||
(['email', 'sms'], '.column-half', 2),
|
||||
(['email', 'letter'], '.column-third', 3),
|
||||
(['email', 'sms', 'letter'], '.column-third', 3)
|
||||
])
|
||||
def test_correct_columns_display_on_dashboard(
|
||||
client_request,
|
||||
mock_get_service_templates,
|
||||
mock_get_template_statistics,
|
||||
mock_get_detailed_service,
|
||||
mock_get_jobs,
|
||||
service_one,
|
||||
permissions,
|
||||
expected_column_count,
|
||||
column_name
|
||||
):
|
||||
|
||||
service_one['permissions'] = permissions
|
||||
|
||||
page = client_request.get(
|
||||
'main.service_dashboard',
|
||||
service_id=service_one['id']
|
||||
)
|
||||
|
||||
assert len(page.select(column_name)) == expected_column_count
|
||||
|
||||
|
||||
@freeze_time("2016-01-01 11:09:00.061258")
|
||||
def test_should_show_recent_jobs_on_dashboard(
|
||||
logged_in_client,
|
||||
|
||||
@@ -8,7 +8,7 @@ from bs4 import BeautifulSoup
|
||||
|
||||
from app.main.views.jobs import get_time_left, get_status_filters
|
||||
from tests import notification_json
|
||||
from tests.conftest import SERVICE_ONE_ID, normalize_spaces
|
||||
from tests.conftest import SERVICE_ONE_ID, normalize_spaces, mock_get_notifications
|
||||
from freezegun import freeze_time
|
||||
|
||||
|
||||
@@ -163,23 +163,25 @@ def test_should_show_letter_job(
|
||||
client_request,
|
||||
mock_get_service_letter_template,
|
||||
mock_get_job,
|
||||
mock_get_notifications,
|
||||
fake_uuid,
|
||||
active_user_with_permissions,
|
||||
mocker,
|
||||
):
|
||||
|
||||
get_notifications = mock_get_notifications(mocker, active_user_with_permissions, diff_template_type='letter')
|
||||
|
||||
page = client_request.get(
|
||||
'main.view_job',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
job_id=fake_uuid,
|
||||
)
|
||||
|
||||
assert normalize_spaces(page.h1.text) == 'thisisatest.csv'
|
||||
assert normalize_spaces(page.select('p.bottom-gutter')[0].text) == (
|
||||
'Sent by Test User on 1 January at 11:09am'
|
||||
)
|
||||
assert page.select('.banner-default-with-tick') == []
|
||||
assert normalize_spaces(page.select('tbody tr')[0].text) == (
|
||||
'07123456789 template content'
|
||||
'1 Example Street template content 1 January at 11:09am'
|
||||
)
|
||||
assert normalize_spaces(page.select('.keyline-block')[0].text) == (
|
||||
'1 Letter'
|
||||
@@ -190,7 +192,7 @@ def test_should_show_letter_job(
|
||||
assert page.select('[download=download]') == []
|
||||
assert page.select('.hint') == []
|
||||
|
||||
mock_get_notifications.assert_called_with(
|
||||
get_notifications.assert_called_with(
|
||||
SERVICE_ONE_ID,
|
||||
fake_uuid,
|
||||
status=[
|
||||
|
||||
@@ -171,18 +171,21 @@ def test_platform_admin_with_date_filter(
|
||||
'main.platform_admin', (
|
||||
'61 emails sent 6 failed – 5.5%',
|
||||
'121 text messages sent 11 failed – 5.0%',
|
||||
'45 letters sent 13 failed – 28.9%'
|
||||
),
|
||||
),
|
||||
(
|
||||
'main.live_services', (
|
||||
'55 emails sent 5 failed – 5.0%',
|
||||
'110 text messages sent 10 failed – 5.0%',
|
||||
'15 letters sent 3 failed – 20.0%'
|
||||
),
|
||||
),
|
||||
(
|
||||
'main.trial_services', (
|
||||
'6 emails sent 1 failed – 10.0%',
|
||||
'11 text messages sent 1 failed – 5.0%',
|
||||
'30 letters sent 10 failed – 33.3%'
|
||||
),
|
||||
),
|
||||
])
|
||||
@@ -206,6 +209,9 @@ def test_should_show_total_on_platform_admin_pages(
|
||||
sms_requested=200,
|
||||
sms_delivered=100,
|
||||
sms_failed=10,
|
||||
letters_requested=15,
|
||||
letters_delivered=12,
|
||||
letters_failed=3
|
||||
)
|
||||
|
||||
services[1]['statistics'] = create_stats(
|
||||
@@ -215,6 +221,9 @@ def test_should_show_total_on_platform_admin_pages(
|
||||
sms_requested=20,
|
||||
sms_delivered=10,
|
||||
sms_failed=1,
|
||||
letters_requested=30,
|
||||
letters_delivered=20,
|
||||
letters_failed=10
|
||||
)
|
||||
|
||||
mock_get_detailed_services.return_value = {'data': services}
|
||||
@@ -227,6 +236,7 @@ def test_should_show_total_on_platform_admin_pages(
|
||||
assert (
|
||||
normalize_spaces(page.select('.big-number-with-status')[0].text),
|
||||
normalize_spaces(page.select('.big-number-with-status')[1].text),
|
||||
normalize_spaces(page.select('.big-number-with-status')[2].text),
|
||||
) == expected_big_numbers
|
||||
|
||||
|
||||
@@ -259,6 +269,12 @@ def test_create_global_stats_sets_failure_rates(fake_uuid):
|
||||
'failed': 0,
|
||||
'requested': 0,
|
||||
'failure_rate': '0'
|
||||
},
|
||||
'letter': {
|
||||
'delivered': 0,
|
||||
'failed': 0,
|
||||
'requested': 0,
|
||||
'failure_rate': '0'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -269,7 +285,10 @@ def create_stats(
|
||||
emails_failed=0,
|
||||
sms_requested=0,
|
||||
sms_delivered=0,
|
||||
sms_failed=0
|
||||
sms_failed=0,
|
||||
letters_requested=0,
|
||||
letters_delivered=0,
|
||||
letters_failed=0
|
||||
):
|
||||
return {
|
||||
'sms': {
|
||||
@@ -281,7 +300,12 @@ def create_stats(
|
||||
'requested': emails_requested,
|
||||
'delivered': emails_delivered,
|
||||
'failed': emails_failed,
|
||||
}
|
||||
},
|
||||
'letter': {
|
||||
'requested': letters_requested,
|
||||
'delivered': letters_delivered,
|
||||
'failed': letters_failed,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -293,7 +317,10 @@ def test_format_stats_by_service_returns_correct_values(fake_uuid):
|
||||
emails_failed=5,
|
||||
sms_requested=50,
|
||||
sms_delivered=7,
|
||||
sms_failed=11
|
||||
sms_failed=11,
|
||||
letters_requested=40,
|
||||
letters_delivered=20,
|
||||
letters_failed=7
|
||||
)
|
||||
|
||||
ret = list(format_stats_by_service(services))
|
||||
@@ -307,6 +334,10 @@ def test_format_stats_by_service_returns_correct_values(fake_uuid):
|
||||
assert ret[0]['stats']['sms']['delivered'] == 7
|
||||
assert ret[0]['stats']['sms']['failed'] == 11
|
||||
|
||||
assert ret[0]['stats']['letter']['sending'] == 13
|
||||
assert ret[0]['stats']['letter']['delivered'] == 20
|
||||
assert ret[0]['stats']['letter']['failed'] == 7
|
||||
|
||||
|
||||
@pytest.mark.parametrize('endpoint, restricted, research_mode, trial_mode_services', [
|
||||
('main.trial_services', True, False, True),
|
||||
@@ -443,7 +474,10 @@ def test_should_show_correct_sent_totals_for_platform_admin(
|
||||
emails_failed=40,
|
||||
sms_requested=100,
|
||||
sms_delivered=10,
|
||||
sms_failed=30
|
||||
sms_failed=30,
|
||||
letters_requested=60,
|
||||
letters_delivered=40,
|
||||
letters_failed=5
|
||||
)
|
||||
|
||||
mock_get_detailed_services.return_value = {'data': services}
|
||||
@@ -457,9 +491,11 @@ def test_should_show_correct_sent_totals_for_platform_admin(
|
||||
totals = page.find_all('div', 'big-number-with-status')
|
||||
email_total = int(totals[0].find_all('div', 'big-number-number')[0].text.strip())
|
||||
sms_total = int(totals[1].find_all('div', 'big-number-number')[0].text.strip())
|
||||
letter_total = int(totals[2].find_all('div', 'big-number-number')[0].text.strip())
|
||||
|
||||
assert email_total == 60
|
||||
assert sms_total == 40
|
||||
assert letter_total == 45
|
||||
|
||||
|
||||
@pytest.mark.parametrize('endpoint, restricted, research_mode, trial_mode_services', [
|
||||
|
||||
@@ -183,7 +183,8 @@ def mock_get_detailed_service(mocker, api_user_active):
|
||||
'free_sms_fragment_limit': 250000,
|
||||
'statistics': {
|
||||
'email': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'letter': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
},
|
||||
'created_at': str(datetime.utcnow())
|
||||
}
|
||||
@@ -201,7 +202,8 @@ def mock_get_detailed_service_for_today(mocker, api_user_active):
|
||||
'free_sms_fragment_limit': 250000,
|
||||
'statistics': {
|
||||
'email': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'letter': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -229,11 +231,15 @@ def mock_get_detailed_services(mocker, fake_uuid):
|
||||
)
|
||||
service_one['statistics'] = {
|
||||
'email': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'letter': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
|
||||
}
|
||||
service_two['statistics'] = {
|
||||
'email': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||
'letter': {'requested': 0, 'delivered': 0, 'failed': 0}
|
||||
|
||||
}
|
||||
services = {'data': [service_one, service_two]}
|
||||
|
||||
@@ -1236,6 +1242,7 @@ def mock_get_notifications(
|
||||
mocker,
|
||||
api_user_active,
|
||||
template_content=None,
|
||||
diff_template_type=None,
|
||||
personalisation=None,
|
||||
redact_personalisation=False,
|
||||
):
|
||||
@@ -1259,7 +1266,7 @@ def mock_get_notifications(
|
||||
template = template_json(
|
||||
service_id,
|
||||
id_=str(generate_uuid()),
|
||||
type_=template_type[0],
|
||||
type_=diff_template_type or template_type[0],
|
||||
content=template_content,
|
||||
redact_personalisation=redact_personalisation,
|
||||
)
|
||||
@@ -1270,13 +1277,13 @@ def mock_get_notifications(
|
||||
content=template_content,
|
||||
redact_personalisation=redact_personalisation,
|
||||
)
|
||||
|
||||
return notification_json(
|
||||
service_id,
|
||||
template=template,
|
||||
rows=rows,
|
||||
job=job,
|
||||
personalisation=personalisation,
|
||||
template_type=diff_template_type
|
||||
)
|
||||
|
||||
return mocker.patch(
|
||||
@@ -1584,6 +1591,10 @@ def mock_get_monthly_notification_stats(mocker, service_one, fake_uuid):
|
||||
"sending": 1,
|
||||
"delivered": 1,
|
||||
},
|
||||
"letter": {
|
||||
"sending": 1,
|
||||
"delivered": 1,
|
||||
}
|
||||
}
|
||||
}}
|
||||
return mocker.patch(
|
||||
|
||||
Reference in New Issue
Block a user