From: Julien Lancelot Date: Tue, 6 Jan 2015 13:27:03 +0000 (+0100) Subject: SONAR-5830 Fix issue when updating a user without changing its SCM accounts X-Git-Tag: latest-silver-master-#65~340 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=0e9785908603273c7f4ef00800a8fc7042b55a2a;p=sonarqube.git SONAR-5830 Fix issue when updating a user without changing its SCM accounts --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java index fb59a00c93a..58d676cedb0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java @@ -152,7 +152,7 @@ public class UserUpdater implements ServerComponent { setEncryptedPassWord(password, userDto); List scmAccounts = sanitizeScmAccounts(newUser.scmAccounts()); - validateScmAccounts(dbSession, scmAccounts, login, email, messages); + validateScmAccounts(dbSession, scmAccounts, login, email, null, messages); userDto.setScmAccounts(convertScmAccountsToCsv(scmAccounts)); if (!messages.isEmpty()) { @@ -185,7 +185,7 @@ public class UserUpdater implements ServerComponent { if (updateUser.isScmAccountsChanged()) { List scmAccounts = sanitizeScmAccounts(updateUser.scmAccounts()); - validateScmAccounts(dbSession, scmAccounts, userDto.getLogin(), email != null ? email : userDto.getEmail(), messages); + validateScmAccounts(dbSession, scmAccounts, userDto.getLogin(), email != null ? email : userDto.getEmail(), userDto, messages); userDto.setScmAccounts(convertScmAccountsToCsv(scmAccounts)); } @@ -234,7 +234,8 @@ public class UserUpdater implements ServerComponent { } } - private void validateScmAccounts(DbSession dbSession, @Nullable List scmAccounts, @Nullable String login, @Nullable String email, List messages) { + private void validateScmAccounts(DbSession dbSession, @Nullable List scmAccounts, @Nullable String login, @Nullable String email, @Nullable UserDto existingUser, + List messages) { if (scmAccounts != null) { for (String scmAccount : scmAccounts) { if (scmAccount.equals(login) || scmAccount.equals(email)) { @@ -242,7 +243,9 @@ public class UserUpdater implements ServerComponent { } else { UserDto matchingUser = dbClient.userDao().selectNullableByScmAccountOrLoginOrName(dbSession, scmAccount); if (matchingUser != null) { - messages.add(Message.of("user.scm_account_already_used", scmAccount, matchingUser.getName(), matchingUser.getLogin())); + if (existingUser == null || !matchingUser.getId().equals(existingUser.getId())) { + messages.add(Message.of("user.scm_account_already_used", scmAccount, matchingUser.getName(), matchingUser.getLogin())); + } } } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java index ad64fcda6b3..996d7cbb6d3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java @@ -594,6 +594,20 @@ public class UserUpdaterTest { assertThat(dto.getCryptedPassword()).isEqualTo("650d2261c98361e2f67f90ce5c65a95e7d8ea2fg"); } + @Test + public void update_scm_accounts_with_same_values() throws Exception { + db.prepareDbUnit(getClass(), "update_user.xml"); + createDefaultGroup(); + + userUpdater.update(UpdateUser.create("marius") + .setScmAccounts(newArrayList("ma", "marius33"))); + session.commit(); + session.clearCache(); + + UserDto dto = userDao.selectNullableByLogin(session, "marius"); + assertThat(dto.getScmAccounts()).isEqualTo(",ma,marius33,"); + } + @Test public void remove_scm_accounts() throws Exception { db.prepareDbUnit(getClass(), "update_user.xml");