Skip to content

Commit c24da6a

Browse files
committed
feat(tests): add e2e test suite for notification subscribers handling
1 parent 9976f92 commit c24da6a

8 files changed

Lines changed: 197 additions & 11 deletions

File tree

e2e_config.test.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
"catalog.product.template.id": "TPL-7255-3950-0001",
2121
"catalog.product.terms.id": "TCS-7255-3950-0001",
2222
"catalog.product.terms.variant.id": "TCV-7255-3950-0001-0001",
23-
"catalog.unit.id": "UNT-1229"
23+
"catalog.unit.id": "UNT-1229",
24+
"notifications.subscriber.id": "NTS-0829-7123-7123"
2425
}

tests/e2e/accounts/conftest.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ def currencies():
1818
return ["USD", "EUR"]
1919

2020

21-
@pytest.fixture
22-
def account_id(e2e_config):
23-
return e2e_config["accounts.account.id"]
24-
25-
2621
@pytest.fixture
2722
def seller_id(e2e_config):
2823
return e2e_config["accounts.seller.id"]
@@ -33,11 +28,6 @@ def buyer_id(e2e_config):
3328
return e2e_config["accounts.buyer.id"]
3429

3530

36-
@pytest.fixture
37-
def user_group_id(e2e_config):
38-
return e2e_config["accounts.user_group.id"]
39-
40-
4131
@pytest.fixture
4232
def module_id(e2e_config):
4333
return e2e_config["accounts.module.id"]

tests/e2e/conftest.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,13 @@ def logo_fd():
116116
@pytest.fixture
117117
def user_id(e2e_config):
118118
return e2e_config["accounts.user.id"]
119+
120+
121+
@pytest.fixture
122+
def user_group_id(e2e_config):
123+
return e2e_config["accounts.user_group.id"]
124+
125+
126+
@pytest.fixture
127+
def account_id(e2e_config):
128+
return e2e_config["accounts.account.id"]

tests/e2e/notifications/__init__.py

Whitespace-only changes.

tests/e2e/notifications/subscribers/__init__.py

Whitespace-only changes.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import pytest
2+
3+
4+
@pytest.fixture
5+
def subscriber_id(e2e_config):
6+
return e2e_config.get("notifications.subscriber.id")
7+
8+
9+
@pytest.fixture
10+
def invalid_subscriber_id():
11+
return "NTS-0000-0000-0000"
12+
13+
14+
@pytest.fixture
15+
def recipients_factory(user_id, user_group_id):
16+
def _recipients( # noqa: WPS430
17+
users: list[str] | None = None,
18+
user_groups: list[str] | None = None,
19+
) -> dict[str, list[str]]:
20+
return {
21+
"users": users or [{"id": user_id}],
22+
"userGroups": user_groups or [{"id": user_group_id}],
23+
}
24+
25+
return _recipients
26+
27+
28+
@pytest.fixture
29+
def subscriber_factory(recipients_factory):
30+
def _subscriber( # noqa: WPS430
31+
recipients: dict[str, list[str]] | None = None,
32+
note: str = "Test note",
33+
) -> dict:
34+
return {
35+
"recipients": recipients or recipients_factory(),
36+
"note": note,
37+
}
38+
39+
return _subscriber
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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+
async def test_get_subscriber_by_id(async_mpt_client, subscriber_id):
10+
result = await async_mpt_client.notifications.subscribers.get(subscriber_id)
11+
12+
assert result is not None
13+
14+
15+
async def test_list_subscribers(async_mpt_client):
16+
limit = 10
17+
18+
result = await async_mpt_client.notifications.subscribers.fetch_page(limit=limit)
19+
20+
assert len(result) > 0
21+
22+
23+
async def test_get_subscriber_by_id_not_found(async_mpt_client, invalid_subscriber_id):
24+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
25+
await async_mpt_client.notifications.subscribers.get(invalid_subscriber_id)
26+
27+
28+
async def test_filter_subscribers(async_mpt_client, subscriber_id):
29+
select_fields = ["-config"]
30+
async_filtered_subscribers = (
31+
async_mpt_client.notifications.subscribers.filter(RQLQuery(id=subscriber_id))
32+
.filter(RQLQuery(status="enabled"))
33+
.select(*select_fields)
34+
)
35+
36+
result = [
37+
filtered_subscriber async for filtered_subscriber in async_filtered_subscribers.iterate()
38+
]
39+
40+
assert len(result) >= 0
41+
42+
43+
async def test_update_subscriber_not_found(
44+
async_mpt_client, subscriber_factory, invalid_subscriber_id, user_group_id, recipients_factory
45+
):
46+
updated_subscriber_data = subscriber_factory(recipients=recipients_factory())
47+
48+
with pytest.raises(MPTAPIError):
49+
await async_mpt_client.notifications.subscribers.update(
50+
invalid_subscriber_id, updated_subscriber_data
51+
)
52+
53+
54+
async def test_disable_subscriber(async_mpt_client, subscriber_id):
55+
result = await async_mpt_client.notifications.subscribers.disable(subscriber_id)
56+
57+
assert result is not None
58+
assert result.status == "disabled"
59+
60+
61+
async def test_disable_subscriber_not_found(async_mpt_client, invalid_subscriber_id):
62+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
63+
await async_mpt_client.notifications.subscribers.disable(invalid_subscriber_id)
64+
65+
66+
async def test_enable_subscriber(async_mpt_client, subscriber_id):
67+
result = await async_mpt_client.notifications.subscribers.enable(subscriber_id)
68+
69+
assert result is not None
70+
assert result.status == "enabled"
71+
72+
73+
async def test_enable_subscriber_not_found(async_mpt_client, invalid_subscriber_id):
74+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
75+
await async_mpt_client.notifications.subscribers.enable(invalid_subscriber_id)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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+
def test_get_subscriber_by_id(mpt_client, subscriber_id):
10+
result = mpt_client.notifications.subscribers.get(subscriber_id)
11+
12+
assert result is not None
13+
14+
15+
def test_list_subscribers(mpt_client):
16+
limit = 10
17+
18+
result = mpt_client.notifications.subscribers.fetch_page(limit=limit)
19+
20+
assert len(result) > 0
21+
22+
23+
def test_get_subscriber_by_id_not_found(mpt_client, invalid_subscriber_id):
24+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
25+
mpt_client.notifications.subscribers.get(invalid_subscriber_id)
26+
27+
28+
def test_filter_subscribers(mpt_client, subscriber_id):
29+
select_fields = ["-config"]
30+
filtered_subscribers = (
31+
mpt_client.notifications.subscribers.filter(RQLQuery(id=subscriber_id))
32+
.filter(RQLQuery(status="enabled"))
33+
.select(*select_fields)
34+
)
35+
36+
result = list(filtered_subscribers.iterate())
37+
38+
assert len(result) >= 0
39+
40+
41+
def test_update_subscriber_not_found(
42+
mpt_ops, subscriber_factory, invalid_subscriber_id, user_group_id, recipients_factory
43+
):
44+
updated_subscriber_data = subscriber_factory(recipients=recipients_factory())
45+
46+
with pytest.raises(MPTAPIError):
47+
mpt_ops.notifications.subscribers.update(invalid_subscriber_id, updated_subscriber_data)
48+
49+
50+
def test_disable_subscriber(mpt_client, subscriber_id):
51+
result = mpt_client.notifications.subscribers.disable(subscriber_id)
52+
53+
assert result is not None
54+
assert result.status == "disabled"
55+
56+
57+
def test_disable_subscriber_not_found(mpt_client, invalid_subscriber_id):
58+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
59+
mpt_client.notifications.subscribers.disable(invalid_subscriber_id)
60+
61+
62+
def test_enable_subscriber(mpt_client, subscriber_id):
63+
result = mpt_client.notifications.subscribers.enable(subscriber_id)
64+
65+
assert result is not None
66+
assert result.status == "enabled"
67+
68+
69+
def test_enable_subscriber_not_found(mpt_client, invalid_subscriber_id):
70+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
71+
mpt_client.notifications.subscribers.enable(invalid_subscriber_id)

0 commit comments

Comments
 (0)