Skip to content

Commit 9d1fc23

Browse files
committed
feat: Add endpoint to post new allowlist
1 parent 14b3c44 commit 9d1fc23

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

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

0 commit comments

Comments
 (0)