diff --git a/app/models/contact_list.py b/app/models/contact_list.py
index e1bbebbca..294c53165 100644
--- a/app/models/contact_list.py
+++ b/app/models/contact_list.py
@@ -24,6 +24,8 @@ class ContactList(JSONModel):
ALLOWED_PROPERTIES = {
'id',
'created_by',
+ 'has_jobs',
+ 'recent_job_count',
'service_id',
'original_file_name',
'row_count',
diff --git a/app/templates/views/dashboard/_jobs.html b/app/templates/views/dashboard/_jobs.html
index d65e3573f..7a8e0f9a2 100644
--- a/app/templates/views/dashboard/_jobs.html
+++ b/app/templates/views/dashboard/_jobs.html
@@ -1,6 +1,6 @@
{% from "components/table.html" import list_table, field, right_aligned_field_heading, row_heading %}
{% from "components/big-number.html" import big_number -%}
-{% from "components/message-count-label.html" import message_count_label, recipient_count_label -%}
+{% from "components/message-count-label.html" import message_count_label, recipient_count_label, iteration_count -%}
{% call(item, row_number) list_table(
@@ -35,10 +35,18 @@
{% elif item.upload_type == 'contact_list' %}
- Uploaded {{
- item.created_at|format_datetime_relative
- }}
-
+ {% if item.recent_job_count %}
+ Used {{ iteration_count(item.recent_job_count) }}
+ in the last
+ {{ current_service.get_days_of_retention(item.template_type) }}
+ days
+ {% elif item.has_jobs %}
+ Not used in the last
+ {{ current_service.get_days_of_retention(item.template_type) }}
+ days
+ {% else %}
+ Not used yet
+ {% endif %}
{% elif item.upload_type == 'letter_day' %}
{{ item.letter_printing_statement }}
diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py
index 875c9206f..cc906312f 100644
--- a/tests/app/main/views/test_send.py
+++ b/tests/app/main/views/test_send.py
@@ -4174,21 +4174,21 @@ def test_redirects_to_template_if_job_exists_already(
@pytest.mark.parametrize((
'template_type, '
'expected_list_id, '
- 'expected_filename, '
+ 'expected_filenames, '
'expected_time, '
'expected_count'
), (
(
'email',
'6ce466d0-fd6a-11e5-82f5-e0accb9d11a6',
- 'EmergencyContactList.xls',
+ ['EmergencyContactList.xls'],
'Uploaded today at 10:59am',
'100 email addresses',
),
(
'sms',
'd7b0bd1a-d1c7-4621-be5c-3c1b4278a2ad',
- 'phone number list.csv',
+ ['phone number list.csv', 'UnusedList.tsv'],
'Uploaded today at 1:00pm',
'123 phone numbers',
),
@@ -4201,7 +4201,7 @@ def test_choose_from_contact_list(
fake_uuid,
template_type,
expected_list_id,
- expected_filename,
+ expected_filenames,
expected_time,
expected_count,
):
@@ -4215,10 +4215,11 @@ def test_choose_from_contact_list(
service_id=SERVICE_ONE_ID,
template_id=fake_uuid,
)
- assert len(page.select('.file-list-filename-large')) == 1
- assert normalize_spaces(page.select_one('.file-list-filename-large').text) == (
- expected_filename
- )
+ assert [
+ normalize_spaces(filename.text)
+ for filename in page.select('.file-list-filename-large')
+ ] == expected_filenames
+
assert page.select_one('a.file-list-filename-large')['href'] == url_for(
'main.send_from_contact_list',
service_id=SERVICE_ONE_ID,
diff --git a/tests/app/main/views/uploads/test_upload_contact_list.py b/tests/app/main/views/uploads/test_upload_contact_list.py
index 364db9f20..6f932e854 100644
--- a/tests/app/main/views/uploads/test_upload_contact_list.py
+++ b/tests/app/main/views/uploads/test_upload_contact_list.py
@@ -478,7 +478,7 @@ def test_view_contact_list(
'Uploaded by Test User today at 10:59am.'
)
assert normalize_spaces(page.select('main p')[1].text) == (
- 'Not used yet.'
+ 'Not used in the last 7 days.'
)
assert normalize_spaces(page.select_one('main h2').text) == (
'51 saved email addresses'
diff --git a/tests/app/main/views/uploads/test_upload_hub.py b/tests/app/main/views/uploads/test_upload_hub.py
index fae8de5d8..f9e44fafe 100644
--- a/tests/app/main/views/uploads/test_upload_hub.py
+++ b/tests/app/main/views/uploads/test_upload_hub.py
@@ -338,6 +338,7 @@ def test_uploads_page_shows_contact_lists_first(
mock_get_no_uploads,
mock_get_jobs,
mock_get_contact_lists,
+ mock_get_service_data_retention,
):
page = client_request.get('main.uploads', service_id=SERVICE_ONE_ID)
@@ -349,14 +350,19 @@ def test_uploads_page_shows_contact_lists_first(
),
(
'phone number list.csv '
- 'Uploaded 13 March at 1:00pm '
+ 'Used twice in the last 7 days '
'123 saved phone numbers'
),
(
'EmergencyContactList.xls '
- 'Uploaded 13 March at 10:59am '
+ 'Not used in the last 7 days '
'100 saved email addresses'
),
+ (
+ 'UnusedList.tsv '
+ 'Not used yet '
+ '1 saved phone number'
+ ),
(
'even_later.csv '
'Sending 1 January 2016 at 11:09pm '
diff --git a/tests/conftest.py b/tests/conftest.py
index f4ce31281..a283d3b82 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -2075,6 +2075,8 @@ def mock_get_contact_lists(mocker, api_user_active, fake_uuid):
'id': fake_uuid,
'original_file_name': 'EmergencyContactList.xls',
'row_count': 100,
+ 'recent_job_count': 0,
+ 'has_jobs': True,
'service_id': service_id,
'template_type': 'email',
}, {
@@ -2083,6 +2085,18 @@ def mock_get_contact_lists(mocker, api_user_active, fake_uuid):
'id': 'd7b0bd1a-d1c7-4621-be5c-3c1b4278a2ad',
'original_file_name': 'phone number list.csv',
'row_count': 123,
+ 'recent_job_count': 2,
+ 'has_jobs': True,
+ 'service_id': service_id,
+ 'template_type': 'sms',
+ }, {
+ 'created_at': '2020-02-02 02:00:00',
+ 'created_by': 'Test User',
+ 'id': fake_uuid,
+ 'original_file_name': 'UnusedList.tsv',
+ 'row_count': 1,
+ 'recent_job_count': 0,
+ 'has_jobs': False,
'service_id': service_id,
'template_type': 'sms',
}]
@@ -2102,6 +2116,8 @@ def mock_get_contact_list(mocker, api_user_active, fake_uuid):
'id': fake_uuid,
'original_file_name': 'EmergencyContactList.xls',
'row_count': 100,
+ 'recent_job_count': 0,
+ 'has_jobs': True,
'service_id': service_id,
'template_type': 'email',
}