Skip to content

Commit 5f3db99

Browse files
author
Robert Segal
committed
Added e2e tests for commerce order assets
1 parent 0699809 commit 5f3db99

7 files changed

Lines changed: 309 additions & 10 deletions

File tree

e2e_config.test.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@
2727
"commerce.agreement.attachment.id": "ATT-9850-2169-6098-0001",
2828
"commerce.agreement.id": "AGR-9850-2169-6098",
2929
"commerce.assets.agreement.id": "AGR-2473-3299-1721",
30+
"commerce.assets.agreement.line.id": "ALI-9320-4904-7940-0001",
3031
"commerce.assets.id": "AST-0625-6526-6154",
3132
"commerce.assets.order.id": "ORD-7707-7765-8445",
33+
"commerce.assets.draft.order.agreement.id": "AGR-9320-4904-7940",
34+
"commerce.assets.draft.order.id": "ORD-9272-6817-2305",
3235
"commerce.assets.product.item.id": "ITM-1767-7355-0002",
3336
"commerce.assets.product.template.id": "",
3437
"commerce.authorization.id": "AUT-0031-2873",

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ per-file-ignores = [
132132
"tests/e2e/commerce/agreement/*.py: WPS202",
133133
"tests/e2e/commerce/agreement/attachment/*.py: WPS202",
134134
"tests/e2e/commerce/order/*.py: WPS202 WPS204",
135+
"tests/e2e/commerce/order/asset/*.py: WPS211 WPS202",
135136
"tests/e2e/commerce/subscription/*.py: WPS202",
136137
"tests/unit/http/test_async_service.py: WPS204 WPS202",
137138
"tests/unit/http/test_service.py: WPS204 WPS202",

tests/e2e/commerce/asset/conftest.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
11
import pytest
22

33

4-
@pytest.fixture
5-
def agreement_asset_id(e2e_config):
6-
return e2e_config["commerce.assets.id"]
7-
8-
9-
@pytest.fixture
10-
def invalid_agreement_asset_id():
11-
return "AST-0000-0000-0000"
12-
13-
144
@pytest.fixture
155
def asset_factory(asset_item_id, asset_agreement_id):
166
def factory(

tests/e2e/commerce/conftest.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,13 @@ def asset_item_id(e2e_config):
4949
@pytest.fixture
5050
def asset_agreement_id(e2e_config):
5151
return e2e_config["commerce.assets.agreement.id"]
52+
53+
54+
@pytest.fixture
55+
def agreement_asset_id(e2e_config):
56+
return e2e_config["commerce.assets.id"]
57+
58+
59+
@pytest.fixture
60+
def invalid_agreement_asset_id():
61+
return "AST-0000-0000-0000"
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import pytest
2+
3+
4+
@pytest.fixture
5+
def draft_order_asset_agreement_id(e2e_config):
6+
return e2e_config["commerce.assets.draft.order.agreement.id"]
7+
8+
9+
@pytest.fixture
10+
def asset_agreement_line_id(e2e_config):
11+
return e2e_config["commerce.assets.agreement.line.id"]
12+
13+
14+
@pytest.fixture
15+
def commerce_asset_draft_order_id(e2e_config):
16+
return e2e_config["commerce.assets.draft.order.id"]
17+
18+
19+
@pytest.fixture
20+
def order_asset_factory(
21+
draft_order_asset_agreement_id,
22+
buyer_id,
23+
asset_agreement_line_id,
24+
buyer_account_id,
25+
seller_id,
26+
commerce_product_id,
27+
commerce_asset_draft_order_id,
28+
):
29+
def factory(
30+
name: str = "E2E Created Order Asset",
31+
quantity: int = 1,
32+
external_vendor_id: str = "ext-vendor-id",
33+
):
34+
return {
35+
"name": name,
36+
"externalIds": {"vendor": external_vendor_id},
37+
"lines": [
38+
{
39+
"id": asset_agreement_line_id,
40+
"agreement": {"id": draft_order_asset_agreement_id},
41+
"buyer": {"id": buyer_id},
42+
"client": {"id": buyer_account_id},
43+
"oldQuantity": 0,
44+
"quantity": quantity,
45+
"price": {
46+
"unitPP": 10,
47+
"PPx1": 100,
48+
"currency": "USD",
49+
},
50+
}
51+
],
52+
"order": {"id": commerce_asset_draft_order_id},
53+
"product": {"id": commerce_product_id},
54+
"seller": {"id": seller_id},
55+
}
56+
57+
return factory
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
import pytest
2+
3+
from mpt_api_client.exceptions import MPTAPIError
4+
from mpt_api_client.rql.query_builder import RQLQuery
5+
6+
pytestmark = [pytest.mark.flaky]
7+
8+
9+
@pytest.fixture
10+
async def created_order_asset(async_mpt_vendor, order_asset_factory, commerce_asset_draft_order_id):
11+
# Must use this fixture for all tests to prevent api errors
12+
asset_data = order_asset_factory()
13+
orders = async_mpt_vendor.commerce.orders
14+
assets = orders.assets(commerce_asset_draft_order_id)
15+
asset = await assets.create(asset_data)
16+
17+
yield asset
18+
19+
try:
20+
await assets.delete(asset.id)
21+
except MPTAPIError as error:
22+
print(f"TEARDOWN - Unable to delete order asset: {getattr(error, 'title', str(error))}") # noqa: WPS421
23+
24+
25+
async def test_get_order_asset_by_id(
26+
async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id
27+
):
28+
asset_id = created_order_asset.id
29+
orders = async_mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id)
30+
31+
result = await orders.get(asset_id)
32+
33+
assert result is not None
34+
35+
36+
async def test_list_order_assets(
37+
async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id
38+
):
39+
limit = 10
40+
orders = async_mpt_vendor.commerce.orders
41+
assets = orders.assets(commerce_asset_draft_order_id)
42+
43+
result = await assets.fetch_page(limit=limit)
44+
45+
assert result is not None
46+
47+
48+
async def test_get_order_asset_by_id_not_found(
49+
async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id, invalid_agreement_asset_id
50+
):
51+
orders = async_mpt_vendor.commerce.orders
52+
assets = orders.assets(commerce_asset_draft_order_id)
53+
54+
with pytest.raises(MPTAPIError, match="404 Not Found"):
55+
await assets.get(invalid_agreement_asset_id)
56+
57+
58+
async def test_filter_order_assets(
59+
async_mpt_vendor, created_order_asset, commerce_asset_draft_order_id
60+
):
61+
select_fields = ["-externalIds"]
62+
asset_id = created_order_asset.id
63+
assets = async_mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id)
64+
filtered_assets = (
65+
assets.filter(RQLQuery(id=asset_id))
66+
.filter(RQLQuery(name="E2E Created Order Asset"))
67+
.select(*select_fields)
68+
)
69+
70+
result = [asset async for asset in filtered_assets.iterate()]
71+
72+
assert len(result) == 1
73+
74+
75+
def test_create_order_asset(created_order_asset):
76+
result = created_order_asset
77+
78+
assert result is not None
79+
80+
81+
async def test_update_order_asset(
82+
async_mpt_vendor,
83+
created_order_asset,
84+
commerce_asset_draft_order_id,
85+
):
86+
asset_id = created_order_asset.id
87+
updated_asset_data = {
88+
"name": "E2E Updated Order Asset",
89+
}
90+
orders = async_mpt_vendor.commerce.orders
91+
assets = orders.assets(commerce_asset_draft_order_id)
92+
93+
result = await assets.update(asset_id, updated_asset_data)
94+
95+
assert result is not None
96+
97+
98+
async def test_delete_order_asset(
99+
async_mpt_vendor,
100+
created_order_asset,
101+
commerce_asset_draft_order_id,
102+
):
103+
asset_id = created_order_asset.id
104+
orders = async_mpt_vendor.commerce.orders
105+
106+
result = orders.assets(commerce_asset_draft_order_id)
107+
108+
await result.delete(asset_id)
109+
110+
111+
async def test_render_order_asset(
112+
async_mpt_vendor,
113+
created_order_asset,
114+
commerce_asset_draft_order_id,
115+
):
116+
asset_id = created_order_asset.id
117+
orders = async_mpt_vendor.commerce.orders
118+
assets = orders.assets(commerce_asset_draft_order_id)
119+
120+
result = await assets.render(asset_id)
121+
122+
assert result is not None
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
import pytest
2+
3+
from mpt_api_client.exceptions import MPTAPIError
4+
from mpt_api_client.rql.query_builder import RQLQuery
5+
6+
pytestmark = [pytest.mark.flaky]
7+
8+
9+
@pytest.fixture
10+
def created_order_asset(mpt_vendor, order_asset_factory, commerce_asset_draft_order_id):
11+
# Must use this fixture for all tests to prevent api errors
12+
asset_data = order_asset_factory()
13+
orders = mpt_vendor.commerce.orders
14+
assets = orders.assets(commerce_asset_draft_order_id)
15+
asset = assets.create(asset_data)
16+
17+
yield asset
18+
19+
try:
20+
assets.delete(asset.id)
21+
except MPTAPIError as error:
22+
print(f"TEARDOWN - Unable to delete order asset: {getattr(error, 'title', str(error))}") # noqa: WPS421
23+
24+
25+
def test_get_order_asset_by_id(mpt_vendor, created_order_asset, commerce_asset_draft_order_id):
26+
asset_id = created_order_asset.id
27+
orders = mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id)
28+
29+
result = orders.get(asset_id)
30+
31+
assert result is not None
32+
33+
34+
def test_list_order_assets(mpt_vendor, created_order_asset, commerce_asset_draft_order_id):
35+
limit = 10
36+
orders = mpt_vendor.commerce.orders
37+
assets = orders.assets(commerce_asset_draft_order_id)
38+
39+
result = assets.fetch_page(limit=limit)
40+
41+
assert result is not None
42+
43+
44+
def test_get_order_asset_by_id_not_found(
45+
mpt_vendor, created_order_asset, commerce_asset_draft_order_id, invalid_agreement_asset_id
46+
):
47+
orders = mpt_vendor.commerce.orders
48+
assets = orders.assets(commerce_asset_draft_order_id)
49+
50+
with pytest.raises(MPTAPIError, match="404 Not Found"):
51+
assets.get(invalid_agreement_asset_id)
52+
53+
54+
def test_filter_order_assets(mpt_vendor, created_order_asset, commerce_asset_draft_order_id):
55+
select_fields = ["-externalIds"]
56+
asset_id = created_order_asset.id
57+
assets = mpt_vendor.commerce.orders.assets(commerce_asset_draft_order_id)
58+
filtered_assets = (
59+
assets.filter(RQLQuery(id=asset_id))
60+
.filter(RQLQuery(name="E2E Created Order Asset"))
61+
.select(*select_fields)
62+
)
63+
64+
result = list(filtered_assets.iterate())
65+
66+
assert len(result) == 1
67+
68+
69+
def test_create_order_asset(created_order_asset):
70+
result = created_order_asset
71+
72+
assert result is not None
73+
74+
75+
def test_update_order_asset(
76+
mpt_vendor,
77+
created_order_asset,
78+
commerce_asset_draft_order_id,
79+
):
80+
asset_id = created_order_asset.id
81+
updated_asset_data = {
82+
"name": "E2E Updated Order Asset",
83+
}
84+
orders = mpt_vendor.commerce.orders
85+
assets = orders.assets(commerce_asset_draft_order_id)
86+
87+
result = assets.update(asset_id, updated_asset_data)
88+
89+
assert result is not None
90+
91+
92+
def test_delete_order_asset(
93+
mpt_vendor,
94+
created_order_asset,
95+
commerce_asset_draft_order_id,
96+
):
97+
asset_id = created_order_asset.id
98+
orders = mpt_vendor.commerce.orders
99+
100+
result = orders.assets(commerce_asset_draft_order_id)
101+
102+
result.delete(asset_id)
103+
104+
105+
def test_render_order_asset(
106+
mpt_vendor,
107+
created_order_asset,
108+
commerce_asset_draft_order_id,
109+
):
110+
asset_id = created_order_asset.id
111+
orders = mpt_vendor.commerce.orders
112+
assets = orders.assets(commerce_asset_draft_order_id)
113+
114+
result = assets.render(asset_id)
115+
116+
assert result is not None

0 commit comments

Comments
 (0)