diff --git a/app/main/views/uploads.py b/app/main/views/uploads.py index 332b6f9aa..9f0b2a99a 100644 --- a/app/main/views/uploads.py +++ b/app/main/views/uploads.py @@ -52,12 +52,19 @@ def uploads(service_id): if uploads.prev_page: next_page = generate_next_dict('main.uploads', service_id, uploads.current_page) + scheduled_jobs = '' + if uploads.current_page == 1: + scheduled_jobs = render_template( + 'views/dashboard/_upcoming.html', + hide_heading=True, + ) + return render_template( 'views/jobs/jobs.html', jobs=uploads, prev_page=prev_page, next_page=next_page, - scheduled_jobs='', + scheduled_jobs=scheduled_jobs, ) diff --git a/app/templates/views/dashboard/_jobs.html b/app/templates/views/dashboard/_jobs.html index 9020b926c..daad5421e 100644 --- a/app/templates/views/dashboard/_jobs.html +++ b/app/templates/views/dashboard/_jobs.html @@ -7,7 +7,7 @@ caption="Recent files uploaded", caption_visible=False, empty_message=( - 'Upload a letter and Notify will print, pack and post it for you.' if current_service.can_upload_letters else 'You have not uploaded any files recently' + 'Upload a letter and Notify will print, pack and post it for you.' if current_service.can_upload_letters else 'You have not uploaded any files yet' ), field_headings=[ 'File', diff --git a/app/templates/views/jobs/jobs.html b/app/templates/views/jobs/jobs.html index ddeb1d5e0..423694204 100644 --- a/app/templates/views/jobs/jobs.html +++ b/app/templates/views/jobs/jobs.html @@ -10,7 +10,9 @@

Uploads

{{ scheduled_jobs|safe }} - {% include 'views/dashboard/_jobs.html' %} + {% if jobs or not current_service.scheduled_jobs %} + {% include 'views/dashboard/_jobs.html' %} + {% endif %} {{ previous_next_navigation(prev_page, next_page) }} {% if current_service.can_upload_letters and current_user.has_permissions('send_messages') %}
diff --git a/tests/app/main/views/test_uploads.py b/tests/app/main/views/test_uploads.py index 081e2fe35..ef19ec9fd 100644 --- a/tests/app/main/views/test_uploads.py +++ b/tests/app/main/views/test_uploads.py @@ -4,11 +4,16 @@ from unittest.mock import Mock import pytest from flask import make_response, url_for +from freezegun import freeze_time from requests import RequestException from app.main.views.uploads import format_recipient from app.utils import normalize_spaces -from tests.conftest import SERVICE_ONE_ID +from tests.conftest import ( + SERVICE_ONE_ID, + create_active_caseworking_user, + create_active_user_with_permissions, +) @pytest.mark.parametrize('extra_permissions', ( @@ -24,6 +29,7 @@ def test_no_upload_letters_button_without_permission( client_request, service_one, mock_get_uploads, + mock_get_jobs, extra_permissions, ): service_one['permissions'] += extra_permissions @@ -31,11 +37,38 @@ def test_no_upload_letters_button_without_permission( assert not page.find('a', text=re.compile('Upload a letter')) +@pytest.mark.parametrize('extra_permissions, expected_empty_message', ( + (['letter'], ( + 'You have not uploaded any files yet' + )), + (['letter', 'upload_letters'], ( + 'Upload a letter and Notify will print, pack and post it for you.' + )), +)) +def test_get_upload_hub_with_no_uploads( + mocker, + client_request, + service_one, + mock_get_no_uploads, + extra_permissions, + expected_empty_message, +): + mocker.patch('app.job_api_client.get_jobs', return_value={'data': []}) + service_one['permissions'] += extra_permissions + page = client_request.get('main.uploads', service_id=SERVICE_ONE_ID) + assert normalize_spaces( + page.select_one('.table-empty-message').text + ) == expected_empty_message + assert not page.select('.file-list-filename') + + def test_get_upload_hub_page( + mocker, client_request, service_one, mock_get_uploads, ): + mocker.patch('app.job_api_client.get_jobs', return_value={'data': []}) service_one['permissions'] += ['letter', 'upload_letters'] page = client_request.get('main.uploads', service_id=SERVICE_ONE_ID) assert page.find('h1').text == 'Uploads' @@ -589,3 +622,37 @@ def test_send_uploaded_letter_when_metadata_states_pdf_is_invalid(mocker, servic ]) def test_format_recipient(original_address, expected_address): assert format_recipient(urllib.parse.quote(original_address)) == expected_address + + +@pytest.mark.parametrize('user', ( + create_active_caseworking_user(), + create_active_user_with_permissions(), +)) +@freeze_time("2012-12-12 12:12") +def test_uploads_page_shows_scheduled_jobs( + mocker, + client_request, + mock_get_uploads, + mock_get_jobs, + user, +): + mocker.patch('app.models.job.PaginatedUploads.client_method', return_value={'data': []}) + client_request.login(user) + page = client_request.get('main.uploads', service_id=SERVICE_ONE_ID) + + assert [ + normalize_spaces(row.text) for row in page.select('tr') + ] == [ + ( + 'File Messages to be sent' + ), + ( + 'send_me_later.csv ' + 'Sending 1 January 2016 at 11:09am 1' + ), + ( + 'even_later.csv ' + 'Sending 1 January 2016 at 11:09pm 1' + ), + ] + assert not page.select('.table-empty-message') diff --git a/tests/conftest.py b/tests/conftest.py index f08fd2d9c..3b3cd7ed6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1778,6 +1778,16 @@ def mock_get_uploads(mocker, api_user_active): return mocker.patch('app.models.job.PaginatedUploads.client_method', side_effect=_get_uploads) +@pytest.fixture(scope='function') +def mock_get_no_uploads(mocker, api_user_active): + mocker.patch( + 'app.models.job.PaginatedUploads.client_method', + return_value={ + 'data': [], + } + ) + + @pytest.fixture(scope='function') def mock_get_notifications( mocker,