From d2d7a75a5f2d3ffe6a3cb4e5123ab0c5ec0c901b Mon Sep 17 00:00:00 2001 From: Kenneth Kehl Date: Tue, 27 Jun 2023 08:20:58 -0700 Subject: [PATCH] notify-536: accurately reflect delivery receipts in UI (#551) --- app/main/views/jobs.py | 6 +++--- app/templates/partials/count.html | 9 ++++++--- app/templates/partials/notifications/status.html | 11 +++++++++++ app/templates/views/activity/counts.html | 1 - app/templates/views/dashboard/_jobs.html | 2 +- app/templates/views/jobs/job.html | 2 +- app/templates/views/notifications.html | 9 +++++++++ tests/app/main/views/test_activity.py | 4 ++-- tests/app/main/views/test_jobs.py | 10 +++++----- tests/app/main/views/test_notifications.py | 6 ++++-- tests/app/main/views/uploads/test_upload_hub.py | 2 +- 11 files changed, 43 insertions(+), 19 deletions(-) diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index 533ca3797..fae1ac186 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -275,7 +275,7 @@ def get_status_filters(service, message_type, statistics): filters = [ # key, label, option ('requested', 'total', 'sending,delivered,failed'), - ('sending', 'sending', 'sending'), + ('sending', 'pending', 'pending'), ('delivered', 'delivered', 'delivered'), ('failed', 'failed', 'failed'), ] @@ -320,10 +320,10 @@ def _get_job_counts(job): ], [ Markup( - f'''sending + f'''pending {message_count_noun(job.notifications_sending, job_type)}''' ), - 'sending', + 'pending', job.notifications_sending ], [ diff --git a/app/templates/partials/count.html b/app/templates/partials/count.html index 21834648b..001130a1b 100644 --- a/app/templates/partials/count.html +++ b/app/templates/partials/count.html @@ -5,9 +5,12 @@ {% if notifications_deleted %}
{% for label, query_param, url, count in counts %} -
- {{ big_number(count, label, smaller=True) }} -
+ {% if query_param == 'pending' %} +
{{ big_number(count, query_param, smaller=True) }}
+ {% else %} +
{{ big_number(count, label, smaller=True) }}
+ {% endif %} + {% endfor %}
{% else %} diff --git a/app/templates/partials/notifications/status.html b/app/templates/partials/notifications/status.html index c8124b94b..aa4eb45e5 100644 --- a/app/templates/partials/notifications/status.html +++ b/app/templates/partials/notifications/status.html @@ -1,3 +1,4 @@ +
{% set field_status = notification.status|format_notification_status_as_field_status(notification.notification_type) %} {% set status_url = notification.status|format_notification_status_as_url(notification.notification_type) %} @@ -5,9 +6,18 @@ {% if status_url %} {% endif %} + + {% if notification.status != 'sending' %} {{ notification.status|format_notification_status( notification.template.template_type ) }} + {% endif %} + + {% if notification.status == 'sending' %} +

+ Pending. Messages will remain in pending state until carrier status is received, typically 5 minutes. +

+ {% endif %} {% if status_url %}
{% endif %} @@ -15,4 +25,5 @@ (test) {% endif %}

+
diff --git a/app/templates/views/activity/counts.html b/app/templates/views/activity/counts.html index b73738966..bf458a1f6 100644 --- a/app/templates/views/activity/counts.html +++ b/app/templates/views/activity/counts.html @@ -1,5 +1,4 @@ {% from "components/pill.html" import pill %} -
{{ pill( status_filters, diff --git a/app/templates/views/dashboard/_jobs.html b/app/templates/views/dashboard/_jobs.html index eaa8d026d..0b1ecad2f 100644 --- a/app/templates/views/dashboard/_jobs.html +++ b/app/templates/views/dashboard/_jobs.html @@ -50,7 +50,7 @@ {{ big_number( item.notifications_sending, smallest=True, - label='sending', + label='pending', ) }}
diff --git a/app/templates/views/jobs/job.html b/app/templates/views/jobs/job.html index 193bbc8a6..89ba335b9 100644 --- a/app/templates/views/jobs/job.html +++ b/app/templates/views/jobs/job.html @@ -17,6 +17,6 @@ {{ ajax_block(partials, updates_url, 'counts', finished=job.processing_finished) }} {{ ajax_block(partials, updates_url, 'notifications', finished=job.processing_finished) }} -
 
+
{% endblock %} diff --git a/app/templates/views/notifications.html b/app/templates/views/notifications.html index 598ab743e..57c1aee9c 100644 --- a/app/templates/views/notifications.html +++ b/app/templates/views/notifications.html @@ -25,6 +25,11 @@ 'counts' ) }} + +

+ Messages will remain in pending state until carrier status is received, typically 5 minutes. +

+ {% call form_wrapper( action=url_for('.view_notifications', service_id=current_service.id, message_type=message_type), class="usa-search margin-bottom-2" @@ -50,6 +55,10 @@ {% endcall %} + + + + {% call form_wrapper(id="search-form") %} diff --git a/tests/app/main/views/test_activity.py b/tests/app/main/views/test_activity.py index 6a2396d6b..e029a1cfe 100644 --- a/tests/app/main/views/test_activity.py +++ b/tests/app/main/views/test_activity.py @@ -520,7 +520,7 @@ def test_get_status_filters_calculates_stats(client_request): assert {label: count for label, _option, _link, count in ret} == { 'total': 6, - 'sending': 3, + 'pending': 3, 'failed': 2, 'delivered': 1 } @@ -530,7 +530,7 @@ def test_get_status_filters_in_right_order(client_request): ret = get_status_filters(Service({'id': 'foo'}), 'sms', STATISTICS) assert [label for label, _option, _link, _count in ret] == [ - 'total', 'sending', 'delivered', 'failed' + 'total', 'pending', 'delivered', 'failed' ] diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index 98c74eccb..c9b4d857f 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -182,7 +182,7 @@ def test_should_show_job_in_progress( normalize_spaces(link.text) for link in page.select('.pill a:not(.pill-item--selected)') ] == [ - '10 sending text messages', '0 delivered text messages', '0 failed text messages' + '10 pending text messages', '0 delivered text messages', '0 failed text messages' ] assert page.select_one('p.hint').text.strip() == 'Report is 50% complete…' @@ -207,7 +207,7 @@ def test_should_show_job_without_notifications( normalize_spaces(link.text) for link in page.select('.pill a:not(.pill-item--selected)') ] == [ - '10 sending text messages', '0 delivered text messages', '0 failed text messages' + '10 pending text messages', '0 delivered text messages', '0 failed text messages' ] assert page.select_one('p.hint').text.strip() == 'Report is 50% complete…' assert page.select_one('tbody').text.strip() == 'No messages to show yet…' @@ -307,7 +307,7 @@ def test_should_show_old_job( for column in page.select('main .govuk-grid-column-one-quarter') ] == [ '1 total text messages', - '1 sending text message', + '1 pending', '0 delivered text messages', '0 failed text messages', ] @@ -395,7 +395,7 @@ def test_should_show_updates_for_one_job_as_json( ) content = json.loads(response.get_data(as_text=True)) - assert 'sending' in content['counts'] + assert 'pending' in content['counts'] assert 'delivered' in content['counts'] assert 'failed' in content['counts'] assert 'Recipient' in content['notifications'] @@ -432,7 +432,7 @@ def test_should_show_updates_for_scheduled_job_as_json( ) content = response.json - assert 'sending' in content['counts'] + assert 'pending' in content['counts'] assert 'delivered' in content['counts'] assert 'failed' in content['counts'] assert 'Recipient' in content['notifications'] diff --git a/tests/app/main/views/test_notifications.py b/tests/app/main/views/test_notifications.py index 857b215cd..f6fdfcedc 100644 --- a/tests/app/main/views/test_notifications.py +++ b/tests/app/main/views/test_notifications.py @@ -15,7 +15,8 @@ from tests.conftest import ( @pytest.mark.parametrize('key_type, notification_status, expected_status', [ (None, 'created', 'Sending'), - (None, 'sending', 'Sending'), + (None, 'sending', + "Pending. Messages will remain in pending state until carrier status is received, typically 5 minutes."), (None, 'delivered', 'Delivered'), (None, 'failed', 'Failed'), (None, 'temporary-failure', 'Phone not accepting messages right now'), @@ -23,7 +24,8 @@ from tests.conftest import ( (None, 'technical-failure', 'Technical failure'), ('team', 'delivered', 'Delivered'), ('live', 'delivered', 'Delivered'), - ('test', 'sending', 'Sending (test)'), + ('test', 'sending', + "Pending. Messages will remain in pending state until carrier status is received, typically 5 minutes. (test)"), ('test', 'delivered', 'Delivered (test)'), ('test', 'permanent-failure', 'Not delivered (test)'), ]) diff --git a/tests/app/main/views/uploads/test_upload_hub.py b/tests/app/main/views/uploads/test_upload_hub.py index 6294f973e..d00c57003 100644 --- a/tests/app/main/views/uploads/test_upload_hub.py +++ b/tests/app/main/views/uploads/test_upload_hub.py @@ -49,7 +49,7 @@ def test_get_upload_hub_page( assert normalize_spaces(uploads[0].text.strip()) == ( 'some.csv ' 'Sent 1 January 2016 at 11:09am ' - '0 sending 8 delivered 2 failed' + '0 pending 8 delivered 2 failed' ) assert uploads[0].select_one('a.file-list-filename-large')['href'] == ( '/services/{}/jobs/job_id_1'.format(SERVICE_ONE_ID)