Skip to content

Commit 8da8b0b

Browse files
committed
MPT-13323 Add catalog products terms
1 parent 6897e08 commit 8da8b0b

5 files changed

Lines changed: 104 additions & 0 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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+
from mpt_api_client.resources.catalog.mixins import AsyncPublishableMixin, PublishableMixin
10+
11+
12+
class Term(Model):
13+
"""Term resource."""
14+
15+
16+
class TermServiceConfig:
17+
"""Term service configuration."""
18+
19+
_endpoint = "/public/v1/catalog/products/{product_id}/terms"
20+
_model_class = Term
21+
_collection_key = "data"
22+
23+
24+
class TermService(
25+
CreateMixin[Term],
26+
DeleteMixin,
27+
UpdateMixin[Term],
28+
PublishableMixin[Term],
29+
Service[Term],
30+
TermServiceConfig,
31+
):
32+
"""Term service."""
33+
34+
35+
class AsyncTermService(
36+
AsyncCreateMixin[Term],
37+
AsyncDeleteMixin,
38+
AsyncUpdateMixin[Term],
39+
AsyncPublishableMixin[Term],
40+
AsyncService[Term],
41+
TermServiceConfig,
42+
):
43+
"""Async Term service."""

mpt_api_client/resources/catalog/products.py

Lines changed: 14 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.product_terms import (
15+
AsyncTermService,
16+
TermService,
17+
)
1418
from mpt_api_client.resources.catalog.products_documents import (
1519
AsyncDocumentService,
1620
DocumentService,
@@ -95,6 +99,10 @@ def templates(self, product_id: str) -> TemplatesService:
9599
http_client=self.http_client, endpoint_params={"product_id": product_id}
96100
)
97101

102+
def terms(self, product_id: str) -> TermService:
103+
"""Return terms service."""
104+
return TermService(http_client=self.http_client, endpoint_params={"product_id": product_id})
105+
98106

99107
class AsyncProductsService(
100108
AsyncCreateMixin[Product],
@@ -141,3 +149,9 @@ def templates(self, product_id: str) -> AsyncTemplatesService:
141149
return AsyncTemplatesService(
142150
http_client=self.http_client, endpoint_params={"product_id": product_id}
143151
)
152+
153+
def terms(self, product_id: str) -> AsyncTermService:
154+
"""Return terms service."""
155+
return AsyncTermService(
156+
http_client=self.http_client, endpoint_params={"product_id": product_id}
157+
)

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ per-file-ignores =
4141
mpt_api_client/resources/catalog/products_media.py: WPS215
4242
mpt_api_client/resources/catalog/products_documents.py: WPS215
4343
mpt_api_client/resources/catalog/products_templates.py: WPS215
44+
mpt_api_client/resources/catalog/product_terms.py: WPS215
4445
tests/http/test_async_service.py: WPS204 WPS202
4546
tests/http/test_service.py: WPS204 WPS202
4647

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import pytest
2+
3+
from mpt_api_client.resources.catalog.product_terms import (
4+
AsyncTermService,
5+
TermService,
6+
)
7+
8+
9+
@pytest.fixture
10+
def term_service(http_client):
11+
return TermService(http_client=http_client, endpoint_params={"product_id": "PRD-001"})
12+
13+
14+
@pytest.fixture
15+
def async_term_service(async_http_client):
16+
return AsyncTermService(
17+
http_client=async_http_client, endpoint_params={"product_id": "PRD-001"}
18+
)
19+
20+
21+
def test_endpoint(term_service):
22+
assert term_service.endpoint == "/public/v1/catalog/products/PRD-001/terms"
23+
24+
25+
def test_async_endpoint(async_term_service):
26+
assert async_term_service.endpoint == "/public/v1/catalog/products/PRD-001/terms"
27+
28+
29+
@pytest.mark.parametrize(
30+
"method", ["get", "create", "delete", "update", "review", "publish", "unpublish"]
31+
)
32+
def test_methods_present(term_service, method):
33+
assert hasattr(term_service, method)
34+
35+
36+
@pytest.mark.parametrize(
37+
"method", ["get", "create", "delete", "update", "review", "publish", "unpublish"]
38+
)
39+
def test_async_methods_present(async_term_service, method):
40+
assert hasattr(async_term_service, method)

tests/resources/catalog/test_products.py

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

3+
from mpt_api_client.resources.catalog.product_terms import (
4+
AsyncTermService,
5+
TermService,
6+
)
37
from mpt_api_client.resources.catalog.products import AsyncProductsService, ProductsService
48
from mpt_api_client.resources.catalog.products_documents import (
59
AsyncDocumentService,
@@ -60,6 +64,7 @@ def test_async_mixins_present(async_products_service, method):
6064
("documents", DocumentService),
6165
("product_parameters", ParametersService),
6266
("templates", TemplatesService),
67+
("terms", TermService),
6368
],
6469
)
6570
def test_property_services(products_service, service_method, expected_service_class):
@@ -78,6 +83,7 @@ def test_property_services(products_service, service_method, expected_service_cl
7883
("documents", AsyncDocumentService),
7984
("product_parameters", AsyncParametersService),
8085
("templates", AsyncTemplatesService),
86+
("terms", AsyncTermService),
8187
],
8288
)
8389
def test_async_property_services(async_products_service, service_method, expected_service_class):

0 commit comments

Comments
 (0)