diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java index bb443f97d4121bc007be02e2ded8f6011a6ff934..93903e647a58d5004209c6103498c29ca44ec84c 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java @@ -202,6 +202,19 @@ public class CreatePersonExecutor { try { + PersonPE systemUser = daoFactory.getPersonDAO().tryFindPersonByUserId(PersonPE.SYSTEM_USER_ID); + if (systemUser == null) + { + throw new UserFailureException( + "Couldn't find system user with default settings in the DB."); + } + + PersonPE existingPerson = daoFactory.getPersonDAO().tryFindPersonByUserId(person.getUserId()); + if (existingPerson != null){ + throw new UserFailureException( + "User with User Id [" + person.getUserId() + "] already exists!" + ); + } daoFactory.getPersonDAO().createPerson(person); } catch (final DataAccessException e) { diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java index 019811fd2e0be86b40d71de0feaa8254b3826fcb..61a3555ffb444a6983546a1c38b26c5c6e85aa80 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java @@ -20,6 +20,7 @@ import static org.testng.Assert.assertEquals; import java.util.Arrays; import java.util.List; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -58,6 +59,38 @@ public class CreatePersonTest extends AbstractTest assertEquals(person.getSpace().getCode(), "CISD"); } + @Test + public void testCreateExistingPerson() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PersonCreation personCreation = new PersonCreation(); + personCreation.setUserId("user-existing"); + // When + List<PersonPermId> persons = v3api.createPersons(sessionToken, List.of(personCreation)); + + // Then + assertEquals(persons.toString(), "[" + personCreation.getUserId() + "]"); + PersonFetchOptions fetchOptions = new PersonFetchOptions(); + fetchOptions.withRegistrator(); + Person person = v3api.getPersons(sessionToken, persons, fetchOptions).get(persons.get(0)); + assertEquals(person.getUserId(), personCreation.getUserId()); + assertEquals(person.getRegistrator().getUserId(), TEST_USER); + + // Given + PersonCreation existingPersonCreation = new PersonCreation(); + existingPersonCreation.setUserId("user-existing"); + // When + + try + { + List<PersonPermId> existingPersons = v3api.createPersons(sessionToken, List.of(existingPersonCreation)); + } catch (UserFailureException e) + { + assertEquals("User with User Id [" + existingPersonCreation.getUserId() + "] already exists! (Context: [])", e.getMessage()); + } + } + @Test(dataProvider = "usersNotAllowedToCreatePersons") public void testCreateWithUserCausingAuthorizationFailure(final String user) {