Skip to content

Commit 316148e

Browse files
authored
MPT-14888 Add E2E tests for catalog items (#118)
2 parents 1b68ffa + e5590af commit 316148e

File tree

10 files changed

+189
-5
lines changed

10 files changed

+189
-5
lines changed

e2e_config.test.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
{
2-
"catalog.product.id": "PRD-7255-3950",
32
"accounts.seller.id": "SEL-7310-3075",
4-
"catalog.product.parameter_group.id": "PGR-7255-3950-0001",
5-
"catalog.product.parameter.id": "PAR-7255-3950-0016",
6-
"catalog.product.document.id": "PDC-7255-3950-0001",
73
"accounts.account.id": "ACC-9042-0088",
84
"accounts.buyer.account.id": "ACC-1086-6867",
95
"accounts.buyer.id": "BUY-1591-2112",
106
"accounts.user_group.id": "UGR-6822-0561",
117
"accounts.module.id": "MOD-1756",
12-
"accounts.module.name": "Access Management"
8+
"accounts.module.name": "Access Management",
9+
"catalog.product.id": "PRD-7255-3950",
10+
"catalog.product.parameter_group.id": "PGR-7255-3950-0001",
11+
"catalog.product.item_group.id": "IGR-7255-3950-0001",
12+
"catalog.product.parameter.id": "PAR-7255-3950-0016",
13+
"catalog.product.document.id": "PDC-7255-3950-0001",
14+
"catalog.item.id": "ITM-7255-3950-0001",
15+
"catalog.unit.id": "UNT-1229"
1316
}

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ per-file-ignores =
5050
tests/unit/test_mpt_client.py: WPS235
5151
tests/e2e/accounts/*.py: WPS430 WPS202
5252
tests/e2e/catalog/*.py: WPS421
53+
tests/e2e/catalog/items/*.py: WPS110 WPS202
5354
tests/e2e/catalog/product/documents/*.py: WPS202 WPS421
5455

5556
tests/*:

tests/e2e/__init__.py

Whitespace-only changes.

tests/e2e/catalog/__init__.py

Whitespace-only changes.

tests/e2e/catalog/conftest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import pytest
2+
3+
4+
@pytest.fixture
5+
def item_id(e2e_config):
6+
return e2e_config.get("catalog.item.id")
7+
8+
9+
@pytest.fixture
10+
def item_group_id(e2e_config):
11+
return e2e_config.get("catalog.product.item_group.id")
12+
13+
14+
@pytest.fixture
15+
def unit_id(e2e_config):
16+
return e2e_config.get("catalog.unit.id")

tests/e2e/catalog/items/__init__.py

Whitespace-only changes.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import pytest
2+
3+
4+
@pytest.fixture
5+
def item_data(short_uuid, product_id, item_group_id, unit_id):
6+
return {
7+
"name": "e2e - please delete",
8+
"description": "e2e - please delete",
9+
"unit": {
10+
"id": unit_id,
11+
},
12+
"group": {
13+
"id": item_group_id,
14+
},
15+
"product": {
16+
"id": product_id,
17+
},
18+
"terms": {"model": "quantity", "period": "1m", "commitment": "1m"},
19+
"externalIds": {"vendor": f"e2e-delete-{short_uuid}"},
20+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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 async_created_item(logger, async_mpt_vendor, item_data):
11+
service = async_mpt_vendor.catalog.items
12+
item = await service.create(item_data)
13+
yield item
14+
try:
15+
await service.delete(item.id)
16+
except MPTAPIError as error:
17+
print(f"TEARDOWN - Unable to delete item {item.id}: {error.title}") # noqa: WPS421
18+
19+
20+
def test_create_item(async_created_item):
21+
assert async_created_item.name == "e2e - please delete"
22+
23+
24+
async def test_update_item(async_mpt_vendor, async_created_item):
25+
service = async_mpt_vendor.catalog.items
26+
update_data = {"name": "e2e - delete me (updated)"}
27+
item = await service.update(async_created_item.id, update_data)
28+
assert item.name == "e2e - delete me (updated)"
29+
30+
31+
@pytest.mark.skip(reason="Leaves test items in the catalog")
32+
async def test_review_and_publish_item(async_mpt_vendor, async_mpt_ops, async_created_item):
33+
item = await async_mpt_vendor.catalog.items.review(async_created_item.id)
34+
assert item.status == "Pending"
35+
36+
item = await async_mpt_ops.catalog.items.publish(async_created_item.id)
37+
assert item.status == "Published"
38+
39+
40+
async def test_get_item(async_mpt_vendor, item_id):
41+
service = async_mpt_vendor.catalog.items
42+
item = await service.get(item_id)
43+
assert item.id == item_id
44+
45+
46+
async def test_iterate_items(async_mpt_vendor, async_created_item):
47+
service = async_mpt_vendor.catalog.items
48+
items = [item async for item in service.iterate()]
49+
assert any(item.id == async_created_item.id for item in items)
50+
51+
52+
async def test_filter(async_mpt_vendor, item_id):
53+
service = async_mpt_vendor.catalog.items
54+
items = [item async for item in service.filter(RQLQuery(id=item_id)).iterate()]
55+
assert len(items) == 1
56+
assert items[0].id == item_id
57+
58+
59+
async def test_not_found(async_mpt_vendor):
60+
service = async_mpt_vendor.catalog.items
61+
with pytest.raises(MPTAPIError):
62+
await service.get("ITM-000-000")
63+
64+
65+
async def test_delete_item(async_mpt_vendor, async_created_item):
66+
service = async_mpt_vendor.catalog.items
67+
await service.delete(async_created_item.id)
68+
with pytest.raises(MPTAPIError):
69+
await service.get(async_created_item.id)
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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_item(logger, mpt_vendor, item_data):
11+
service = mpt_vendor.catalog.items
12+
item = service.create(item_data)
13+
yield item
14+
try:
15+
service.delete(item.id)
16+
except MPTAPIError as error:
17+
print(f"TEARDOWN - Unable to delete item {item.id}: {error.title}") # noqa: WPS421
18+
19+
20+
def test_create_item(created_item):
21+
assert created_item.name == "e2e - please delete"
22+
23+
24+
def test_update_item(mpt_vendor, created_item):
25+
service = mpt_vendor.catalog.items
26+
update_data = {"name": "please delete me"}
27+
item = service.update(created_item.id, update_data)
28+
assert item.name == "please delete me"
29+
30+
31+
@pytest.mark.skip(reason="Leaves test items in the catalog")
32+
def test_review_and_publish_item(mpt_vendor, mpt_ops, created_item):
33+
item = mpt_vendor.catalog.items.review(created_item.id)
34+
assert item.status == "Pending"
35+
36+
item = mpt_ops.catalog.items.publish(created_item.id)
37+
assert item.status == "Published"
38+
39+
40+
def test_get_item(mpt_vendor, item_id):
41+
service = mpt_vendor.catalog.items
42+
item = service.get(item_id)
43+
assert item.id == item_id
44+
45+
46+
def test_iterate_items(mpt_vendor, created_item):
47+
service = mpt_vendor.catalog.items
48+
items = list(service.iterate())
49+
assert any(item.id == created_item.id for item in items)
50+
51+
52+
def test_filter(mpt_vendor, item_id):
53+
service = mpt_vendor.catalog.items
54+
items = list(service.filter(RQLQuery(id=item_id)).iterate())
55+
assert len(items) == 1
56+
assert items[0].id == item_id
57+
58+
59+
def test_not_found(mpt_vendor):
60+
service = mpt_vendor.catalog.items
61+
with pytest.raises(MPTAPIError):
62+
service.get("ITM-000-000")
63+
64+
65+
def test_delete_item(mpt_vendor, created_item):
66+
service = mpt_vendor.catalog.items
67+
service.delete(created_item.id)
68+
with pytest.raises(MPTAPIError):
69+
service.get(created_item.id)

tests/e2e/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import os
44
import pathlib
5+
import uuid
56

67
import pytest
78
from reportportal_client import RPLogger
@@ -111,6 +112,11 @@ def invalid_account_id():
111112
return "ACC-0000-0000"
112113

113114

115+
@pytest.fixture
116+
def short_uuid():
117+
return uuid.uuid4().hex[:8]
118+
119+
114120
@pytest.fixture
115121
def invalid_buyer_id():
116122
return "BUY-0000-0000"

0 commit comments

Comments
 (0)