Skip to content

Commit ec783c1

Browse files
authored
Merge pull request #129 from labd/fix/custom-object-test
Adds missing routes to the custom objects test
2 parents 4b92200 + bf4481b commit ec783c1

File tree

3 files changed

+68
-8
lines changed

3 files changed

+68
-8
lines changed

src/commercetools/testing/abstract.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ def delete_by_key(self, key):
118118
if obj["key"] == key:
119119
return self.objects.pop(obj_id)
120120

121+
def delete_by_container_and_key(self, container, key):
122+
for obj_id, obj in self.objects.items():
123+
if obj["container"] == container and obj["key"] == key:
124+
return self.objects.pop(obj_id)
125+
121126
def save(self, obj):
122127
assert obj["id"]
123128
obj["version"] += 1
@@ -277,6 +282,18 @@ def delete_by_key(self, request, key):
277282
return create_commercetools_response(request, json=obj)
278283
return create_commercetools_response(request, status_code=404)
279284

285+
def delete_by_container_and_key(self, request, container, key):
286+
obj = self.model.get_by_container_and_key(container, key)
287+
if obj:
288+
if self._verify_version:
289+
response = self._validate_resource_version(request, obj)
290+
if response is not None:
291+
return response
292+
293+
obj = self.model.delete_by_container_and_key(key)
294+
return create_commercetools_response(request, json=obj)
295+
return create_commercetools_response(request, status_code=404)
296+
280297
def _expand(self, request: _RequestObjectProxy, raw_obj):
281298
params = utils.parse_request_params(self._schema_query_params, request)
282299
if "expand" not in params:

src/commercetools/testing/custom_objects.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
CustomObjectPagedQueryResponseSchema,
99
CustomObjectSchema,
1010
)
11-
from commercetools.platform.models._schemas.error import ErrorResponseSchema
1211
from commercetools.testing.abstract import BaseModel, ServiceBackend
1312
from commercetools.testing.utils import create_commercetools_response
1413

@@ -27,7 +26,7 @@ def add(self, draft, id=None):
2726
version matches. otherwise create a new item
2827
"""
2928
new_obj = self._create_from_draft(draft, id)
30-
current_obj = self._get_by_container_key(new_obj.container, new_obj.key)
29+
current_obj = self._get_by_container_and_key(new_obj.container, new_obj.key)
3130

3231
if current_obj:
3332
if current_obj["version"] != new_obj.version:
@@ -55,7 +54,7 @@ def _create_from_draft(
5554
last_modified_at=datetime.datetime.now(datetime.timezone.utc),
5655
)
5756

58-
def _get_by_container_key(
57+
def _get_by_container_and_key(
5958
self, container: str, key: str
6059
) -> typing.Optional[typing.Dict]:
6160
return next(
@@ -78,7 +77,21 @@ def urls(self):
7877
return [
7978
("^$", "GET", self.query),
8079
("^$", "POST", self.create),
81-
("^(?P<container>[^/]+)/(?P<key>[^/]+)$", "GET", self.get_by_container_key),
80+
(
81+
"^(?P<container>[^/]+)/(?P<key>[^/]+)$",
82+
"GET",
83+
self.get_by_container_and_key,
84+
),
85+
(
86+
"^(?P<container>[^/]+)/(?P<key>[^/]+)$",
87+
"POST",
88+
self.update_by_container_and_key,
89+
),
90+
(
91+
"^(?P<container>[^/]+)/(?P<key>[^/]+)$",
92+
"DELETE",
93+
self.delete_by_container_and_key,
94+
),
8295
("^(?P<container>[^/]+)$", "GET", self.query_by_container),
8396
]
8497

@@ -91,9 +104,21 @@ def query_by_container(self, request, container: str):
91104

92105
return self.query(request)
93106

94-
def get_by_container_key(self, request, container: str, key: str):
95-
item = self.model._get_by_container_key(container, key)
107+
def get_by_container_and_key(self, request, container: str, key: str):
108+
item = self.model._get_by_container_and_key(container, key)
96109
if item:
97110
return create_commercetools_response(request, json=item)
98-
else:
99-
return create_commercetools_response(request, status_code=404)
111+
112+
return create_commercetools_response(request, status_code=404)
113+
114+
def update_by_container_and_key(self, request, container: str, key: str):
115+
item = self.model._get_by_container_and_key(container, key)
116+
return self._update(request, item)
117+
118+
def delete_by_container_and_key(self, request, container: str, key: str):
119+
item = self.model._get_by_container_and_key(container, key)
120+
if item:
121+
obj = self.model.delete_by_container_and_key(container, key)
122+
return create_commercetools_response(request, json=obj)
123+
124+
return create_commercetools_response(request, status_code=404)

tests/platform/test_service_custom_objects.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,21 @@ def test_custom_object_query_by_container(old_client):
8787
result = old_client.custom_objects.query_by_container("unittest")
8888
assert len(result.results) == 2
8989
assert result.total == 2
90+
91+
92+
def test_delete_by_container_and_key(old_client):
93+
custom_object = old_client.custom_objects.create_or_update(
94+
models.CustomObjectDraft(container="unittest", key="test-object-1", value=1234)
95+
)
96+
assert custom_object.id
97+
assert custom_object.key == "test-object-1"
98+
deleted_object = old_client.custom_objects.delete_by_container_and_key(
99+
container=custom_object.container, key=custom_object.key
100+
)
101+
102+
assert deleted_object.key == "test-object-1"
103+
104+
with pytest.raises(HTTPError):
105+
old_client.custom_objects.delete_by_container_and_key(
106+
container=custom_object.container, key=custom_object.key
107+
)

0 commit comments

Comments
 (0)