diff --git a/app/main/views/uploads.py b/app/main/views/uploads.py index b967c328c..732044803 100644 --- a/app/main/views/uploads.py +++ b/app/main/views/uploads.py @@ -11,16 +11,19 @@ from flask import ( request, url_for, ) -from flask_login import current_user from notifications_utils.pdf import pdf_page_count from PyPDF2.utils import PdfReadError from requests import RequestException -from app import current_service, notification_api_client, service_api_client, job_api_client +from app import ( + current_service, + job_api_client, + notification_api_client, + service_api_client, +) from app.extensions import antivirus_client from app.main import main from app.main.forms import LetterUploadPostageForm, 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, @@ -29,11 +32,11 @@ from app.s3_client.s3_letter_upload_client import ( ) from app.template_previews import TemplatePreview, sanitise_letter from app.utils import ( + generate_next_dict, + generate_previous_dict, get_letter_validation_error, get_template, user_has_permissions, - generate_previous_dict, - generate_next_dict ) MAX_FILE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB @@ -74,7 +77,7 @@ def upload_letter(service_id): pdf_file_bytes = form.file.data.read() original_filename = form.file.data.filename - virus_free = True + virus_free = antivirus_client.scan(BytesIO(pdf_file_bytes)) if not virus_free: return invalid_upload_error('Your file contains a virus') diff --git a/tests/app/main/views/test_uploads.py b/tests/app/main/views/test_uploads.py index a08e30821..da54ac3dd 100644 --- a/tests/app/main/views/test_uploads.py +++ b/tests/app/main/views/test_uploads.py @@ -20,7 +20,7 @@ from tests.conftest import SERVICE_ONE_ID def test_no_upload_letters_button_without_permission( client_request, service_one, - mock_get_jobs, + mock_get_uploads, extra_permissions, ): service_one['permissions'] += extra_permissions @@ -31,7 +31,7 @@ def test_no_upload_letters_button_without_permission( def test_get_upload_hub_page( client_request, service_one, - mock_get_jobs, + mock_get_uploads, ): service_one['permissions'] += ['letter', 'upload_letters'] page = client_request.get('main.uploads', service_id=SERVICE_ONE_ID) diff --git a/tests/conftest.py b/tests/conftest.py index 4c7eba310..ccf82f074 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1936,6 +1936,42 @@ def mock_get_jobs(mocker, api_user_active): return mocker.patch('app.job_api_client.get_jobs', side_effect=_get_jobs) +@pytest.fixture(scope='function') +def mock_get_uploads(mocker, api_user_active): + def _get_jobs(service_id, limit_days=None, statuses=None, page=1): + if statuses is None: + statuses = ['', 'scheduled', 'pending', 'cancelled', 'finished'] + + jobs = [ + job_json( + service_id, + api_user_active, + original_file_name=filename, + scheduled_for=scheduled_for, + job_status=job_status, + template_version=template_version, + ) + for filename, scheduled_for, job_status, template_version in ( + ('export 1/1/2016.xls', '', 'finished', 1), + ('all email addresses.xlsx', '', 'pending', 1), + ('applicants.ods', '', 'finished', 1), + ('thisisatest.csv', '', 'finished', 2), + ('send_me_later.csv', '2016-01-01 11:09:00.061258', 'scheduled', 1), + ('even_later.csv', '2016-01-01 23:09:00.061258', 'scheduled', 1), + ('full_of_regret.csv', '2016-01-01 23:09:00.061258', 'cancelled', 1) + ) + ] + return { + 'data': [job for job in jobs if job['job_status'] in statuses], + 'links': { + 'prev': 'services/{}/jobs?page={}'.format(service_id, page - 1), + 'next': 'services/{}/jobs?page={}'.format(service_id, page + 1) + } + } + + return mocker.patch('app.job_api_client.get_uploads', side_effect=_get_jobs) + + @pytest.fixture(scope='function') def mock_get_notifications( mocker,