Skip to content

Commit afba1b2

Browse files
authored
MPT-14936 add e2e test suite for notification subscribers handling (#136)
2 parents a6a3cff + b022e54 commit afba1b2

File tree

15 files changed

+455
-222
lines changed

15 files changed

+455
-222
lines changed

e2e_config.test.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,6 @@
4242
"commerce.subscription.agreement.id": "AGR-2473-3299-1721",
4343
"commerce.subscription.id": "SUB-3678-1831-2188",
4444
"commerce.subscription.product.item.id": "ITM-1767-7355-0001",
45+
"notifications.subscriber.id": "NTS-0829-7123-7123",
4546
"notifications.message.id": "MSG-0000-6215-1019-0139"
4647
}

mpt_api_client/http/mixins.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,46 @@ async def get(self, resource_id: str, select: list[str] | str | None = None) ->
395395
return await self._resource_action(resource_id=resource_id, query_params={"select": select}) # type: ignore[attr-defined, no-any-return]
396396

397397

398+
class AsyncEnableMixin[Model: BaseModel]:
399+
"""Enable resource mixin."""
400+
401+
async def enable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
402+
"""Enable a specific resource."""
403+
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
404+
resource_id=resource_id, method="POST", action="enable", json=resource_data
405+
)
406+
407+
408+
class EnableMixin[Model: BaseModel]:
409+
"""Enable resource mixin."""
410+
411+
def enable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
412+
"""Enable a specific resource."""
413+
return self._resource_action( # type: ignore[attr-defined, no-any-return]
414+
resource_id=resource_id, method="POST", action="enable", json=resource_data
415+
)
416+
417+
418+
class AsyncDisableMixin[Model: BaseModel]:
419+
"""Disable resource mixin."""
420+
421+
async def disable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
422+
"""Disable a specific resource."""
423+
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
424+
resource_id=resource_id, method="POST", action="disable", json=resource_data
425+
)
426+
427+
428+
class DisableMixin[Model: BaseModel]:
429+
"""Disable resource mixin."""
430+
431+
def disable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
432+
"""Disable a specific resource ."""
433+
return self._resource_action( # type: ignore[attr-defined, no-any-return]
434+
resource_id=resource_id, method="POST", action="disable", json=resource_data
435+
)
436+
437+
398438
class QueryableMixin:
399439
"""Mixin providing query functionality for filtering, ordering, and selecting fields."""
400440

mpt_api_client/resources/accounts/account.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22
from mpt_api_client.http.mixins import (
33
AsyncCollectionMixin,
44
AsyncCreateFileMixin,
5+
AsyncDisableMixin,
6+
AsyncEnableMixin,
57
AsyncGetMixin,
68
AsyncUpdateFileMixin,
79
CollectionMixin,
810
CreateFileMixin,
11+
DisableMixin,
12+
EnableMixin,
913
GetMixin,
1014
UpdateFileMixin,
1115
)
@@ -17,9 +21,7 @@
1721
from mpt_api_client.resources.accounts.mixins import (
1822
ActivatableMixin,
1923
AsyncActivatableMixin,
20-
AsyncEnablableMixin,
2124
AsyncValidateMixin,
22-
EnablableMixin,
2325
ValidateMixin,
2426
)
2527

@@ -42,7 +44,8 @@ class AccountsService(
4244
CreateFileMixin[Account],
4345
UpdateFileMixin[Account],
4446
ActivatableMixin[Account],
45-
EnablableMixin[Account],
47+
EnableMixin[Account],
48+
DisableMixin[Account],
4649
ValidateMixin[Account],
4750
GetMixin[Account],
4851
CollectionMixin[Account],
@@ -62,7 +65,8 @@ class AsyncAccountsService(
6265
AsyncCreateFileMixin[Account],
6366
AsyncUpdateFileMixin[Account],
6467
AsyncActivatableMixin[Account],
65-
AsyncEnablableMixin[Account],
68+
AsyncEnableMixin[Account],
69+
AsyncDisableMixin[Account],
6670
AsyncValidateMixin[Account],
6771
AsyncGetMixin[Account],
6872
AsyncCollectionMixin[Account],

mpt_api_client/resources/accounts/api_tokens.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
from mpt_api_client.http import AsyncService, Service
22
from mpt_api_client.http.mixins import (
33
AsyncCollectionMixin,
4+
AsyncDisableMixin,
5+
AsyncEnableMixin,
46
AsyncManagedResourceMixin,
57
CollectionMixin,
8+
DisableMixin,
9+
EnableMixin,
610
ManagedResourceMixin,
711
)
812
from mpt_api_client.models import Model
9-
from mpt_api_client.resources.accounts.mixins import AsyncEnablableMixin, EnablableMixin
1013

1114

1215
class ApiToken(Model):
@@ -23,7 +26,8 @@ class ApiTokensServiceConfig:
2326

2427
class ApiTokensService(
2528
ManagedResourceMixin[ApiToken],
26-
EnablableMixin[ApiToken],
29+
EnableMixin[ApiToken],
30+
DisableMixin[ApiToken],
2731
CollectionMixin[ApiToken],
2832
Service[ApiToken],
2933
ApiTokensServiceConfig,
@@ -33,7 +37,8 @@ class ApiTokensService(
3337

3438
class AsyncApiTokensService(
3539
AsyncManagedResourceMixin[ApiToken],
36-
AsyncEnablableMixin[ApiToken],
40+
AsyncEnableMixin[ApiToken],
41+
AsyncDisableMixin[ApiToken],
3742
AsyncCollectionMixin[ApiToken],
3843
AsyncService[ApiToken],
3944
ApiTokensServiceConfig,

mpt_api_client/resources/accounts/buyers.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
AsyncCollectionMixin,
44
AsyncCreateFileMixin,
55
AsyncDeleteMixin,
6+
AsyncDisableMixin,
7+
AsyncEnableMixin,
68
AsyncGetMixin,
79
AsyncUpdateFileMixin,
810
CollectionMixin,
911
CreateFileMixin,
1012
DeleteMixin,
13+
DisableMixin,
14+
EnableMixin,
1115
GetMixin,
1216
UpdateFileMixin,
1317
)
@@ -16,9 +20,7 @@
1620
from mpt_api_client.resources.accounts.mixins import (
1721
ActivatableMixin,
1822
AsyncActivatableMixin,
19-
AsyncEnablableMixin,
2023
AsyncValidateMixin,
21-
EnablableMixin,
2224
ValidateMixin,
2325
)
2426

@@ -41,7 +43,8 @@ class BuyersService(
4143
CreateFileMixin[Buyer],
4244
UpdateFileMixin[Buyer],
4345
ActivatableMixin[Buyer],
44-
EnablableMixin[Buyer],
46+
EnableMixin[Buyer],
47+
DisableMixin[Buyer],
4548
ValidateMixin[Buyer],
4649
GetMixin[Buyer],
4750
DeleteMixin,
@@ -74,7 +77,8 @@ class AsyncBuyersService(
7477
AsyncCreateFileMixin[Buyer],
7578
AsyncUpdateFileMixin[Buyer],
7679
AsyncActivatableMixin[Buyer],
77-
AsyncEnablableMixin[Buyer],
80+
AsyncEnableMixin[Buyer],
81+
AsyncDisableMixin[Buyer],
7882
AsyncValidateMixin[Buyer],
7983
AsyncGetMixin[Buyer],
8084
AsyncDeleteMixin,

mpt_api_client/resources/accounts/licensees.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33
AsyncCollectionMixin,
44
AsyncCreateFileMixin,
55
AsyncDeleteMixin,
6+
AsyncDisableMixin,
7+
AsyncEnableMixin,
68
AsyncGetMixin,
79
AsyncUpdateFileMixin,
810
CollectionMixin,
911
CreateFileMixin,
1012
DeleteMixin,
13+
DisableMixin,
14+
EnableMixin,
1115
GetMixin,
1216
UpdateFileMixin,
1317
)
1418
from mpt_api_client.models import Model
15-
from mpt_api_client.resources.accounts.mixins import (
16-
AsyncEnablableMixin,
17-
EnablableMixin,
18-
)
1919

2020

2121
class Licensee(Model):
@@ -35,7 +35,8 @@ class LicenseesServiceConfig:
3535
class LicenseesService(
3636
CreateFileMixin[Licensee],
3737
UpdateFileMixin[Licensee],
38-
EnablableMixin[Licensee],
38+
EnableMixin[Licensee],
39+
DisableMixin[Licensee],
3940
GetMixin[Licensee],
4041
DeleteMixin,
4142
CollectionMixin[Licensee],
@@ -48,7 +49,8 @@ class LicenseesService(
4849
class AsyncLicenseesService(
4950
AsyncCreateFileMixin[Licensee],
5051
AsyncUpdateFileMixin[Licensee],
51-
AsyncEnablableMixin[Licensee],
52+
AsyncEnableMixin[Licensee],
53+
AsyncDisableMixin[Licensee],
5254
AsyncGetMixin[Licensee],
5355
AsyncDeleteMixin,
5456
AsyncCollectionMixin[Licensee],

mpt_api_client/resources/accounts/mixins.py

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -27,32 +27,6 @@ def deactivate(self, resource_id: str, resource_data: ResourceData | None = None
2727
)
2828

2929

30-
class EnablableMixin[Model]:
31-
"""Enablable mixin for enabling and disabling resources."""
32-
33-
def enable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
34-
"""Enable a resource.
35-
36-
Args:
37-
resource_id: Resource ID
38-
resource_data: Resource data will be updated
39-
"""
40-
return self._resource_action( # type: ignore[attr-defined, no-any-return]
41-
resource_id, "POST", "enable", json=resource_data
42-
)
43-
44-
def disable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
45-
"""Disable a resource.
46-
47-
Args:
48-
resource_id: Resource ID
49-
resource_data: Resource data will be updated
50-
"""
51-
return self._resource_action( # type: ignore[attr-defined, no-any-return]
52-
resource_id, "POST", "disable", json=resource_data
53-
)
54-
55-
5630
class ValidateMixin[Model]:
5731
"""Validate mixin adds the ability to validate a resource."""
5832

@@ -159,32 +133,6 @@ async def deactivate(
159133
)
160134

161135

162-
class AsyncEnablableMixin[Model]:
163-
"""Asynchronous Enablable mixin for enabling and disabling resources."""
164-
165-
async def enable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
166-
"""Enable a resource.
167-
168-
Args:
169-
resource_id: Resource ID
170-
resource_data: Resource data will be updated
171-
"""
172-
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
173-
resource_id, "POST", "enable", json=resource_data
174-
)
175-
176-
async def disable(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
177-
"""Disable a resource.
178-
179-
Args:
180-
resource_id: Resource ID
181-
resource_data: Resource data will be updated
182-
"""
183-
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
184-
resource_id, "POST", "disable", json=resource_data
185-
)
186-
187-
188136
class AsyncValidateMixin[Model]:
189137
"""Asynchronous Validate mixin adds the ability to validate a resource."""
190138

mpt_api_client/resources/notifications/subscribers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
from mpt_api_client.http import AsyncService, Service
22
from mpt_api_client.http.mixins import (
33
AsyncCollectionMixin,
4+
AsyncDisableMixin,
5+
AsyncEnableMixin,
46
AsyncManagedResourceMixin,
57
CollectionMixin,
8+
DisableMixin,
9+
EnableMixin,
610
ManagedResourceMixin,
711
)
812
from mpt_api_client.models import Model
@@ -21,6 +25,8 @@ class SubscribersServiceConfig:
2125

2226

2327
class SubscribersService(
28+
EnableMixin[Subscriber],
29+
DisableMixin[Subscriber],
2430
ManagedResourceMixin[Subscriber],
2531
CollectionMixin[Subscriber],
2632
Service[Subscriber],
@@ -30,6 +36,8 @@ class SubscribersService(
3036

3137

3238
class AsyncSubscribersService(
39+
AsyncEnableMixin[Subscriber],
40+
AsyncDisableMixin[Subscriber],
3341
AsyncManagedResourceMixin[Subscriber],
3442
AsyncCollectionMixin[Subscriber],
3543
AsyncService[Subscriber],

tests/e2e/conftest.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,8 @@ def authorization_id(e2e_config):
151151
@pytest.fixture
152152
def price_list_id(e2e_config):
153153
return e2e_config["catalog.price_list.id"]
154+
155+
156+
@pytest.fixture
157+
def user_group_id(e2e_config):
158+
return e2e_config["accounts.user_group.id"]

tests/e2e/notifications/subscribers/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)