"""Test for legacy_image_asset model.""" from contextlib import nullcontext from typing import Any, ContextManager import pytest from assets import config from assets.constants import legacy_image_asset as constants from assets.exceptions import ImageAssetNotFound from assets.models.legacy import image_asset as model from tests.unit.models.legacy import ar_operations @pytest.fixture def db_fixture(legacy_image_asset_data: list[dict[str, Any]]) -> None: """Setup test table in database.""" ar_operations.truncate_legacy_image_assets_table() ar_operations.populate_table("image_assets", legacy_image_asset_data) legacy_image_asset_response_one = [ { "id": 1, "category_id": 7, "path": "/21989/21989/", "filename": "1009370276510.jpg", "height": 100, "width": 100, "mime_type": "image/jpeg", "file_size": 24470, "cdn_url": None, } ] legacy_image_asset_response_two = [ { "id": 4, "category_id": 10, "path": "/21989/21989/", "filename": "1009370276511.jpg", "height": 101, "width": 101, "mime_type": "image/jpeg", "file_size": 24471, "cdn_url": None, } ] legacy_image_asset_response_three = [ { "id": 3, "category_id": 7, "path": "/21989/21989/", "filename": "1009370276511.jpg", "height": 101, "width": 101, "mime_type": "image/jpeg", "file_size": 24471, "cdn_url": None, }, { "id": 4, "category_id": 10, "path": "/21989/21989/", "filename": "1009370276511.jpg", "height": 101, "width": 101, "mime_type": "image/jpeg", "file_size": 24471, "cdn_url": None, }, ] upsert_legacy_image_asset_response = [ { "id": 3, "category_id": 7, "path": "/21989/21989/", "filename": "1009370276511.jpg", "height": 101, "width": 101, "mime_type": "image/jpeg", "file_size": 24471, "cdn_url": "https://fakesite.cloudfront.net/product/cover/" "b7bc2a2f5bb6d521e64c8974c143e9a0.jpg", }, { "id": 4, "category_id": 10, "path": "/21989/21989/", "filename": "1009370276511.jpg", "height": 101, "width": 101, "mime_type": "image/jpeg", "file_size": 24471, "cdn_url": "https://fakesite.cloudfront.net/product/large_cover/" "b7bc2a2f5bb6d521e64c8974c143e9a0.jpg", }, { "id": 61, "category_id": 17, "path": "", "filename": "1009370276511.jpg", "height": 2000, "width": 2000, "mime_type": "image/jpeg", "file_size": 2000, "cdn_url": "https://d14bv7mbq8je1y.cloudfront.net/1009370276511.jpg", }, ] @pytest.mark.parametrize( ("image_asset_id", "expected_asset", "raised_exception", "expected_raises"), [ (1, legacy_image_asset_response_one, None, nullcontext()), (4, legacy_image_asset_response_two, None, nullcontext()), (3, legacy_image_asset_response_three, None, nullcontext()), ( 12112322, None, ImageAssetNotFound(), pytest.raises(ImageAssetNotFound), ), ], ) def test_get_image_asset_url_by_id( db_fixture: None, image_asset_id: int, expected_asset: list[dict[str, Any]] | None, raised_exception: Exception | None, expected_raises: ContextManager[None], ) -> None: """Get legacy image asset url.""" with expected_raises: response = model.get_image_asset_url_by_id(image_asset_id) assert expected_asset is not None assert response == model.get_legacy_image_url(expected_asset[0]) vendor_icon_asset = { "id": 4, "category_id": 16, "path": "/21989/21989/", "filename": "1009370276511.jpg", "height": 101, "width": 101, "mime_type": "image/jpeg", "file_size": 24471, "cdn_url": None, } @pytest.mark.parametrize( ("environment", "expected_url"), [ ("dev", constants.IMAGES_QA_URL), ("prod", constants.IMAGES_URL), ("qa", constants.IMAGES_QA_URL), ], ) def test_get_legacy_image_url( environment: str, expected_url: str, monkeypatch: Any ) -> None: """Test getting the well-formed legacy image url.""" monkeypatch.setattr(config, "ENVIRONMENT", environment) asset_path = model.get_legacy_image_url(vendor_icon_asset) assert asset_path == expected_url.format( category_path="/vendor/vendor_icon/", path="21989/21989/", filename="1009370276511.jpg", )