diff --git a/apiserver/service_repo/service_repo.py b/apiserver/service_repo/service_repo.py index 9ea31f7..922d7b9 100644 --- a/apiserver/service_repo/service_repo.py +++ b/apiserver/service_repo/service_repo.py @@ -8,6 +8,7 @@ import jsonmodels.models from apiserver.apierrors import APIError, errors from apiserver.config_repo import config +from apiserver.database.errors import translate_errors_context from apiserver.utilities.partial_version import PartialVersion from .apicall import APICall from .auth import Identity @@ -283,7 +284,8 @@ class ServiceRepo(object): # In case call does not require authorization, parsing the identity.company might raise an exception company = cls._get_company(call, endpoint) - ret = endpoint.func(call, company, call.data_model) + with translate_errors_context(): + ret = endpoint.func(call, company, call.data_model) # allow endpoints to return dict or model (instead of setting them explicitly on the call) if ret is not None: diff --git a/apiserver/tests/automated/test_projects_edit.py b/apiserver/tests/automated/test_projects_edit.py index f06cd7b..ff4866d 100644 --- a/apiserver/tests/automated/test_projects_edit.py +++ b/apiserver/tests/automated/test_projects_edit.py @@ -1,4 +1,4 @@ -from apiserver.apierrors.errors.bad_request import InvalidProjectId +from apiserver.apierrors.errors.bad_request import InvalidProjectId, ExpectedUniqueData from apiserver.apierrors.errors.forbidden import NoWritePermission from apiserver.config_repo import config from apiserver.tests.automated import TestService @@ -32,3 +32,12 @@ class TestProjectsEdit(TestService): res = self.api.projects.get_all(id=[p1]) self.assertEqual([p.id for p in res.projects], [p1]) self.api.projects.update(project=p1, name="Test public change 2") + + def test_project_name_uniqueness(self): + name1 = "Test name1" + p1 = self.create_temp("projects", name=name1, description="test") + with self.api.raises(ExpectedUniqueData): + p2 = self.create_temp("projects", name=name1, description="test") + p2 = self.create_temp("projects", name="Test name2", description="test") + with self.api.raises(ExpectedUniqueData): + self.api.projects.update(project=p2, name=name1)