from typing import Any, Coroutine import pytest import pytest_asyncio from fastapi.testclient import TestClient from sqlalchemy.sql import text from syrupy.assertion import SnapshotAssertion from delivery_metadata.api.app import app from delivery_metadata.clients.art_relations import get_territory_dates from delivery_metadata.clients.art_relations.product import ArtRelationsProduct @pytest_asyncio.fixture async def create_release_country_date_tables( art_relations_product_mock: ArtRelationsProduct, test_client: TestClient, ) -> None: async with app.state.art_relations_connector.db_session( transaction=True, turn_off_foreign_key_checks=True ) as session: await session.execute(text("TRUNCATE TABLE release_country_dates")) await session.execute( text( """ INSERT INTO release_country_dates ( release_country_date_id, release_id, upc, release_date, sale_start_date, preorder_date, country_id ) VALUES ( :release_country_date_id, :release_id, :upc, :release_date, :sale_start_date, :preorder_date, :country_id ) """ ), [ { "release_country_date_id": 11, "release_id": art_relations_product_mock.product_id, "upc": art_relations_product_mock.upc, "release_date": "2024-08-12", "sale_start_date": "2024-08-12", "preorder_date": "2024-08-10", "country_id": 5, }, { "release_country_date_id": 12, "release_id": art_relations_product_mock.product_id, "upc": art_relations_product_mock.upc, "release_date": "2024-08-10", "sale_start_date": "2024-08-10", "preorder_date": "2024-08-08", "country_id": 1, }, ], ) async with app.state.art_relations_connector.db_session( transaction=True, turn_off_foreign_key_checks=True ) as session: await session.execute(text("TRUNCATE TABLE country")) await session.execute( text( """ INSERT INTO country ( id, name, country_code, abbrivation, continent, latitude, longitude, iso3166a3, continent_id ) VALUES ( :id, :name, :country_code, :abbrivation, :continent, :latitude, :longitude, :iso3166a3, :continent_id ) """ ), [ { "id": 5, "name": "Sweden", "country_code": "SE", "abbrivation": "SE", "continent": "Europe", "latitude": "60.128161", "longitude": "18.643501", "iso3166a3": "SWE", "continent_id": 4, }, { "id": 1, "name": "USA", "country_code": "US", "abbrivation": "US", "continent": "North America", "latitude": "37.090240", "longitude": "-95.712891", "iso3166a3": "USA", "continent_id": 5, }, { "id": 23, "name": "Argentina", "country_code": "AR", "abbrivation": "AR", "continent": "South America", "latitude": "", "longitude": "", "iso3166a3": "ARG", "continent_id": 7, }, ], ) @pytest.mark.asyncio async def test_get_territory_dates( create_release_country_date_tables: Coroutine[Any, Any, None], snapshot: SnapshotAssertion, ) -> None: result = await get_territory_dates(75679660923) assert result == snapshot