From 35b757b7bfe3cc021ab2ee7b1248792ae2b43108 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Fri, 23 Jan 2015 11:22:51 +0100 Subject: [PATCH] Apply feedback --- .../issue/ScmAccountCacheLoader.java | 25 +++++++++++-------- .../sonar/server/user/index/UserIndex.java | 6 ++++- .../server/user/index/UserIndexTest.java | 9 +++++++ .../user2-with-same-email-as-user1.json | 10 ++++++++ .../user4-with-same-email-as-user1.json | 10 ++++++++ 5 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user2-with-same-email-as-user1.json create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user4-with-same-email-as-user1.json diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java index f4327afa293..9f2b5ed5f41 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java @@ -19,6 +19,7 @@ */ package org.sonar.server.computation.issue; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.Collections2; @@ -44,7 +45,8 @@ public class ScmAccountCacheLoader implements CacheLoader { this(index, LoggerFactory.getLogger(ScmAccountCacheLoader.class)); } - public ScmAccountCacheLoader(UserIndex index, Logger log) { + @VisibleForTesting + ScmAccountCacheLoader(UserIndex index, Logger log) { this.log = log; this.index = index; } @@ -52,19 +54,20 @@ public class ScmAccountCacheLoader implements CacheLoader { @Override public String load(String scmAccount) { List users = index.getAtMostThreeUsersForScmAccount(scmAccount); - if (users.isEmpty()) { - return null; - } if (users.size() == 1) { return users.get(0).login(); } - Collection logins = Collections2.transform(users, new Function() { - @Override - public String apply(UserDoc input) { - return input.login(); - } - }); - log.warn(String.format("Multiple users share the SCM account '%s': %s", scmAccount, Joiner.on(", ").join(logins))); + if (!users.isEmpty()) { + // multiple users are associated to the same SCM account, for example + // the same email + Collection logins = Collections2.transform(users, new Function() { + @Override + public String apply(UserDoc input) { + return input.login(); + } + }); + log.warn(String.format("Multiple users share the SCM account '%s': %s", scmAccount, Joiner.on(", ").join(logins))); + } return null; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java b/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java index 2044f29ce8d..2fb347f93a4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java @@ -56,6 +56,10 @@ public class UserIndex implements ServerComponent { return null; } + /** + * Returns the user associated with the given SCM account. If multiple users have the same + * SCM account, then result is null. + */ @CheckForNull public UserDoc getNullableByScmAccount(String scmAccount) { if (!StringUtils.isEmpty(scmAccount)) { @@ -85,7 +89,7 @@ public class UserIndex implements ServerComponent { /** * Returns the users (at most 3) who are associated to the given SCM account. This method can be used - * to detect user conflicts. It never returns null. + * to detect user conflicts. */ public List getAtMostThreeUsersForScmAccount(String scmAccount) { List result = new ArrayList<>(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/index/UserIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/index/UserIndexTest.java index 52c46612f16..20030fbf979 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/index/UserIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/index/UserIndexTest.java @@ -125,4 +125,13 @@ public class UserIndexTest { assertThat(index.getAtMostThreeUsersForScmAccount("")).isEmpty(); assertThat(index.getAtMostThreeUsersForScmAccount("unknown")).isEmpty(); } + + @Test + public void get_maximum_three_users_for_scm_account() throws Exception { + esTester.putDocuments(UserIndexDefinition.INDEX, UserIndexDefinition.TYPE_USER, this.getClass(), "user1.json", + "user2-with-same-email-as-user1.json", "user3-with-same-email-as-user1.json", "user4-with-same-email-as-user1.json"); + + // restrict results to 3 users + assertThat(index.getAtMostThreeUsersForScmAccount("user1@mail.com")).hasSize(3); + } } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user2-with-same-email-as-user1.json b/server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user2-with-same-email-as-user1.json new file mode 100644 index 00000000000..8b17f5014de --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user2-with-same-email-as-user1.json @@ -0,0 +1,10 @@ +{ + "login": "user2", + "name": "User2", + "email": "user1@mail.com", + "active": true, + "scmAccounts": ["u2"], + "createdAt": 1500000000000, + "updatedAt": 1500000000000 +} + diff --git a/server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user4-with-same-email-as-user1.json b/server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user4-with-same-email-as-user1.json new file mode 100644 index 00000000000..6cefc04d7d2 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/user/index/UserIndexTest/user4-with-same-email-as-user1.json @@ -0,0 +1,10 @@ +{ + "login": "user4", + "name": "User4", + "email": "user1@mail.com", + "active": true, + "scmAccounts": ["u4"], + "createdAt": 1500000000000, + "updatedAt": 1500000000000 +} + -- 2.39.5