Fix groups update endpoint

Prevent possible name duplication and add error handling.
Fix tests to assert 409 when the operation may result in a name conflict.
This commit is contained in:
davelopez
2021-02-18 14:50:40 +01:00
parent 559ba46302
commit d38ba53b21
2 changed files with 10 additions and 4 deletions
+1
View File
@@ -77,6 +77,7 @@ class GroupsManager:
group = self._get_group(trans, encoded_id)
name = payload.get('name', None)
if name:
self._check_duplicated_group_name(trans, name)
group.name = name
trans.sa_session.add(group)
user_ids = payload.get('user_ids', [])
+9 -4
View File
@@ -28,13 +28,13 @@ class GroupsApiTestCase(ApiTestCase):
response = self._post("groups", payload, admin=True, json=True)
self._assert_status_code_is(response, 400)
def test_create_duplicated_name_raises_400(self):
def test_create_duplicated_name_raises_409(self):
payload = self._build_valid_group_payload()
response = self._post("groups", payload, admin=True, json=True)
self._assert_status_code_is(response, 200)
response = self._post("groups", payload, admin=True, json=True)
self._assert_status_code_is(response, 400)
self._assert_status_code_is(response, 409)
def test_index(self):
self.test_create_valid()
@@ -65,6 +65,11 @@ class GroupsApiTestCase(ApiTestCase):
response = self._get(f"groups/{group_id}")
self._assert_status_code_is(response, 403)
def test_show_unknown_raises_400(self):
group_id = "invalid-group-id"
response = self._get(f"groups/{group_id}", admin=True)
self._assert_status_code_is(response, 400)
def test_update(self):
group = self.test_create_valid(group_name="group-test")
@@ -82,7 +87,7 @@ class GroupsApiTestCase(ApiTestCase):
response = self._put(f"groups/{group_id}")
self._assert_status_code_is(response, 403)
def test_update_duplicating_name_raises_400(self):
def test_update_duplicating_name_raises_409(self):
group_a = self.test_create_valid()
group_b = self.test_create_valid()
@@ -93,7 +98,7 @@ class GroupsApiTestCase(ApiTestCase):
"name": updated_name,
})
update_response = self._put(f"groups/{group_b_id}", data=update_payload, admin=True)
self._assert_error_code_is(update_response, 400)
self._assert_status_code_is(update_response, 409)
def _assert_valid_group(self, group, assert_id=None):
self._assert_has_keys(group, "id", "name", "model_class", "url")