]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5830 Fix issue when updating a user without changing its SCM accounts
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 6 Jan 2015 13:27:03 +0000 (14:27 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 6 Jan 2015 13:56:57 +0000 (14:56 +0100)
server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java
server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java

index fb59a00c93ad1a632001e62abd5af251dba7e371..58d676cedb0dc8fb4ad3af270ebd9ee5a251802a 100644 (file)
@@ -152,7 +152,7 @@ public class UserUpdater implements ServerComponent {
     setEncryptedPassWord(password, userDto);
 
     List<String> 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<String> 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<String> scmAccounts, @Nullable String login, @Nullable String email, List<Message> messages) {
+  private void validateScmAccounts(DbSession dbSession, @Nullable List<String> scmAccounts, @Nullable String login, @Nullable String email, @Nullable UserDto existingUser,
+    List<Message> 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()));
+            }
           }
         }
       }
index ad64fcda6b3675f56af8713390b0fa11ff45229c..996d7cbb6d380fcf4d875766e9a63d7009f3fb3d 100644 (file)
@@ -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");