Skip to content

Commit 4981fb8

Browse files
authored
MPT-12846 Add Order subscriptions (#27)
2 parents 52207f4 + 3077990 commit 4981fb8

4 files changed

Lines changed: 126 additions & 2 deletions

File tree

mpt_api_client/resources/commerce/orders.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
)
99
from mpt_api_client.http.mixins import AsyncUpdateMixin, UpdateMixin
1010
from mpt_api_client.models import Model, ResourceData
11+
from mpt_api_client.resources.commerce.orders_subscription import (
12+
AsyncOrderSubscriptionsService,
13+
OrderSubscriptionsService,
14+
)
1115

1216

1317
class Order(Model):
@@ -22,7 +26,7 @@ class OrdersServiceConfig:
2226
_collection_key = "data"
2327

2428

25-
class OrdersService( # noqa: WPS215
29+
class OrdersService( # noqa: WPS215 WPS214
2630
CreateMixin[Order],
2731
DeleteMixin,
2832
UpdateMixin[Order],
@@ -97,8 +101,22 @@ def template(self, resource_id: str) -> str:
97101
response = self._resource_do_request(resource_id, "GET", "template")
98102
return response.text
99103

104+
def subscriptions(self, order_id: str) -> OrderSubscriptionsService:
105+
"""Get the subscription service for the given Order id.
106+
107+
Args:
108+
order_id: Order ID.
109+
110+
Returns:
111+
Order Subscription service.
112+
"""
113+
return OrderSubscriptionsService(
114+
http_client=self.http_client,
115+
endpoint_params={"order_id": order_id},
116+
)
117+
100118

101-
class AsyncOrdersService( # noqa: WPS215
119+
class AsyncOrdersService( # noqa: WPS215 WPS214
102120
AsyncCreateMixin[Order],
103121
AsyncDeleteMixin,
104122
AsyncUpdateMixin[Order],
@@ -187,3 +205,17 @@ async def template(self, resource_id: str) -> str:
187205
"""
188206
response = await self._resource_do_request(resource_id, "GET", "template")
189207
return response.text
208+
209+
def subscriptions(self, order_id: str) -> AsyncOrderSubscriptionsService:
210+
"""Get the subscription service for the given Order id.
211+
212+
Args:
213+
order_id: Order ID.
214+
215+
Returns:
216+
Order Subscription service.
217+
"""
218+
return AsyncOrderSubscriptionsService(
219+
http_client=self.http_client,
220+
endpoint_params={"order_id": order_id},
221+
)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from mpt_api_client.http import AsyncService, CreateMixin, DeleteMixin, Service
2+
from mpt_api_client.http.mixins import (
3+
AsyncCreateMixin,
4+
AsyncDeleteMixin,
5+
AsyncUpdateMixin,
6+
UpdateMixin,
7+
)
8+
from mpt_api_client.models import Model
9+
10+
11+
class OrderSubscription(Model):
12+
"""Order Subscription resource."""
13+
14+
15+
class OrderSubscriptionsServiceConfig:
16+
"""Orders service config."""
17+
18+
_endpoint = "/public/v1/commerce/orders/{order_id}/subscriptions"
19+
_model_class = OrderSubscription
20+
_collection_key = "data"
21+
22+
23+
class OrderSubscriptionsService( # noqa: WPS215
24+
CreateMixin[OrderSubscription],
25+
DeleteMixin,
26+
UpdateMixin[OrderSubscription],
27+
Service[OrderSubscription],
28+
OrderSubscriptionsServiceConfig,
29+
):
30+
"""Orders Subscription service."""
31+
32+
33+
class AsyncOrderSubscriptionsService( # noqa: WPS215
34+
AsyncCreateMixin[OrderSubscription],
35+
AsyncDeleteMixin,
36+
AsyncUpdateMixin[OrderSubscription],
37+
AsyncService[OrderSubscription],
38+
OrderSubscriptionsServiceConfig,
39+
):
40+
"""Async Orders Subscription service."""
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import pytest
2+
3+
from mpt_api_client.resources.commerce.orders_subscription import (
4+
AsyncOrderSubscriptionsService,
5+
OrderSubscriptionsService,
6+
)
7+
8+
9+
@pytest.fixture
10+
def subscription_service(http_client):
11+
return OrderSubscriptionsService(
12+
http_client=http_client, endpoint_params={"order_id": "ORD-123"}
13+
)
14+
15+
16+
@pytest.fixture
17+
def async_subscription_service(async_http_client):
18+
return AsyncOrderSubscriptionsService(
19+
http_client=async_http_client, endpoint_params={"order_id": "ORD-123"}
20+
)
21+
22+
23+
@pytest.mark.parametrize("method", ["get", "create", "delete", "update"])
24+
def test_mixins_present(subscription_service, method):
25+
assert hasattr(subscription_service, method)
26+
27+
28+
@pytest.mark.parametrize("method", ["get", "create", "delete", "update"])
29+
def test_async_mixins_present(async_subscription_service, method):
30+
assert hasattr(async_subscription_service, method)

tests/resources/commerce/test_orders.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
import respx
44

55
from mpt_api_client.resources.commerce.orders import AsyncOrdersService, Order, OrdersService
6+
from mpt_api_client.resources.commerce.orders_subscription import (
7+
AsyncOrderSubscriptionsService,
8+
OrderSubscriptionsService,
9+
)
610

711

812
@pytest.fixture
@@ -221,6 +225,24 @@ async def test_async_template(async_orders_service):
221225
assert template == template_content
222226

223227

228+
def test_subscription_service(http_client):
229+
orders_service = OrdersService(http_client=http_client)
230+
231+
subscriptions = orders_service.subscriptions("ORD-123")
232+
233+
assert isinstance(subscriptions, OrderSubscriptionsService)
234+
assert subscriptions.endpoint_params == {"order_id": "ORD-123"}
235+
236+
237+
def test_async_subscription_service(async_http_client):
238+
orders_service = AsyncOrdersService(http_client=async_http_client)
239+
240+
subscriptions = orders_service.subscriptions("ORD-123")
241+
242+
assert isinstance(subscriptions, AsyncOrderSubscriptionsService)
243+
assert subscriptions.endpoint_params == {"order_id": "ORD-123"}
244+
245+
224246
@pytest.mark.parametrize("method", ["get", "create", "update", "delete"])
225247
def test_mixins_present(orders_service, method):
226248
assert hasattr(orders_service, method)

0 commit comments

Comments
 (0)