import httpx import pytest from audience_common.owsclient import AsyncOwsClient from audience_common.owsclient.mock import OwsClientMock from campaigns.connectors.ows_product import OwsProduct @pytest.fixture def ows_product(ows_client: AsyncOwsClient) -> OwsProduct: return OwsProduct(ows_client=ows_client) async def test_get_product_by_id( ows_product: OwsProduct, ows_client_mock: OwsClientMock, ) -> None: product_id = 1000000 upc = "1000" vendor_id = 1000 subaccount_id = 100 status = "in_content" ows_client_mock.get("ows-product", f"/product/{product_id}").mock( return_value=httpx.Response( status_code=200, json={ "product_id": product_id, "upc": upc, "vendor_id": vendor_id, "subaccount_id": subaccount_id, "status": status, }, ) ) product = await ows_product.get_product_by_id(product_id) assert product assert product.product_id == product_id assert product.upc == upc assert product.status == status assert product.vendor_id == vendor_id assert product.subaccount_id == subaccount_id async def test_get_product_by_id_not_found( ows_product: OwsProduct, ows_client_mock: OwsClientMock, ) -> None: product_id = 1000000 ows_client_mock.get("ows-product", f"/product/{product_id}").mock( return_value=httpx.Response(status_code=404) ) product = await ows_product.get_product_by_id(product_id) assert not product async def test_get_product_by_id_invalid_content( ows_product: OwsProduct, ows_client_mock: OwsClientMock, ) -> None: product_id = 1000000 ows_client_mock.get("ows-product", f"/product/{product_id}").mock( return_value=httpx.Response(status_code=200) ) product = await ows_product.get_product_by_id(product_id) assert not product