Example #1
0
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')
Example #2
0
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
Example #3
0
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
Example #4
0
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"
Example #5
0
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
Example #6
0
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}
    )
Example #7
0
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,
        },
    )
Example #8
0
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'