Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
37 changes: 9 additions & 28 deletions tests/e2e/commerce/order/asset/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]]
Comment thread
coderabbitai[bot] marked this conversation as resolved.

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
43 changes: 18 additions & 25 deletions tests/e2e/commerce/order/asset/test_async_asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,54 +26,47 @@ 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)

assert result is not None


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))
Expand All @@ -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)

Expand All @@ -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)

Expand Down
34 changes: 17 additions & 17 deletions tests/e2e/commerce/order/asset/test_sync_asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,48 +26,48 @@ 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)

assert result is not None


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))
Expand All @@ -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)

Expand All @@ -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)

Expand Down
30 changes: 28 additions & 2 deletions tests/e2e/commerce/order/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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}],
}
Expand Down
7 changes: 0 additions & 7 deletions tests/e2e/commerce/order/test_sync_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down