diff --git a/pyproject.toml b/pyproject.toml index 206fd985..822c3298 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -135,8 +135,8 @@ per-file-ignores = [ "tests/e2e/commerce/*.py: WPS202 WPS204 WPS453", "tests/e2e/commerce/agreement/*.py: WPS202", "tests/e2e/commerce/agreement/attachment/*.py: WPS202", - "tests/e2e/commerce/order/*.py: WPS202 WPS204", - "tests/e2e/commerce/order/asset/*.py: WPS211 WPS202", + "tests/e2e/commerce/order/*.py: WPS202 WPS204 WPS211", + "tests/e2e/commerce/order/asset/*.py: WPS211 WPS202 WPS221", "tests/e2e/commerce/subscription/*.py: WPS202", "tests/e2e/helpdesk/chats/links/*.py: WPS221 WPS202", "tests/e2e/program/enrollment/*.py: WPS202 WPS204", diff --git a/tests/e2e/commerce/order/asset/conftest.py b/tests/e2e/commerce/order/asset/conftest.py index db5cc46c..bd6cab32 100644 --- a/tests/e2e/commerce/order/asset/conftest.py +++ b/tests/e2e/commerce/order/asset/conftest.py @@ -17,41 +17,22 @@ def commerce_asset_draft_order_id(e2e_config): @pytest.fixture -def order_asset_factory( - draft_order_asset_agreement_id, - buyer_id, - asset_agreement_line_id, - buyer_account_id, - seller_id, - commerce_product_id, - commerce_asset_draft_order_id, -): +def order_asset_factory(): + def factory( + order: dict, name: str = "E2E Created Order Asset", - quantity: int = 1, external_vendor_id: str = "ext-vendor-id", ): + asset_lines = [line for line in order["lines"] if "Asset" in line["item"]["name"]] + return { "name": name, "externalIds": {"vendor": external_vendor_id}, - "lines": [ - { - "id": asset_agreement_line_id, - "agreement": {"id": draft_order_asset_agreement_id}, - "buyer": {"id": buyer_id}, - "client": {"id": buyer_account_id}, - "oldQuantity": 0, - "quantity": quantity, - "price": { - "unitPP": 10, - "PPx1": 100, - "currency": "USD", - }, - } - ], - "order": {"id": commerce_asset_draft_order_id}, - "product": {"id": commerce_product_id}, - "seller": {"id": seller_id}, + "lines": asset_lines, + "order": {"id": order["id"]}, + "product": {"id": order["product"]["id"]}, + "seller": {"id": order["seller"]["id"]}, } return factory diff --git a/tests/e2e/commerce/order/asset/test_async_asset.py b/tests/e2e/commerce/order/asset/test_async_asset.py index 234b6af1..2f9f5f9f 100644 --- a/tests/e2e/commerce/order/asset/test_async_asset.py +++ b/tests/e2e/commerce/order/asset/test_async_asset.py @@ -26,32 +26,27 @@ async def async_create_fixture_resource_and_delete(resource_manager, resource_da @pytest.fixture -async def created_order_asset(async_mpt_vendor, order_asset_factory, commerce_asset_draft_order_id): - # Must use this fixture for all tests to prevent api errors - asset_data = order_asset_factory() +async def created_order_asset(async_mpt_vendor, order_asset_factory, created_order): + asset_data = order_asset_factory(created_order.to_dict()) orders = async_mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) async with async_create_fixture_resource_and_delete(assets, asset_data) as asset: yield asset -async def test_get_order_asset_by_id( - async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id -): +async def test_get_order_asset_by_id(async_mpt_vendor, created_order, created_order_asset): asset_id = created_order_asset.id - orders = async_mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id) + assets = async_mpt_vendor.commerce.orders.assets(created_order.id) - result = await orders.get(asset_id) + result = await assets.get(asset_id) assert result is not None -async def test_list_order_assets( - async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id -): +async def test_list_order_assets(async_mpt_vendor, created_order, created_order_asset): limit = 10 orders = async_mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) result = await assets.fetch_page(limit=limit) @@ -59,21 +54,19 @@ async def test_list_order_assets( async def test_get_order_asset_by_id_not_found( - async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id, invalid_asset_id + async_mpt_vendor, created_order, created_order_asset, invalid_asset_id ): orders = async_mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) with pytest.raises(MPTAPIError, match="404 Not Found"): await assets.get(invalid_asset_id) -async def test_filter_order_assets( - async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id -): +async def test_filter_order_assets(async_mpt_vendor, created_order, created_order_asset): select_fields = ["-externalIds"] asset_id = created_order_asset.id - assets = async_mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id) + assets = async_mpt_vendor.commerce.orders.assets(created_order.id) filtered_assets = ( assets .filter(RQLQuery(id=asset_id)) @@ -94,15 +87,15 @@ def test_create_order_asset(created_order_asset): async def test_update_order_asset( async_mpt_vendor, + created_order, created_order_asset, - commerce_asset_draft_order_id, ): asset_id = created_order_asset.id updated_asset_data = { "name": "E2E Updated Order Asset", } orders = async_mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) result = await assets.update(asset_id, updated_asset_data) @@ -111,25 +104,25 @@ async def test_update_order_asset( async def test_delete_order_asset( async_mpt_vendor, + created_order, created_order_asset, - commerce_asset_draft_order_id, ): asset_id = created_order_asset.id orders = async_mpt_vendor.commerce.orders - result = orders.assets(commerce_asset_draft_order_id) + result = orders.assets(created_order.id) await result.delete(asset_id) async def test_render_order_asset( async_mpt_vendor, + created_order, created_order_asset, - commerce_asset_draft_order_id, ): asset_id = created_order_asset.id orders = async_mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) result = await assets.render(asset_id) diff --git a/tests/e2e/commerce/order/asset/test_sync_asset.py b/tests/e2e/commerce/order/asset/test_sync_asset.py index b6c47941..c782940d 100644 --- a/tests/e2e/commerce/order/asset/test_sync_asset.py +++ b/tests/e2e/commerce/order/asset/test_sync_asset.py @@ -26,28 +26,28 @@ def create_fixture_resource_and_delete(resource_manager, resource_data): @pytest.fixture -def created_order_asset(mpt_vendor, order_asset_factory, commerce_asset_draft_order_id): +def created_order_asset(mpt_vendor, order_asset_factory, created_order): # Must use this fixture for all tests to prevent api errors - asset_data = order_asset_factory() + asset_data = order_asset_factory(created_order.to_dict()) orders = mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) with create_fixture_resource_and_delete(assets, asset_data) as asset: yield asset -def test_get_order_asset_by_id(mpt_vendor, created_order_asset, commerce_asset_draft_order_id): +def test_get_order_asset_by_id(mpt_vendor, created_order, created_order_asset): asset_id = created_order_asset.id - orders = mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id) + orders = mpt_vendor.commerce.orders.assets(created_order.id) result = orders.get(asset_id) assert result is not None -def test_list_order_assets(mpt_vendor, created_order_asset, commerce_asset_draft_order_id): +def test_list_order_assets(mpt_vendor, created_order, created_order_asset): limit = 10 orders = mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) result = assets.fetch_page(limit=limit) @@ -55,19 +55,19 @@ def test_list_order_assets(mpt_vendor, created_order_asset, commerce_asset_draft def test_get_order_asset_by_id_not_found( - mpt_vendor, created_order_asset, commerce_asset_draft_order_id, invalid_asset_id + mpt_vendor, created_order, created_order_asset, invalid_asset_id ): orders = mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) with pytest.raises(MPTAPIError, match="404 Not Found"): assets.get(invalid_asset_id) -def test_filter_order_assets(mpt_vendor, created_order_asset, commerce_asset_draft_order_id): +def test_filter_order_assets(mpt_vendor, created_order, created_order_asset): select_fields = ["-externalIds"] asset_id = created_order_asset.id - assets = mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id) + assets = mpt_vendor.commerce.orders.assets(created_order.id) filtered_assets = ( assets .filter(RQLQuery(id=asset_id)) @@ -88,15 +88,15 @@ def test_create_order_asset(created_order_asset): def test_update_order_asset( mpt_vendor, + created_order, created_order_asset, - commerce_asset_draft_order_id, ): asset_id = created_order_asset.id updated_asset_data = { "name": "E2E Updated Order Asset", } orders = mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) result = assets.update(asset_id, updated_asset_data) @@ -105,25 +105,25 @@ def test_update_order_asset( def test_delete_order_asset( mpt_vendor, + created_order, created_order_asset, - commerce_asset_draft_order_id, ): asset_id = created_order_asset.id orders = mpt_vendor.commerce.orders - result = orders.assets(commerce_asset_draft_order_id) + result = orders.assets(created_order.id) result.delete(asset_id) def test_render_order_asset( mpt_vendor, + created_order, created_order_asset, - commerce_asset_draft_order_id, ): asset_id = created_order_asset.id orders = mpt_vendor.commerce.orders - assets = orders.assets(commerce_asset_draft_order_id) + assets = orders.assets(created_order.id) result = assets.render(asset_id) diff --git a/tests/e2e/commerce/order/conftest.py b/tests/e2e/commerce/order/conftest.py index f10d5216..cfc8bcf4 100644 --- a/tests/e2e/commerce/order/conftest.py +++ b/tests/e2e/commerce/order/conftest.py @@ -7,10 +7,22 @@ def invalid_order_id(): return "ORD-0000-0000" +@pytest.fixture +def created_order(mpt_client, order_factory): + new_order_request_data = order_factory() + + return mpt_client.commerce.orders.create(new_order_request_data) + + @pytest.fixture @freeze_time("2025-12-01T10:00:00.000Z") def order_factory( - licensee_id, commerce_product_id, commerce_item_id, authorization_id, certificate_id + licensee_id, + commerce_product_id, + commerce_item_id, + asset_item_id, + authorization_id, + certificate_id, ): def factory( notes: str = "E2E Created Order", @@ -49,7 +61,21 @@ def factory( "SPxY": 15, }, "quantity": line_quantity, - } + }, + { + "item": { + "id": asset_item_id, + "terms": {"model": "quantity", "period": "one-time"}, + }, + "price": { + "currency": "USD", + "unitSP": 15, + "SPx1": None, + "SPxM": 1.25, + "SPxY": 15, + }, + "quantity": line_quantity, + }, ], "certificates": [{"id": certificate_id}], } diff --git a/tests/e2e/commerce/order/test_sync_order.py b/tests/e2e/commerce/order/test_sync_order.py index 4f91fdaf..2ac5d746 100644 --- a/tests/e2e/commerce/order/test_sync_order.py +++ b/tests/e2e/commerce/order/test_sync_order.py @@ -6,13 +6,6 @@ pytestmark = [pytest.mark.flaky] -@pytest.fixture -def created_order(mpt_client, order_factory): - new_order_request_data = order_factory() - - return mpt_client.commerce.orders.create(new_order_request_data) - - @pytest.fixture def processed_order(mpt_client, created_order): return mpt_client.commerce.orders.process(created_order.id)