Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions tests/endpoints/tests_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,3 +261,84 @@ def test_get_remodel_allowlist_general_error(
self.assertEqual(response.status_code, 500)
self.assertFalse(data["success"])
self.assertEqual(data["message"], "Internal server error")


class TestCreateRemodelAllowlist(TestModelServiceEndpoints):
@patch(
"canonicalwebteam.store_api.publishergw.PublisherGW"
+ ".create_remodel_allowlist"
)
def test_create_remodel_allowlist_success(
self, mock_create_remodel_allowlist
):
mock_create_remodel_allowlist.return_value = None

payload = {
"description": "Test remodel allowlist",
"from-model": "test-from-model",
"from-serial": "test-from-serial",
"to-model": "test-to-model",
}

response = self.client.post(
"/api/store/1/models/remodel-allowlist", json=payload
)
data = response.json

self.assertEqual(response.status_code, 201)
self.assertTrue(data["success"])
mock_create_remodel_allowlist.assert_called_once()

@patch(
"canonicalwebteam.store_api.publishergw.PublisherGW"
+ ".create_remodel_allowlist"
)
def test_create_remodel_allowlist_store_not_found(
self, mock_create_remodel_allowlist
):
mock_create_remodel_allowlist.side_effect = StoreApiResponseErrorList(
"Store not found", 404, [{"message": "Store not found"}]
)

payload = {
"description": "Test remodel allowlist",
"from-model": "test-from-model",
"to-model": "test-to-model",
}

response = self.client.post(
"/api/store/999/models/remodel-allowlist", json=payload
)
data = response.json

self.assertEqual(response.status_code, 404)
self.assertFalse(data["success"])
self.assertEqual(data["message"], "Store not found")
Comment thread
steverydz marked this conversation as resolved.
Comment thread
steverydz marked this conversation as resolved.

@patch(
"canonicalwebteam.store_api.publishergw.PublisherGW"
+ ".create_remodel_allowlist"
)
def test_create_remodel_allowlist_general_error(
self, mock_create_remodel_allowlist
):
mock_create_remodel_allowlist.side_effect = StoreApiResponseErrorList(
"Internal server error",
500,
[{"message": "An error occurred"}],
)

payload = {
"description": "Test remodel allowlist",
"from-model": "test-from-model",
"to-model": "test-to-model",
}

response = self.client.post(
"/api/store/999/models/remodel-allowlist", json=payload
)
data = response.json

self.assertEqual(response.status_code, 500)
self.assertFalse(data["success"])
self.assertEqual(data["message"], "An error occurred")
47 changes: 47 additions & 0 deletions webapp/endpoints/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,3 +300,50 @@ def get_remodel_allowlist(store_id: str):
response = make_response(res, 500)

return response


@models.route(
"/api/store/<store_id>/models/remodel-allowlist", methods=["POST"]
)
@login_required
@exchange_required
def create_remodel_allowlist(store_id: str):
Comment thread
steverydz marked this conversation as resolved.
"""
Create a remodel allowlist for a given store.

Args:
store_id (str): The ID of the store.

Returns:
dict: A dictionary containing the response message and success
status.
"""
res = {}

try:
allowlist = flask.request.json
Comment thread
steverydz marked this conversation as resolved.
publisher_gateway.create_remodel_allowlist(
flask.session, store_id, allowlist
)

res["success"] = True
return make_response(res, 201)
except StoreApiResponseErrorList as error_list:
res["success"] = False
Comment thread
bartaz marked this conversation as resolved.
messages = [
f"{error.get('message', 'An error occurred')}"
for error in error_list.errors
]
res["message"] = " ".join(messages)
return make_response(res, error_list.status_code)

except StoreApiResourceNotFound:
res["success"] = False
res["message"] = "Models not found"
return make_response(res, 404)

Comment thread
steverydz marked this conversation as resolved.
except Exception:
res["success"] = False
res["message"] = "An error occurred"

return make_response(res, 500)