diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index ba4972a3b..147078e5c 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -446,7 +446,10 @@ def get_job_partials(job, template): counts = render_template( 'partials/count.html', counts=_get_job_counts(job), - status=filter_args['status'] + status=filter_args['status'], + notifications_deleted=( + job['job_status'] == 'finished' and not notifications['notifications'] + ), ) service_data_retention_days = current_service.get_days_of_retention(template['template_type']) can_letter_job_be_cancelled = False @@ -480,6 +483,7 @@ def get_job_partials(job, template): job=job, template=template, template_version=job['template_version'], + service_data_retention_days=service_data_retention_days, ), 'status': render_template( 'partials/jobs/status.html', diff --git a/app/templates/partials/count.html b/app/templates/partials/count.html index eb2990161..c66b6bff2 100644 --- a/app/templates/partials/count.html +++ b/app/templates/partials/count.html @@ -1,5 +1,18 @@ +{% from "components/big-number.html" import big_number %} {% from "components/pill.html" import pill %} -
- {{ pill(counts, request.args.get('status', '')) }} +
+ {% if notifications_deleted %} +
+ {% for label, query_param, url, count in counts %} +
+ {{ big_number(count, label, smaller=True) }} +
+ {% endfor %} +
+ {% else %} +
+ {{ pill(counts, request.args.get('status', '')) }} +
+ {% endif %}
diff --git a/app/templates/partials/jobs/notifications.html b/app/templates/partials/jobs/notifications.html index 7ff70cc7f..29ee92311 100644 --- a/app/templates/partials/jobs/notifications.html +++ b/app/templates/partials/jobs/notifications.html @@ -28,7 +28,7 @@ {% if template.template_type == 'letter' %}
{% endif %} - {% if percentage_complete < 100 %} + {% if percentage_complete < 100 and job.job_status != 'finished' %}

Report is {{ "{:.0f}%".format(percentage_complete * 0.99) }} complete…

@@ -47,7 +47,7 @@ notifications, caption=uploaded_file_name, caption_visible=False, - empty_message="No messages to show", + empty_message='These messages have been deleted because they were sent more than {} days ago'.format(service_data_retention_days) if job.job_status == 'finished' else 'No messages to show yet…', field_headings=[ 'Recipient', 'Status' diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index 0b386baae..6c4c1da76 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -294,7 +294,63 @@ def test_should_show_job_in_progress( service_id=service_one['id'], job_id=fake_uuid, ) - assert page.find('p', {'class': 'hint'}).text.strip() == 'Report is 50% complete…' + assert [ + normalize_spaces(link.text) + for link in page.select('.pill a') + ] == [ + '10 sending', '0 delivered', '0 failed' + ] + assert page.select_one('p.hint').text.strip() == 'Report is 50% complete…' + + +def test_should_show_job_without_notifications( + client_request, + service_one, + active_user_with_permissions, + mock_get_service_template, + mock_get_job_in_progress, + mocker, + mock_get_notifications_with_no_notifications, + mock_get_service_data_retention, + fake_uuid, +): + page = client_request.get( + 'main.view_job', + service_id=service_one['id'], + job_id=fake_uuid, + ) + assert [ + normalize_spaces(link.text) + for link in page.select('.pill a') + ] == [ + '10 sending', '0 delivered', '0 failed' + ] + assert page.select_one('p.hint').text.strip() == 'Report is 50% complete…' + assert page.select_one('tbody').text.strip() == 'No messages to show yet…' + + +def test_should_show_old_job( + client_request, + service_one, + active_user_with_permissions, + mock_get_service_template, + mock_get_job, + mocker, + mock_get_notifications_with_no_notifications, + mock_get_service_data_retention, + fake_uuid, +): + page = client_request.get( + 'main.view_job', + service_id=service_one['id'], + job_id=fake_uuid, + ) + assert not page.select('.pill a') + assert not page.select('p.hint') + assert not page.select('a[download]') + assert page.select_one('tbody').text.strip() == ( + 'These messages have been deleted because they were sent more than 7 days ago' + ) @freeze_time("2016-01-01 11:09:00.061258") diff --git a/tests/conftest.py b/tests/conftest.py index b78bb5ce6..7dcf601d9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1818,7 +1818,8 @@ def mock_get_job_in_progress(mocker, api_user_active): return {"data": job_json( service_id, api_user_active, job_id=job_id, notification_count=10, - notifications_requested=5 + notifications_requested=5, + job_status='processing', )} return mocker.patch('app.job_api_client.get_job', side_effect=_get_job)