import pytest from fastapi.testclient import TestClient from pytest_mock import MockerFixture from syrupy.assertion import SnapshotAssertion from delivery_metadata.clients.ows_timed_release import get_timed_release from delivery_metadata.clients.ows_timed_release.timed_release import ( TimedRelease, get_product_timed_release_by_store_id, ) @pytest.mark.asyncio async def test_get_timed_release( mocker: MockerFixture, ows_timed_release_response_mock: dict[str, list[dict[str, str | dict[str, int]]]], timed_release_client_response_mock: TimedRelease, test_client: TestClient, snapshot: SnapshotAssertion, ) -> None: response_mock = mocker.Mock() response_mock.json = mocker.Mock(return_value=ows_timed_release_response_mock) client_mock = mocker.patch.object( test_client.app.state.ows_connector, # type: ignore[attr-defined] "get", return_value=response_mock, autospec=True, ) result = await get_timed_release(4953147) client_mock.assert_called_once_with( service_name="ows-timed-release", path="/timedrelease/4953147", ) response_mock.raise_for_status.assert_called_once() assert result == snapshot @pytest.mark.asyncio async def test_get_product_timed_release_by_store_id( mocker: MockerFixture, test_client: TestClient, product_timed_release_by_store_response_mock: dict[str, dict[str, str] | None], snapshot: SnapshotAssertion, ) -> None: """Test the new get_product_timed_release_by_store_id function.""" response_mock = mocker.Mock() response_mock.json = mocker.Mock( return_value=product_timed_release_by_store_response_mock ) client_mock = mocker.patch.object( test_client.app.state.ows_connector, # type: ignore[attr-defined] "get", return_value=response_mock, autospec=True, ) product_id = 3469930 store_id = 1896 result = await get_product_timed_release_by_store_id(product_id, store_id) client_mock.assert_called_once_with( service_name="ows-timed-release", path=f"/product/{product_id}/timed_release/store/{store_id}", ) response_mock.raise_for_status.assert_called_once() assert result == snapshot @pytest.mark.asyncio async def test_get_product_timed_release_by_store_id_with_staggered( mocker: MockerFixture, test_client: TestClient, product_staggered_release_by_store_response_mock: dict[str, dict[str, str] | None], snapshot: SnapshotAssertion, ) -> None: """Test the new function with staggered release data.""" response_mock = mocker.Mock() response_mock.json = mocker.Mock( return_value=product_staggered_release_by_store_response_mock ) client_mock = mocker.patch.object( test_client.app.state.ows_connector, # type: ignore[attr-defined] "get", return_value=response_mock, autospec=True, ) product_id = 3469930 store_id = 1896 result = await get_product_timed_release_by_store_id(product_id, store_id) client_mock.assert_called_once_with( service_name="ows-timed-release", path=f"/product/{product_id}/timed_release/store/{store_id}", ) response_mock.raise_for_status.assert_called_once() assert result == snapshot