diff --git a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java index 18875cd..56501fd 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java +++ b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java @@ -95,7 +95,11 @@ public class SingleUserGroup extends AbstractGroupBackend { ImmutableList.Builder<AccountGroup.UUID> groups = ImmutableList.builder(); groups.add(uuid(user.getAccountId())); if (user.getUserName().isPresent()) { - groups.add(uuid(user.getUserName().get())); + String username = user.getUserName().get(); + groups.add(uuid(username)); + if (username.contains(".")) { + groups.add(uuid(username.replace('.', ':'))); + } } return new ListGroupMembership(groups.build()); } @@ -160,13 +164,13 @@ public class SingleUserGroup extends AbstractGroupBackend { private static GroupReference accountToGroup(AccountState s) { AccountGroup.UUID uuid = - s.getUserName().isPresent() ? uuid(s.getUserName().get()) : uuid(s.getAccount().getId()); + s.getUserName().isPresent() ? uuid(s.getUserName().get().replace('.', ':')) : uuid(s.getAccount().getId()); return new GroupReference(uuid, nameOf(uuid, s)); } private static String username(AccountGroup.UUID uuid) { checkUUID(uuid); - return uuid.get().substring(UUID_PREFIX.length()); + return uuid.get().substring(UUID_PREFIX.length()).replace(':', '.'); } private static AccountGroup.UUID uuid(Account.Id ident) { diff --git a/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java b/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java index 9bc8859..720aa0c 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java @@ -18,9 +18,16 @@ import static com.google.common.truth.Truth.assertThat; import com.google.gerrit.acceptance.LightweightPluginDaemonTest; import com.google.gerrit.acceptance.NoHttpd; +import com.google.gerrit.acceptance.TestAccount; import com.google.gerrit.acceptance.TestPlugin; +import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.extensions.common.GroupInfo; +import com.google.gerrit.reviewdb.client.AccountGroup; +import com.google.gerrit.server.account.GroupMembership; + +import java.beans.Transient; import java.util.Map; +import org.junit.Before; import org.junit.Test; @NoHttpd @@ -28,11 +35,55 @@ import org.junit.Test; name = "singleusergroup", sysModule = "com.googlesource.gerrit.plugins.singleusergroup.SingleUserGroup$Module") public class SingleUserGroupTest extends LightweightPluginDaemonTest { - @Test - public void testSuggestion() throws Exception { + private static final String DOTTED_USER_NAME = "user/Dotted User (dotted.user)"; + private TestAccount dottedUserAccount; + + @Before + public void setUp() throws Exception { // No ability to modify account and therefore no ACL to see secondary email setApiUser(user); + dottedUserAccount = accountCreator.create("dotted.user", "dotted.user@domain.com", "Dotted User"); + } + + @Test + public void testSuggestion() throws Exception { Map<String, GroupInfo> groups = gApi.groups().list().withSuggest("adm").getAsMap(); assertThat(groups).containsKey("user/Administrator (admin)"); } + + @Test + public void testDottedUserSuggestion() throws Exception { + Map<String, GroupInfo> groups = gApi.groups().list().withSuggest("dot").getAsMap(); + assertThat(groups).containsKey(DOTTED_USER_NAME); + GroupInfo info = groups.get(DOTTED_USER_NAME); + assertThat(info.id).isEqualTo("user%3Adotted%3Auser"); + } + + @Test + public void testMembershipIncludesDottedGroup() throws Exception { + GroupMembership membership = groupBackend.membershipsOf(identifiedUserFactory.create(dottedUserAccount.getId())); + assertThat(membership.getKnownGroups()).contains(uuid("user:dotted.user")); + } + + @Test + public void testMembershipIncludesDottedColonGroup() throws Exception { + GroupMembership membership = groupBackend.membershipsOf(identifiedUserFactory.create(dottedUserAccount.getId())); + assertThat(membership.getKnownGroups()).contains(uuid("user:dotted:user")); + } + + @Test + public void testGetDottedGroup() throws Exception { + GroupDescription.Basic desc = groupBackend.get(uuid("user:dotted.user")); + assertThat(desc.getName()).isEqualTo(DOTTED_USER_NAME); + } + + @Test + public void testGetDottedColonGroup() throws Exception { + GroupDescription.Basic desc = groupBackend.get(uuid("user:dotted:user")); + assertThat(desc.getName()).isEqualTo(DOTTED_USER_NAME); + } + + private static AccountGroup.UUID uuid(String id) { + return new AccountGroup.UUID(id); + } }