Skip to content

Commit 4e9dbac

Browse files
authored
MPT-13317 Add catalog products parameters groups (#30)
2 parents 518843b + 8fb53ab commit 4e9dbac

File tree

6 files changed

+128
-0
lines changed

6 files changed

+128
-0
lines changed

mpt_api_client/resources/catalog/products.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
AsyncPublishableMixin,
1212
PublishableMixin,
1313
)
14+
from mpt_api_client.resources.catalog.products_parameter_groups import (
15+
AsyncParameterGroupsService,
16+
ParameterGroupsService,
17+
)
1418

1519

1620
class Product(Model):
@@ -35,6 +39,12 @@ class ProductsService(
3539
):
3640
"""Products service."""
3741

42+
def parameter_groups(self, product_id: str) -> ParameterGroupsService:
43+
"""Return parameter_groups service."""
44+
return ParameterGroupsService(
45+
http_client=self.http_client, endpoint_params={"product_id": product_id}
46+
)
47+
3848

3949
class AsyncProductsService(
4050
AsyncCreateMixin[Product],
@@ -45,3 +55,9 @@ class AsyncProductsService(
4555
ProductsServiceConfig,
4656
):
4757
"""Products service."""
58+
59+
def parameter_groups(self, product_id: str) -> AsyncParameterGroupsService:
60+
"""Return parameter_groups service."""
61+
return AsyncParameterGroupsService(
62+
http_client=self.http_client, endpoint_params={"product_id": product_id}
63+
)
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 ParameterGroup(Model):
12+
"""Parameter Group resource."""
13+
14+
15+
class ParameterGroupsServiceConfig:
16+
"""Parameter Groups service configuration."""
17+
18+
_endpoint = "/public/v1/catalog/products/{product_id}/parameter-groups"
19+
_model_class = ParameterGroup
20+
_collection_key = "data"
21+
22+
23+
class ParameterGroupsService(
24+
CreateMixin[ParameterGroup],
25+
DeleteMixin,
26+
UpdateMixin[ParameterGroup],
27+
Service[ParameterGroup],
28+
ParameterGroupsServiceConfig,
29+
):
30+
"""Parameter Groups service."""
31+
32+
33+
class AsyncParameterGroupsService(
34+
AsyncCreateMixin[ParameterGroup],
35+
AsyncDeleteMixin,
36+
AsyncUpdateMixin[ParameterGroup],
37+
AsyncService[ParameterGroup],
38+
ParameterGroupsServiceConfig,
39+
):
40+
"""Parameter Groups service."""

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ extend-ignore =
3434
per-file-ignores =
3535
mpt_api_client/rql/query_builder.py: WPS110 WPS115 WPS210 WPS214
3636
mpt_api_client/resources/catalog/products.py: WPS215
37+
mpt_api_client/resources/catalog/products_parameter_groups.py: WPS215
3738
tests/http/test_async_service.py: WPS204 WPS202
3839
tests/http/test_service.py: WPS204 WPS202
3940

tests/resources/catalog/test_products.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import pytest
22

33
from mpt_api_client.resources.catalog.products import AsyncProductsService, ProductsService
4+
from mpt_api_client.resources.catalog.products_parameter_groups import (
5+
AsyncParameterGroupsService,
6+
ParameterGroupsService,
7+
)
48

59

610
@pytest.fixture
@@ -25,3 +29,17 @@ def test_mixins_present(products_service, method):
2529
)
2630
def test_async_mixins_present(async_products_service, method):
2731
assert hasattr(async_products_service, method)
32+
33+
34+
def test_parameters_groups_service(products_service):
35+
parameters_groups_service = products_service.parameter_groups("PRD-001")
36+
37+
assert isinstance(parameters_groups_service, ParameterGroupsService)
38+
assert parameters_groups_service.endpoint_params == {"product_id": "PRD-001"}
39+
40+
41+
def test_async_parameters_groups_service(async_products_service):
42+
parameters_groups_service = async_products_service.parameter_groups("PRD-001")
43+
44+
assert isinstance(parameters_groups_service, AsyncParameterGroupsService)
45+
assert parameters_groups_service.endpoint_params == {"product_id": "PRD-001"}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from typing import Any
2+
3+
import pytest
4+
5+
from mpt_api_client.resources.catalog.products_parameter_groups import (
6+
AsyncParameterGroupsService,
7+
ParameterGroupsService,
8+
)
9+
10+
11+
@pytest.fixture
12+
def parameter_groups_service(http_client: Any) -> ParameterGroupsService:
13+
return ParameterGroupsService(
14+
http_client=http_client, endpoint_params={"product_id": "PRD-001"}
15+
)
16+
17+
18+
@pytest.fixture
19+
def async_parameter_groups_service(async_http_client: Any) -> AsyncParameterGroupsService:
20+
return AsyncParameterGroupsService(
21+
http_client=async_http_client, endpoint_params={"product_id": "PRD-001"}
22+
)
23+
24+
25+
def test_endpoint(parameter_groups_service):
26+
assert (
27+
parameter_groups_service.endpoint == "/public/v1/catalog/products/PRD-001/parameter-groups"
28+
)
29+
30+
31+
def test_async_endpoint(async_parameter_groups_service):
32+
assert (
33+
async_parameter_groups_service.endpoint
34+
== "/public/v1/catalog/products/PRD-001/parameter-groups"
35+
)
36+
37+
38+
@pytest.mark.parametrize("method", ["get", "create", "delete", "update"])
39+
def test_methods_present(parameter_groups_service, method):
40+
assert hasattr(parameter_groups_service, method)
41+
42+
43+
@pytest.mark.parametrize("method", ["get", "create", "delete", "update"])
44+
def test_async_methods_present(async_parameter_groups_service, method):
45+
assert hasattr(async_parameter_groups_service, method)

tests/resources/commerce/test_order_subcription.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,11 @@ def test_mixins_present(subscription_service, method):
2828
@pytest.mark.parametrize("method", ["get", "create", "delete", "update"])
2929
def test_async_mixins_present(async_subscription_service, method):
3030
assert hasattr(async_subscription_service, method)
31+
32+
33+
def test_endpoint(subscription_service):
34+
assert subscription_service.endpoint == "/public/v1/commerce/orders/ORD-123/subscriptions"
35+
36+
37+
def test_async_endpoint(async_subscription_service):
38+
assert async_subscription_service.endpoint == "/public/v1/commerce/orders/ORD-123/subscriptions"

0 commit comments

Comments
 (0)