Skip to content

Commit 0b8fd8c

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

File tree

8 files changed

+193
-11
lines changed

8 files changed

+193
-11
lines changed

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 | None = None,
18+
user_groups: list | None = None,
19+
) -> dict:
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: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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 = async_mpt_client.notifications.subscribers.filter(
31+
RQLQuery(id=subscriber_id)
32+
).select(*select_fields)
33+
34+
result = [
35+
filtered_subscriber async for filtered_subscriber in async_filtered_subscribers.iterate()
36+
]
37+
38+
assert len(result) > 0
39+
40+
41+
async def test_update_subscriber_not_found(
42+
async_mpt_client, 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+
await async_mpt_client.notifications.subscribers.update(
48+
invalid_subscriber_id, updated_subscriber_data
49+
)
50+
51+
52+
async def test_disable_subscriber(async_mpt_client, subscriber_id):
53+
result = await async_mpt_client.notifications.subscribers.disable(subscriber_id)
54+
55+
assert result is not None
56+
assert result.status == "disabled"
57+
58+
59+
async def test_disable_subscriber_not_found(async_mpt_client, invalid_subscriber_id):
60+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
61+
await async_mpt_client.notifications.subscribers.disable(invalid_subscriber_id)
62+
63+
64+
async def test_enable_subscriber(async_mpt_client, subscriber_id):
65+
result = await async_mpt_client.notifications.subscribers.enable(subscriber_id)
66+
67+
assert result is not None
68+
assert result.status == "enabled"
69+
70+
71+
async def test_enable_subscriber_not_found(async_mpt_client, invalid_subscriber_id):
72+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
73+
await async_mpt_client.notifications.subscribers.enable(invalid_subscriber_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+
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_ops, subscriber_id):
29+
select_fields = ["-config"]
30+
filtered_subscribers = mpt_ops.notifications.subscribers.filter(
31+
RQLQuery(id=subscriber_id)
32+
).select(*select_fields)
33+
34+
result = list(filtered_subscribers.iterate())
35+
36+
assert len(result) > 0
37+
38+
39+
def test_update_subscriber_not_found(
40+
mpt_ops, subscriber_factory, invalid_subscriber_id, user_group_id, recipients_factory
41+
):
42+
updated_subscriber_data = subscriber_factory(recipients=recipients_factory())
43+
44+
with pytest.raises(MPTAPIError):
45+
mpt_ops.notifications.subscribers.update(invalid_subscriber_id, updated_subscriber_data)
46+
47+
48+
def test_disable_subscriber(mpt_client, subscriber_id):
49+
result = mpt_client.notifications.subscribers.disable(subscriber_id)
50+
51+
assert result is not None
52+
assert result.status == "disabled"
53+
54+
55+
def test_disable_subscriber_not_found(mpt_client, invalid_subscriber_id):
56+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
57+
mpt_client.notifications.subscribers.disable(invalid_subscriber_id)
58+
59+
60+
def test_enable_subscriber(mpt_client, subscriber_id):
61+
result = mpt_client.notifications.subscribers.enable(subscriber_id)
62+
63+
assert result is not None
64+
assert result.status == "enabled"
65+
66+
67+
def test_enable_subscriber_not_found(mpt_client, invalid_subscriber_id):
68+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
69+
mpt_client.notifications.subscribers.enable(invalid_subscriber_id)

0 commit comments

Comments
 (0)