diff --git a/app/main/views/uploads.py b/app/main/views/uploads.py index 4709b58b4..665fce5a5 100644 --- a/app/main/views/uploads.py +++ b/app/main/views/uploads.py @@ -19,6 +19,7 @@ from app import current_service, notification_api_client, service_api_client from app.extensions import antivirus_client from app.main import main from app.main.forms import PDFUploadForm +from app.main.views.jobs import view_jobs from app.s3_client.s3_letter_upload_client import ( get_letter_metadata, get_letter_pdf_and_metadata, @@ -36,9 +37,9 @@ MAX_FILE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB @main.route("/services//uploads") -@user_has_permissions('send_messages') +@user_has_permissions() def uploads(service_id): - return render_template('views/uploads/index.html') + return view_jobs(service_id) @main.route("/services//upload-letter", methods=['GET', 'POST']) diff --git a/app/models/service.py b/app/models/service.py index 3e3e93fd6..bf989cfeb 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -462,6 +462,10 @@ class Service(JSONModel): key=lambda folder: folder['name'].lower(), ) + @property + def can_upload_letters(self): + return self.has_permission('letter') and self.has_permission('upload_letters') + @cached_property def all_template_folder_ids(self): return {folder['id'] for folder in self.all_template_folders} diff --git a/app/navigation.py b/app/navigation.py index c7eafb68b..f0d30ffbd 100644 --- a/app/navigation.py +++ b/app/navigation.py @@ -633,9 +633,12 @@ class CaseworkNavigation(Navigation): 'view_notifications', 'view_notification', }, - 'uploaded-files': { + 'uploads': { 'view_jobs', 'view_job', + 'upload_letter', + 'uploaded_letter_preview', + 'uploads', }, } @@ -868,9 +871,6 @@ class CaseworkNavigation(Navigation): 'two_factor_email_sent', 'update_email_branding', 'update_letter_branding', - 'upload_letter', - 'uploaded_letter_preview', - 'uploads', 'usage', 'usage_for_all_services', 'user_information', diff --git a/app/templates/components/previous-next-navigation.html b/app/templates/components/previous-next-navigation.html index e7102d4a0..b73846c6a 100644 --- a/app/templates/components/previous-next-navigation.html +++ b/app/templates/components/previous-next-navigation.html @@ -1,32 +1,34 @@ {% macro previous_next_navigation(previous_page, next_page) %} - + {% if previous_page or next_page %} + + {% endif %} {% endmacro %} diff --git a/app/templates/main_nav.html b/app/templates/main_nav.html index 7f6a1fa55..884a78441 100644 --- a/app/templates/main_nav.html +++ b/app/templates/main_nav.html @@ -8,15 +8,16 @@ {% endif %} {% if current_user.has_permissions() %}
  • Templates
  • - {% if not current_user.has_permissions('view_activity') %} + {% if current_user.has_permissions('view_activity') %} + {% if current_service.can_upload_letters %} +
  • Uploads
  • + {% endif %} + {% else %}
  • Sent messages
  • - {% if current_service.has_jobs %} -
  • Uploaded files
  • + {% if current_service.has_jobs or current_service.can_upload_letters %} +
  • Uploads
  • {% endif %} {% endif %} - {% endif %} - {% if current_user.has_permissions('send_messages') and current_service.has_permission('letter') and current_service.has_permission('upload_letters') %} -
  • Uploads
  • {% endif %}
  • Team members
  • {% if current_user.has_permissions('manage_service', allow_org_user=True) %} diff --git a/app/templates/views/dashboard/_jobs.html b/app/templates/views/dashboard/_jobs.html index 30250b6ce..75a142a76 100644 --- a/app/templates/views/dashboard/_jobs.html +++ b/app/templates/views/dashboard/_jobs.html @@ -6,14 +6,16 @@ jobs, caption="Recent files uploaded", caption_visible=False, - empty_message='You have not uploaded any files recently', + 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' + ), field_headings=[ 'File', 'Sending', 'Delivered', 'Failed' ], - field_headings_visible=True + field_headings_visible=True if jobs else False ) %} {% call row_heading() %}
    diff --git a/app/templates/views/jobs/jobs.html b/app/templates/views/jobs/jobs.html index 7d9bbba01..7866fa541 100644 --- a/app/templates/views/jobs/jobs.html +++ b/app/templates/views/jobs/jobs.html @@ -2,14 +2,19 @@ {% extends "withnav_template.html" %} {% block service_page_title %} - Uploaded files + Uploads {% endblock %} {% block maincolumn_content %} -

    Uploaded files

    +

    Uploads

    {{ scheduled_jobs|safe }} {% include 'views/dashboard/_jobs.html' %} {{ previous_next_navigation(prev_page, next_page) }} + {% if current_service.can_upload_letters and current_user.has_permissions('send_messages') %} + + {% endif %}
    {% endblock %} diff --git a/app/templates/views/uploads/index.html b/app/templates/views/uploads/index.html deleted file mode 100644 index 0b2ad0480..000000000 --- a/app/templates/views/uploads/index.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "withnav_template.html" %} -{% from "components/page-header.html" import page_header %} - -{% block service_page_title %} - Uploads -{% endblock %} - -{% block maincolumn_content %} -
    -
    - {{ page_header('Uploads') }} - -

    Upload a letter and Notify will print, pack and post it for you.

    - - Upload a letter -
    -
    -{% endblock %} diff --git a/tests/app/main/views/test_uploads.py b/tests/app/main/views/test_uploads.py index 891972037..a45daaafc 100644 --- a/tests/app/main/views/test_uploads.py +++ b/tests/app/main/views/test_uploads.py @@ -8,9 +8,33 @@ from app.utils import normalize_spaces from tests.conftest import SERVICE_ONE_ID -def test_get_upload_hub_page(client_request): +@pytest.mark.parametrize('extra_permissions', ( + [], + ['letter'], + ['upload_letters'], + pytest.param( + ['letter', 'upload_letters'], + marks=pytest.mark.xfail(raises=AssertionError), + ), +)) +def test_no_upload_letters_button_without_permission( + client_request, + service_one, + mock_get_jobs, + extra_permissions, +): + service_one['permissions'] += extra_permissions page = client_request.get('main.uploads', service_id=SERVICE_ONE_ID) + assert not page.find('a', text='Upload a letter') + +def test_get_upload_hub_page( + client_request, + service_one, + mock_get_jobs, +): + service_one['permissions'] += ['letter', 'upload_letters'] + page = client_request.get('main.uploads', service_id=SERVICE_ONE_ID) assert page.find('h1').text == 'Uploads' assert page.find('a', text='Upload a letter').attrs['href'] == url_for( 'main.upload_letter', service_id=SERVICE_ONE_ID diff --git a/tests/app/test_navigation.py b/tests/app/test_navigation.py index 8cfb8c2ba..94bf7ec3b 100644 --- a/tests/app/test_navigation.py +++ b/tests/app/test_navigation.py @@ -180,5 +180,5 @@ def test_caseworkers_see_jobs_nav_if_jobs_exist( ) page = client_request.get('main.choose_template', service_id=SERVICE_ONE_ID) assert normalize_spaces(page.select_one('#content nav').text) == ( - 'Templates Sent messages Uploaded files Team members' + 'Templates Sent messages Uploads Team members' )