Merge pull request #3297 from alphagov/returned-letters-on-dashboard

Put a count of recently returned letters on the dashboard
This commit is contained in:
Chris Hill-Scott
2020-02-21 12:37:35 +00:00
committed by GitHub
15 changed files with 272 additions and 42 deletions

View File

@@ -149,6 +149,7 @@ def test_accepting_invite_removes_invite_from_session(
mock_get_billable_units,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
fake_uuid,
user,
landing_page_title,
@@ -470,6 +471,7 @@ def test_new_invited_user_verifies_and_added_to_service(
mock_get_service_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
mock_create_event,
mocker,
):

View File

@@ -143,7 +143,8 @@ def test_get_started(
mock_get_service_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
mocker.patch(
'app.template_statistics_client.get_template_statistics_for_service',
@@ -167,7 +168,8 @@ def test_get_started_is_hidden_once_templates_exist(
mock_get_service_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
mocker.patch(
'app.template_statistics_client.get_template_statistics_for_service',
@@ -184,6 +186,7 @@ def test_get_started_is_hidden_once_templates_exist(
def test_inbound_messages_not_visible_to_service_without_permissions(
client_request,
mocker,
service_one,
mock_get_service_templates_when_no_templates_exist,
mock_get_jobs,
@@ -191,7 +194,8 @@ def test_inbound_messages_not_visible_to_service_without_permissions(
mock_get_template_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
service_one['permissions'] = []
@@ -216,6 +220,7 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_messages(
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
service_one['permissions'] = ['inbound_sms']
page = client_request.get(
@@ -242,6 +247,7 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_no_messages(
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary_with_no_messages,
mock_get_returned_letter_summary_with_no_returned_letters,
):
service_one['permissions'] = ['inbound_sms']
page = client_request.get(
@@ -472,6 +478,129 @@ def test_download_inbox_strips_formulae(
assert expected_cell in response.get_data(as_text=True).split('\r\n')[1]
def test_returned_letters_not_visible_if_service_has_no_returned_letters(
client_request,
mocker,
service_one,
mock_get_service_templates_when_no_templates_exist,
mock_get_jobs,
mock_get_service_statistics,
mock_get_template_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
page = client_request.get(
'main.service_dashboard',
service_id=SERVICE_ONE_ID,
)
assert not page.select('#total-returned-letters')
@freeze_time('2020-01-10')
def test_returned_letters_shows_count_of_recently_returned_letters(
client_request,
mocker,
service_one,
mock_get_service_templates_when_no_templates_exist,
mock_get_jobs,
mock_get_service_statistics,
mock_get_template_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary,
):
mocker.patch(
'app.service_api_client.get_returned_letter_summary',
return_value=[
# Today (should be counted)
{
'returned_letter_count': 1000, 'reported_at': '2020-01-10'
},
# Just within the last 7 days (should be counted)
{
'returned_letter_count': 3000, 'reported_at': '2020-01-3'
},
# Just after the last 7 days (should not be counted)
{
'returned_letter_count': 2000, 'reported_at': '2020-01-2'
},
],
)
page = client_request.get(
'main.service_dashboard',
service_id=SERVICE_ONE_ID,
)
banner = page.select_one('#total-returned-letters')
assert normalize_spaces(
banner.text
) == '4,000 returned letters latest report today'
assert banner['href'] == url_for(
'main.returned_letter_summary', service_id=SERVICE_ONE_ID
)
@pytest.mark.parametrize('reporting_date, expected_message', (
('2020-02-02', (
'1 returned letter latest report today'
)),
('2020-02-01', (
'1 returned letter latest report yesterday'
)),
('2020-01-31', (
'1 returned letter latest report 2 days ago'
)),
('2020-01-26', (
'1 returned letter latest report 7 days ago'
)),
('2020-01-25', (
'0 returned letters latest report 8 days ago'
)),
('2020-01-01', (
'0 returned letters latest report 1 month ago'
)),
('2019-09-09', (
'0 returned letters latest report 4 months ago'
)),
('2010-10-10', (
'0 returned letters latest report 9 years ago'
)),
))
@freeze_time('2020-02-02')
def test_returned_letters_only_counts_recently_returned_letters(
client_request,
mocker,
service_one,
mock_get_service_templates_when_no_templates_exist,
mock_get_jobs,
mock_get_service_statistics,
mock_get_template_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary_with_no_messages,
reporting_date,
expected_message,
):
mocker.patch(
'app.service_api_client.get_returned_letter_summary',
return_value=[
{
'returned_letter_count': 1, 'reported_at': reporting_date
},
],
)
page = client_request.get(
'main.service_dashboard',
service_id=SERVICE_ONE_ID,
)
banner = page.select_one('#total-returned-letters')
assert normalize_spaces(banner.text) == expected_message
assert banner['href'] == url_for(
'main.returned_letter_summary', service_id=SERVICE_ONE_ID
)
def test_should_show_recent_templates_on_dashboard(
client_request,
mocker,
@@ -480,7 +609,8 @@ def test_should_show_recent_templates_on_dashboard(
mock_get_service_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
mock_template_stats = mocker.patch('app.template_statistics_client.get_template_statistics_for_service',
return_value=copy.deepcopy(stub_template_stats))
@@ -534,6 +664,7 @@ def test_should_not_show_recent_templates_on_dashboard_if_only_one_template_used
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
stats,
):
mock_template_stats = mocker.patch(
@@ -687,7 +818,8 @@ def test_should_show_upcoming_jobs_on_dashboard(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
page = client_request.get(
'main.service_dashboard',
@@ -738,6 +870,7 @@ def test_correct_font_size_for_big_numbers(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
service_one,
permissions,
totals,
@@ -773,7 +906,8 @@ def test_should_show_recent_jobs_on_dashboard(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
page = client_request.get(
'main.service_dashboard',
@@ -981,6 +1115,7 @@ def test_menu_send_messages(
mock_get_usage,
mock_get_inbound_sms_summary,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
):
service_one['permissions'] = ['email', 'sms', 'letter', 'upload_letters']
@@ -1039,6 +1174,7 @@ def test_menu_manage_service(
mock_get_service_statistics,
mock_get_usage,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
mock_get_free_sms_fragment_limit,
):
with app_.test_request_context():
@@ -1070,6 +1206,7 @@ def test_menu_manage_api_keys(
mock_get_service_statistics,
mock_get_usage,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
mock_get_free_sms_fragment_limit,
):
with app_.test_request_context():
@@ -1099,6 +1236,7 @@ def test_menu_all_services_for_platform_admin_user(
mock_get_service_statistics,
mock_get_usage,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
mock_get_free_sms_fragment_limit,
):
with app_.test_request_context():
@@ -1130,7 +1268,8 @@ def test_route_for_service_permissions(
mock_get_service_statistics,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
with app_.test_request_context():
validate_route_permission(
@@ -1183,7 +1322,8 @@ def test_service_dashboard_updates_gets_dashboard_totals(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
mocker.patch('app.main.views.dashboard.get_dashboard_totals', return_value={
'email': {'requested': 123, 'delivered': 0, 'failed': 0},
@@ -1368,6 +1508,7 @@ def test_should_show_all_jobs_with_valid_statuses(
mock_get_jobs,
mock_get_usage,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
mock_get_free_sms_fragment_limit,
):
logged_in_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
@@ -1397,6 +1538,7 @@ def test_org_breadcrumbs_do_not_show_if_service_has_no_org(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
):
page = client_request.get('main.service_dashboard', service_id=SERVICE_ONE_ID)
@@ -1411,6 +1553,7 @@ def test_org_breadcrumbs_do_not_show_if_user_is_not_an_org_member(
active_caseworking_user,
client_request,
mock_get_template_folders,
mock_get_returned_letter_summary_with_no_returned_letters,
):
# active_caseworking_user is not an org member
@@ -1433,6 +1576,7 @@ def test_org_breadcrumbs_show_if_user_is_a_member_of_the_services_org(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
active_user_with_permissions,
client_request,
):
@@ -1460,6 +1604,7 @@ def test_org_breadcrumbs_do_not_show_if_user_is_a_member_of_the_services_org_but
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
active_user_with_permissions,
client_request,
):
@@ -1484,6 +1629,7 @@ def test_org_breadcrumbs_show_if_user_is_platform_admin(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
platform_admin_user,
platform_admin_client,
):
@@ -1515,6 +1661,7 @@ def test_should_show_usage_on_dashboard(
mock_get_jobs,
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_returned_letter_summary_with_no_returned_letters,
permissions,
):
service_one['permissions'] = permissions

View File

@@ -88,12 +88,12 @@ def test_returned_letters_page(
assert [
'Template name Originally sent',
'Example template Reference ABC123 Originally sent 24 December 2019',
'Example template Sent from Example spreadsheet.xlsx Originally sent 24 December 2019',
'Example template No reference provided Originally sent 24 December 2019',
'Example precompiled.pdf Reference DEF456 Originally sent 24 December 2019',
'Example one-off.pdf No reference provided Originally sent 24 December 2019',
'Provided as PDF Reference XYZ999 Originally sent 24 December 2019',
'Example template Reference ABC123 Sent 24 December 2019',
'Example template Sent from Example spreadsheet.xlsx Sent 24 December 2019',
'Example template No reference provided Sent 24 December 2019',
'Example precompiled.pdf Reference DEF456 Sent 24 December 2019',
'Example one-off.pdf No reference provided Sent 24 December 2019',
'Provided as PDF Reference XYZ999 Sent 24 December 2019',
] == [
normalize_spaces(row.text) for row in page.select('tr')
]

View File

@@ -31,6 +31,7 @@ def test_sign_out_user(
mock_get_usage,
mock_get_free_sms_fragment_limit,
mock_get_inbound_sms_summary,
mock_get_returned_letter_summary_with_no_returned_letters,
):
with client_request.session_transaction() as session:
assert session.get('user_id') is not None