Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 34 additions & 2 deletions mpt_api_client/resources/commerce/orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
)
from mpt_api_client.http.mixins import AsyncUpdateMixin, UpdateMixin
from mpt_api_client.models import Model, ResourceData
from mpt_api_client.resources.commerce.orders_subscription import (
AsyncOrderSubscriptionsService,
OrderSubscriptionsService,
)


class Order(Model):
Expand All @@ -22,7 +26,7 @@ class OrdersServiceConfig:
_collection_key = "data"


class OrdersService( # noqa: WPS215
class OrdersService( # noqa: WPS215 WPS214
CreateMixin[Order],
DeleteMixin,
UpdateMixin[Order],
Expand Down Expand Up @@ -97,8 +101,22 @@ def template(self, resource_id: str) -> str:
response = self._resource_do_request(resource_id, "GET", "template")
return response.text

def subscriptions(self, order_id: str) -> OrderSubscriptionsService:
"""Get the subscription service for the given Order id.

Args:
order_id: Order ID.

Returns:
Order Subscription service.
"""
return OrderSubscriptionsService(
http_client=self.http_client,
endpoint_params={"order_id": order_id},
)


class AsyncOrdersService( # noqa: WPS215
class AsyncOrdersService( # noqa: WPS215 WPS214
AsyncCreateMixin[Order],
AsyncDeleteMixin,
AsyncUpdateMixin[Order],
Expand Down Expand Up @@ -187,3 +205,17 @@ async def template(self, resource_id: str) -> str:
"""
response = await self._resource_do_request(resource_id, "GET", "template")
return response.text

def subscriptions(self, order_id: str) -> AsyncOrderSubscriptionsService:
"""Get the subscription service for the given Order id.

Args:
order_id: Order ID.

Returns:
Order Subscription service.
"""
return AsyncOrderSubscriptionsService(
http_client=self.http_client,
endpoint_params={"order_id": order_id},
)
40 changes: 40 additions & 0 deletions mpt_api_client/resources/commerce/orders_subscription.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from mpt_api_client.http import AsyncService, CreateMixin, DeleteMixin, Service
from mpt_api_client.http.mixins import (
AsyncCreateMixin,
AsyncDeleteMixin,
AsyncUpdateMixin,
UpdateMixin,
)
from mpt_api_client.models import Model


class OrderSubscription(Model):
"""Order Subscription resource."""


class OrderSubscriptionsServiceConfig:
"""Orders service config."""

_endpoint = "/public/v1/commerce/orders/{order_id}/subscriptions"
_model_class = OrderSubscription
_collection_key = "data"


class OrderSubscriptionsService( # noqa: WPS215
CreateMixin[OrderSubscription],
DeleteMixin,
UpdateMixin[OrderSubscription],
Service[OrderSubscription],
OrderSubscriptionsServiceConfig,
):
"""Orders Subscription service."""


class AsyncOrderSubscriptionsService( # noqa: WPS215
AsyncCreateMixin[OrderSubscription],
AsyncDeleteMixin,
AsyncUpdateMixin[OrderSubscription],
AsyncService[OrderSubscription],
OrderSubscriptionsServiceConfig,
):
"""Async Orders Subscription service."""
30 changes: 30 additions & 0 deletions tests/resources/commerce/test_order_subcription.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import pytest

from mpt_api_client.resources.commerce.orders_subscription import (
AsyncOrderSubscriptionsService,
OrderSubscriptionsService,
)


@pytest.fixture
def subscription_service(http_client):
return OrderSubscriptionsService(
http_client=http_client, endpoint_params={"order_id": "ORD-123"}
)


@pytest.fixture
def async_subscription_service(async_http_client):
return AsyncOrderSubscriptionsService(
http_client=async_http_client, endpoint_params={"order_id": "ORD-123"}
)


@pytest.mark.parametrize("method", ["get", "create", "delete", "update"])
def test_mixins_present(subscription_service, method):
assert hasattr(subscription_service, method)


@pytest.mark.parametrize("method", ["get", "create", "delete", "update"])
def test_async_mixins_present(async_subscription_service, method):
assert hasattr(async_subscription_service, method)
22 changes: 22 additions & 0 deletions tests/resources/commerce/test_orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
import respx

from mpt_api_client.resources.commerce.orders import AsyncOrdersService, Order, OrdersService
from mpt_api_client.resources.commerce.orders_subscription import (
AsyncOrderSubscriptionsService,
OrderSubscriptionsService,
)


@pytest.fixture
Expand Down Expand Up @@ -221,6 +225,24 @@ async def test_async_template(async_orders_service):
assert template == template_content


def test_subscription_service(http_client):
orders_service = OrdersService(http_client=http_client)

subscriptions = orders_service.subscriptions("ORD-123")

assert isinstance(subscriptions, OrderSubscriptionsService)
assert subscriptions.endpoint_params == {"order_id": "ORD-123"}


def test_async_subscription_service(async_http_client):
orders_service = AsyncOrdersService(http_client=async_http_client)

subscriptions = orders_service.subscriptions("ORD-123")

assert isinstance(subscriptions, AsyncOrderSubscriptionsService)
assert subscriptions.endpoint_params == {"order_id": "ORD-123"}


@pytest.mark.parametrize("method", ["get", "create", "update", "delete"])
def test_mixins_present(orders_service, method):
assert hasattr(orders_service, method)
Expand Down