Skip to content

Commit 37fe89f

Browse files
committed
feat: Add endpoint to post new allowlist
1 parent e8ae022 commit 37fe89f

2 files changed

Lines changed: 123 additions & 0 deletions

File tree

tests/endpoints/tests_models.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,84 @@ def test_get_remodel_allowlist_general_error(
262262
self.assertEqual(response.status_code, 500)
263263
self.assertFalse(data["success"])
264264
self.assertEqual(data["message"], "Internal server error")
265+
266+
267+
class TestCreateRemodelAllowlist(TestModelServiceEndpoints):
268+
@patch(
269+
"canonicalwebteam.store_api.publishergw.PublisherGW"
270+
+ ".create_remodel_allowlist"
271+
)
272+
def test_create_remodel_allowlist_success(
273+
self, mock_create_remodel_allowlist
274+
):
275+
mock_create_remodel_allowlist.return_value = None
276+
277+
payload = {
278+
"description": "Test remodel allowlist",
279+
"from-model": "test-from-model",
280+
"from-serial": "test-from-serial",
281+
"to-model": "test-to-model",
282+
}
283+
284+
response = self.client.post(
285+
"/api/store/1/models/remodel-allowlist", json=payload
286+
)
287+
data = response.json
288+
289+
self.assertEqual(response.status_code, 201)
290+
self.assertTrue(data["success"])
291+
mock_create_remodel_allowlist.assert_called_once()
292+
293+
@patch(
294+
"canonicalwebteam.store_api.publishergw.PublisherGW"
295+
+ ".create_remodel_allowlist"
296+
)
297+
def test_create_remodel_allowlist_store_not_found(
298+
self, mock_create_remodel_allowlist
299+
):
300+
mock_create_remodel_allowlist.side_effect = StoreApiResponseErrorList(
301+
"Store not found", 404, [{"message": "Store not found"}]
302+
)
303+
304+
payload = {
305+
"description": "Test remodel allowlist",
306+
"from-model": "test-from-model",
307+
"to-model": "test-to-model",
308+
}
309+
310+
response = self.client.post(
311+
"/api/store/999/models/remodel-allowlist", json=payload
312+
)
313+
data = response.json
314+
315+
self.assertEqual(response.status_code, 500)
316+
self.assertFalse(data["success"])
317+
self.assertEqual(data["message"], "Store not found")
318+
319+
@patch(
320+
"canonicalwebteam.store_api.publishergw.PublisherGW"
321+
+ ".create_remodel_allowlist"
322+
)
323+
def test_create_remodel_allowlist_general_error(
324+
self, mock_create_remodel_allowlist
325+
):
326+
mock_create_remodel_allowlist.side_effect = StoreApiResponseErrorList(
327+
"Internal server error",
328+
500,
329+
[{"message": "An error occurred"}],
330+
)
331+
332+
payload = {
333+
"description": "Test remodel allowlist",
334+
"from-model": "test-from-model",
335+
"to-model": "test-to-model",
336+
}
337+
338+
response = self.client.post(
339+
"/api/store/999/models/remodel-allowlist", json=payload
340+
)
341+
data = response.json
342+
343+
self.assertEqual(response.status_code, 500)
344+
self.assertFalse(data["success"])
345+
self.assertEqual(data["message"], "An error occurred")

webapp/endpoints/models.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,3 +301,45 @@ def get_remodel_allowlist(store_id: str):
301301
response = make_response(res, 500)
302302

303303
return response
304+
305+
306+
@models.route(
307+
"/api/store/<store_id>/models/remodel-allowlist", methods=["POST"]
308+
)
309+
@login_required
310+
@exchange_required
311+
def create_remodel_allowlist(store_id: str):
312+
"""
313+
Create a remodel allowlist for a given store.
314+
315+
Args:
316+
store_id (str): The ID of the store.
317+
318+
Returns:
319+
dict: A dictionary containing the response message and success
320+
status.
321+
"""
322+
res = {}
323+
324+
try:
325+
allowlist = flask.request.json
326+
publisher_gateway.create_remodel_allowlist(
327+
flask.session, store_id, allowlist
328+
)
329+
330+
res["success"] = True
331+
return make_response(res, 201)
332+
except StoreApiResponseErrorList as error_list:
333+
res["success"] = False
334+
messages = [
335+
f"{error.get('message', 'An error occurred')}"
336+
for error in error_list.errors
337+
]
338+
res["message"] = " ".join(messages)
339+
return make_response(res, 500)
340+
341+
except Exception:
342+
res["success"] = False
343+
res["message"] = "An error occurred"
344+
345+
return make_response(res, 500)

0 commit comments

Comments
 (0)