def test_sanitise_precompiled_pdf_retries_on_http_error(rmock, sample_letter_notification): sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK rmock.post('http://localhost:9999/precompiled/sanitise', content=b'new_pdf', status_code=500) mock_celery = Mock(**{'retry.side_effect': Retry}) with pytest.raises(Retry): _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf')
def test_sanitise_precompiled_pdf_sets_notification_to_technical_failure_after_too_many_errors( rmock, sample_letter_notification ): sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK rmock.post('http://localhost:9999/precompiled/sanitise', content=b'new_pdf', status_code=500) mock_celery = Mock(**{'retry.side_effect': MaxRetriesExceededError}) with pytest.raises(MaxRetriesExceededError): _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') assert sample_letter_notification.status == NOTIFICATION_TECHNICAL_FAILURE
def test_sanitise_precompiled_pdf_returns_none_on_validation_error( rmock, sample_letter_notification): sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK endpoint = "http://localhost:9999/precompiled/sanitise" with requests_mock.mock() as rmock: rmock.request( "POST", endpoint, json={ "file": base64.b64encode(b"nyan").decode("utf-8"), "validation_passed": False, "errors": { "content_outside_of_printable_area": [1], "document_not_a4_size_portrait_orientation": [], }, }, status_code=400, ) mock_celery = Mock(**{"retry.side_effect": Retry}) response = _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b"old_pdf") assert rmock.called assert rmock.request_history[0].url == endpoint assert response is None
def test_sanitise_precompiled_pdf_returns_data_from_template_preview( rmock, sample_letter_notification): sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK endpoint = "http://localhost:9999/precompiled/sanitise" with requests_mock.mock() as rmock: rmock.request( "POST", endpoint, json={ "file": base64.b64encode(b"new_pdf").decode("utf-8"), "validation_passed": True, "errors": { "content_outside_of_printable_area": [], "document_not_a4_size_portrait_orientation": [], }, }, status_code=200, ) mock_celery = Mock(**{"retry.side_effect": Retry}) response = _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b"old_pdf") assert rmock.called assert rmock.request_history[0].url == endpoint assert base64.b64decode(response.json()["file"].encode()) == b"new_pdf" assert rmock.last_request.text == "old_pdf"
def test_sanitise_precompiled_pdf_return_validation_error(rmock, sample_letter_notification): sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK endpoint = 'http://localhost:9999/precompiled/sanitise' response_json = { "file": base64.b64encode(b"nyan").decode("utf-8"), "validation_passed": False, "message": "content-outside-printable-area", "invalid_pages": [1], "page_count": 1 } with requests_mock.mock() as rmock: rmock.request( "POST", endpoint, json=response_json, status_code=400 ) mock_celery = Mock(**{'retry.side_effect': Retry}) response, result = _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') assert rmock.called assert rmock.request_history[0].url == endpoint assert result == "validation_failed" assert response == response_json
def test_sanitise_precompiled_pdf_passes_the_service_id_and_notification_id_to_template_preview( mocker, sample_letter_notification, ): tp_mock = mocker.patch('app.celery.letters_pdf_tasks.requests_post') sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK mock_celery = Mock(**{'retry.side_effect': Retry}) _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') service_id = str(sample_letter_notification.service_id) notification_id = str(sample_letter_notification.id) tp_mock.assert_called_once_with( 'http://localhost:9999/precompiled/sanitise', data=b'old_pdf', headers={'Authorization': 'Token my-secret-key', 'Service-ID': service_id, 'Notification-ID': notification_id} )
def test_sanitise_precompiled_pdf_passes_the_service_id_and_notification_id_to_template_preview( mocker, sample_letter_notification, ): tp_mock = mocker.patch("app.celery.letters_pdf_tasks.requests_post") sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK mock_celery = Mock(**{"retry.side_effect": Retry}) _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b"old_pdf") service_id = str(sample_letter_notification.service_id) notification_id = str(sample_letter_notification.id) tp_mock.assert_called_once_with( "http://localhost:9999/precompiled/sanitise", data=b"old_pdf", headers={ "Authorization": "Token my-secret-key", "Service-ID": service_id, "Notification-ID": notification_id, }, )
def test_sanitise_precompiled_pdf_returns_data_from_template_preview(rmock, sample_letter_notification): sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK endpoint = 'http://localhost:9999/precompiled/sanitise' with requests_mock.mock() as rmock: rmock.request( "POST", endpoint, json={ "file": base64.b64encode(b"new_pdf").decode("utf-8"), "validation_passed": True, "message": "", "invalid_pages": [], "page_count": 1 }, status_code=200 ) mock_celery = Mock(**{'retry.side_effect': Retry}) response, result = _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') assert rmock.called assert rmock.request_history[0].url == endpoint assert result == "validation_passed" assert base64.b64decode(response["file"].encode()) == b"new_pdf" assert rmock.last_request.text == 'old_pdf'