From ef9fe59b7d0c87acf45bd0f87f870f5853b85039 Mon Sep 17 00:00:00 2001 From: Albert Sola Date: Thu, 11 Dec 2025 10:24:00 +0000 Subject: [PATCH] MPT-16325 Publish product during the seeding process --- seed/catalog/product.py | 18 ++++++++++++++++++ seed/seed_api.py | 1 + tests/seed/catalog/test_product.py | 17 +++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/seed/catalog/product.py b/seed/catalog/product.py index 7e25682..904ec16 100644 --- a/seed/catalog/product.py +++ b/seed/catalog/product.py @@ -38,6 +38,7 @@ async def seed_product() -> None: """Seed product data.""" logger.debug("Seeding catalog.product ...") await init_resource("catalog.product.id", create_product) + await publish_product() await init_resource("catalog.unit.id", create_unit_of_measure) await init_resource("catalog.product.item_group.id", create_item_group) await init_resource("catalog.product.item.id", create_product_item) @@ -50,6 +51,23 @@ async def seed_product() -> None: logger.debug("Seeded catalog.product completed.") +@inject +async def publish_product( + context: Context = Provide[Container.context], + mpt_vendor: AsyncMPTClient = Provide[Container.mpt_vendor], + mpt_operations: AsyncMPTClient = Provide[Container.mpt_operations], +) -> None: + """Publish product.""" + product_id = require_context_id(context, "catalog.product.id", "publish product") + product = await mpt_vendor.catalog.products.get(product_id) + if product.status == "Draft": + product = await mpt_vendor.catalog.products.review(product_id) + if product.status in {"Pending", "Unpublished"}: + product = await mpt_operations.catalog.products.publish(product_id) + if product.status != "Published": + raise RuntimeError(f"Product {product_id} is not published") + + @inject async def create_terms_variant( context: Context = Provide[Container.context], diff --git a/seed/seed_api.py b/seed/seed_api.py index 5175f3b..e9eed8a 100644 --- a/seed/seed_api.py +++ b/seed/seed_api.py @@ -20,6 +20,7 @@ async def seed_api(context: Context = Provide[Container.context]) -> None: try: # noqa: WPS229 await seed_accounts() await seed_catalog() + logger.info("Seeding completed successfully.") except Exception: logger.exception("Exception occurred during seeding.") finally: diff --git a/tests/seed/catalog/test_product.py b/tests/seed/catalog/test_product.py index 8679d86..0d2f777 100644 --- a/tests/seed/catalog/test_product.py +++ b/tests/seed/catalog/test_product.py @@ -12,6 +12,7 @@ create_terms, create_terms_variant, create_unit_of_measure, + publish_product, ) from seed.context import Context @@ -28,6 +29,22 @@ def context_with_product(): return context +async def test_publish_product(mocker, vendor_client, operations_client, context_with_product): + product_draft = Product({"id": "prod-123", "status": "Draft"}) + product_pending = Product({"id": "prod-123", "status": "Pending"}) + product_published = Product({"id": "prod-123", "status": "Published"}) + + vendor_client.catalog.products.get = mocker.AsyncMock(return_value=product_draft) + vendor_client.catalog.products.review = mocker.AsyncMock(return_value=product_pending) + operations_client.catalog.products.publish = mocker.AsyncMock(return_value=product_published) + + await publish_product(context_with_product, vendor_client, operations_client) + + vendor_client.catalog.products.get.assert_called_once_with("prod-123") + vendor_client.catalog.products.review.assert_called_once_with("prod-123") + operations_client.catalog.products.publish.assert_called_once_with("prod-123") + + async def test_create_product(mocker, context: Context, vendor_client, product): mpt_vendor = vendor_client mpt_vendor.catalog.products.create = mocker.AsyncMock(return_value=product)