from unittest.mock import MagicMock import pytest from fastapi.testclient import TestClient from pytest_mock import MockerFixture from syrupy.assertion import SnapshotAssertion from delivery_metadata.clients.ows_video import get_product_video_assets @pytest.mark.asyncio async def test_get_product_video_assets( mocker: MockerFixture, test_client: TestClient, snapshot: SnapshotAssertion ) -> None: product_id = 12345 response_mock = MagicMock() response_mock.status_code = 200 response_mock.json = mocker.Mock( return_value=[ { "tuid": 555, "product_id": product_id, "asset_type": "video_master", "s3_bucket": "test-bucket", "s3_key": "test-key", "duration": 334213412, "last_updated": "2023-04-23 16:37:52", "last_updated_us_east": "2023-04-23 12:37:52", }, ] ) get_mock = mocker.patch.object( test_client.app.state.ows_connector, # type: ignore[attr-defined] "get", return_value=response_mock, autospec=True, ) result = await get_product_video_assets(product_id) get_mock.assert_called_once_with( service_name="ows-video", path=f"/product/assets?product_ids={product_id}", ) response_mock.raise_for_status.assert_called_once() assert result == snapshot @pytest.mark.asyncio async def test_get_product_video_assets_404_returns_empty( mocker: MockerFixture, test_client: TestClient ) -> None: product_id = 12345 response_mock = MagicMock() response_mock.status_code = 404 mocker.patch.object( test_client.app.state.ows_connector, # type: ignore[attr-defined] "get", return_value=response_mock, autospec=True, ) result = await get_product_video_assets(product_id) response_mock.raise_for_status.assert_not_called() assert result == {"product_assets": [], "track_assets": {}}