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 @@
{{ 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,