|
4 | 4 | import faker |
5 | 5 | import httpx |
6 | 6 | import pytest |
| 7 | +from httpx import codes as status_codes |
7 | 8 |
|
8 | 9 | from safe_s3_storage import exceptions |
| 10 | +from safe_s3_storage.exceptions import KasperskyScanEngineConnectionStatusError |
9 | 11 | from safe_s3_storage.file_validator import ( |
10 | 12 | _IMAGE_CONVERSION_FORMAT_TO_MIME_TYPE_AND_EXTENSION_MAP, |
11 | 13 | FileValidator, |
@@ -56,7 +58,21 @@ def get_mocked_kaspersky_scan_engine_client(*, faker: faker.Faker, ok_response: |
56 | 58 | service_url=faker.url(schemes=["http"]), |
57 | 59 | client_name=faker.pystr(), |
58 | 60 | httpx_client=httpx.AsyncClient( |
59 | | - transport=httpx.MockTransport(lambda _: httpx.Response(200, json=scan_response.model_dump(mode="json"))) |
| 61 | + transport=httpx.MockTransport( |
| 62 | + lambda _: httpx.Response(status_codes.OK, json=scan_response.model_dump(mode="json")) |
| 63 | + ) |
| 64 | + ), |
| 65 | + ) |
| 66 | + |
| 67 | + |
| 68 | +def get_mocked_kaspersky_scan_engine_client_bad_response( |
| 69 | + *, faker: faker.Faker, status_code: int = status_codes.OK |
| 70 | +) -> KasperskyScanEngineClient: |
| 71 | + return KasperskyScanEngineClient( |
| 72 | + service_url=faker.url(schemes=["http"]), |
| 73 | + client_name=faker.pystr(), |
| 74 | + httpx_client=httpx.AsyncClient( |
| 75 | + transport=httpx.MockTransport(lambda _: httpx.Response(status_code, json="")), |
60 | 76 | ), |
61 | 77 | ) |
62 | 78 |
|
@@ -86,6 +102,12 @@ async def test_fails_to_convert_image(self, faker: faker.Faker, png_file: bytes) |
86 | 102 | file_name=faker.file_name(), file_content=png_file[:50] |
87 | 103 | ) |
88 | 104 |
|
| 105 | + async def test_all_mime_types_allowed(self, faker: faker.Faker) -> None: |
| 106 | + validated_file: typing.Final = await FileValidator(allowed_mime_types=None).validate_file( |
| 107 | + file_name=faker.file_name(), file_content=generate_binary_content(faker) |
| 108 | + ) |
| 109 | + assert validated_file is not None |
| 110 | + |
89 | 111 | @pytest.mark.parametrize("image_conversion_format", list(ImageConversionFormat)) |
90 | 112 | async def test_ok_image( |
91 | 113 | self, faker: faker.Faker, png_file: bytes, image_conversion_format: ImageConversionFormat |
@@ -154,3 +176,10 @@ async def test_antivirus_passes_on_images(self, faker: faker.Faker, png_file: by |
154 | 176 | kaspersky_scan_engine=get_mocked_kaspersky_scan_engine_client(faker=faker, ok_response=True), |
155 | 177 | allowed_mime_types=["image/png"], |
156 | 178 | ).validate_file(file_name=faker.file_name(), file_content=png_file) |
| 179 | + |
| 180 | + async def test_antivirus_no_connection(self, faker: faker.Faker, png_file: bytes) -> None: |
| 181 | + kasper: typing.Final = get_mocked_kaspersky_scan_engine_client_bad_response( |
| 182 | + faker=faker, status_code=status_codes.GATEWAY_TIMEOUT |
| 183 | + ) |
| 184 | + with pytest.raises(KasperskyScanEngineConnectionStatusError): |
| 185 | + await kasper.scan_memory(file_name=faker.file_name(), file_content=png_file) |
0 commit comments