Files
notifications-api/tests/notifications_utils/clients/antivirus/test_antivirus_client.py
2024-05-16 10:41:49 -04:00

64 lines
1.6 KiB
Python

import io
import pytest
import requests
from notifications_utils.clients.antivirus.antivirus_client import (
AntivirusClient,
AntivirusError,
)
@pytest.fixture(scope="function")
def antivirus(app, mocker):
client = AntivirusClient()
app.config["ANTIVIRUS_API_HOST"] = "https://antivirus"
app.config["ANTIVIRUS_API_KEY"] = "test-antivirus-key"
client.init_app(app)
return client
def test_scan_document(antivirus, rmock):
document = io.BytesIO(b"filecontents")
rmock.request(
"POST",
"https://antivirus/scan",
json={"ok": True},
request_headers={
"Authorization": "Bearer test-antivirus-key",
},
status_code=200,
)
resp = antivirus.scan(document)
assert resp
assert "filecontents" in rmock.last_request.text
assert document.tell() == 0
def test_should_raise_for_status(antivirus, rmock):
with pytest.raises(AntivirusError) as excinfo:
rmock.request(
"POST",
"https://antivirus/scan",
json={"error": "Antivirus error"},
status_code=400,
)
antivirus.scan(io.BytesIO(b"document"))
assert excinfo.value.message == "Antivirus error"
assert excinfo.value.status_code == 400
def test_should_raise_for_connection_errors(antivirus, rmock):
with pytest.raises(AntivirusError) as excinfo:
rmock.request(
"POST", "https://antivirus/scan", exc=requests.exceptions.ConnectTimeout
)
antivirus.scan(io.BytesIO(b"document"))
assert excinfo.value.message == "connection error"
assert excinfo.value.status_code == 503