]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8752 SONAR-8751 personal org name from username 1667/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 13 Feb 2017 14:06:48 +0000 (15:06 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 13 Feb 2017 14:06:48 +0000 (15:06 +0100)
and also populate description

server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationCreation.java
server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationCreationImpl.java
server/sonar-server/src/test/java/org/sonar/server/organization/OrganizationCreationImplTest.java
sonar-db/src/test/java/org/sonar/db/user/UserDbTester.java

index c1caec8c5e1067df36a2dec5f9144504f1b57256..518fc0d31342c574385ea355570158be15befb82 100644 (file)
@@ -33,6 +33,7 @@ public interface OrganizationCreation {
   String OWNERS_GROUP_NAME = "Owners";
   String OWNERS_GROUP_DESCRIPTION_PATTERN = "Owners of organization %s";
   String PERM_TEMPLATE_DESCRIPTION_PATTERN = "Default permission template of organization %s";
+  String PERSONAL_ORGANIZATION_DESCRIPTION_PATTERN = "%s's personal organization";
 
   /**
    * Create a new non guarded organization with the specified properties and of which the specified user will assign
@@ -71,8 +72,10 @@ public interface OrganizationCreation {
    * user's login:
    * <ul>
    *   <li>key: generated from the user's login</li>
-   *   <li>name: the user's login</li>
-   *   <li>description, url and avatar: null</li>
+   *   <li>name: the user's name if set, otherwise the user's login</li>
+   *   <li>description: {@link #PERSONAL_ORGANIZATION_DESCRIPTION_PATTERN "[name]'s personal organization"} where name
+   *       is user name (when non null and non empty) or login</li>
+   *   <li>url and avatar: null</li>
    * </ul>
    * </p>
    *
index e695811667f34f2f35a92f7177a50e44993653c2..c5333acf0d0582fabe4b593b4f8e379b0c2ccf4f 100644 (file)
@@ -45,6 +45,7 @@ import static java.util.Objects.requireNonNull;
 import static org.sonar.server.organization.OrganizationCreation.NewOrganization.newOrganizationBuilder;
 
 public class OrganizationCreationImpl implements OrganizationCreation {
+
   private final DbClient dbClient;
   private final System2 system2;
   private final UuidFactory uuidFactory;
@@ -85,9 +86,11 @@ public class OrganizationCreationImpl implements OrganizationCreation {
       return Optional.empty();
     }
 
+    String nameOrLogin = nameOrLogin(newUser);
     NewOrganization newOrganization = newOrganizationBuilder()
       .setKey(organizationValidation.generateKeyFrom(newUser.getLogin()))
-      .setName(toName(newUser.getLogin()))
+      .setName(toName(nameOrLogin))
+      .setDescription(format(PERSONAL_ORGANIZATION_DESCRIPTION_PATTERN, nameOrLogin))
       .build();
     checkState(!organizationKeyIsUsed(dbSession, newOrganization.getKey()),
       "Can't create organization with key '%s' for new user '%s' because an organization with this key already exists",
@@ -105,6 +108,14 @@ public class OrganizationCreationImpl implements OrganizationCreation {
     return Optional.of(organization);
   }
 
+  private static String nameOrLogin(UserDto newUser) {
+    String name = newUser.getName();
+    if (name == null || name.isEmpty()) {
+      return newUser.getLogin();
+    }
+    return name;
+  }
+
   private String toName(String login) {
     String name = login.substring(0, Math.min(login.length(), OrganizationValidation.NAME_MAX_LENGTH));
     // should not happen has login can't be less than 2 chars, but we call it for safety
index be73210c9653c86c93e1cd71ddd54f47d385b77c..4ebeec9bb31c098ae3304579b0cf69daa9fa4485 100644 (file)
@@ -55,7 +55,8 @@ public class OrganizationCreationImplTest {
   private static final long SOME_DATE = 12893434L;
   private static final String A_LOGIN = "a-login";
   private static final String SLUG_OF_A_LOGIN = "slug-of-a-login";
-  public static final String STRING_64_CHARS = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+  private static final String STRING_64_CHARS = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+  private static final String A_NAME = "a name";
 
   private OrganizationCreation.NewOrganization FULL_POPULATED_NEW_ORGANIZATION = newOrganizationBuilder()
     .setName("a-name")
@@ -226,7 +227,7 @@ public class OrganizationCreationImplTest {
   }
 
   @Test
-  public void createForUser_creates_guarded_organization_with_name_and_key_generated_from_login_and_associated_to_user() {
+  public void createForUser_creates_guarded_organization_with_key_name_and_description_generated_from_user_login_and_name_and_associated_to_user() {
     UserDto user = dbTester.users().insertUser(A_LOGIN);
     when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
     mockForSuccessfulInsert(SOME_UUID, SOME_DATE);
@@ -237,8 +238,8 @@ public class OrganizationCreationImplTest {
     OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
     assertThat(organization.getUuid()).isEqualTo(SOME_UUID);
     assertThat(organization.getKey()).isEqualTo(SLUG_OF_A_LOGIN);
-    assertThat(organization.getName()).isEqualTo(user.getLogin());
-    assertThat(organization.getDescription()).isNull();
+    assertThat(organization.getName()).isEqualTo(user.getName());
+    assertThat(organization.getDescription()).isEqualTo(user.getName() + "'s personal organization");
     assertThat(organization.getUrl()).isNull();
     assertThat(organization.getAvatarUrl()).isNull();
     assertThat(organization.isGuarded()).isTrue();
@@ -264,14 +265,14 @@ public class OrganizationCreationImplTest {
 
   @Test
   public void createForUser_creates_owners_group_with_all_permissions_for_new_organization_and_add_current_user_to_it() throws OrganizationCreation.KeyConflictException {
-    UserDto user = dbTester.users().insertUser(A_LOGIN);
+    UserDto user = dbTester.users().insertUser(dto -> dto.setLogin(A_LOGIN).setName(A_NAME));
     when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
     mockForSuccessfulInsert(SOME_UUID, SOME_DATE);
     enableCreatePersonalOrg(true);
 
     underTest.createForUser(dbSession, user);
 
-    verifyGroupOwners(user, SLUG_OF_A_LOGIN, A_LOGIN);
+    verifyGroupOwners(user, SLUG_OF_A_LOGIN, A_NAME);
   }
 
   private void verifyGroupOwners(UserDto user, String organizationKey, String organizationName) {
@@ -292,14 +293,14 @@ public class OrganizationCreationImplTest {
 
   @Test
   public void createForUser_creates_default_template_for_new_organization() throws OrganizationCreation.KeyConflictException {
-    UserDto user = dbTester.users().insertUser(A_LOGIN);
+    UserDto user = dbTester.users().insertUser(dto -> dto.setLogin(A_LOGIN).setName(A_NAME));
     when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
     mockForSuccessfulInsert(SOME_UUID, SOME_DATE);
     enableCreatePersonalOrg(true);
 
     underTest.createForUser(dbSession, user);
 
-    verifyDefaultTemplate(SLUG_OF_A_LOGIN, A_LOGIN);
+    verifyDefaultTemplate(SLUG_OF_A_LOGIN, A_NAME);
   }
 
   private void verifyDefaultTemplate(String organizationKey, String organizationName) {
@@ -319,9 +320,39 @@ public class OrganizationCreationImplTest {
   }
 
   @Test
-  public void createForUser_does_not_fail_if_login_is_too_long_for_an_organization_name() {
+  public void createForUser_does_not_fail_if_name_is_too_long_for_an_organization_name() {
+    String nameTooLong = STRING_64_CHARS + "b";
+    UserDto user = dbTester.users().insertUser(dto -> dto.setName(nameTooLong).setLogin(A_LOGIN));
+    when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
+    mockForSuccessfulInsert(SOME_UUID, SOME_DATE);
+    enableCreatePersonalOrg(true);
+
+    underTest.createForUser(dbSession, user);
+
+    OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
+    assertThat(organization.getName()).isEqualTo(STRING_64_CHARS);
+    assertThat(organization.getDescription()).isEqualTo(nameTooLong + "'s personal organization");
+  }
+
+  @Test
+  public void createForUser_does_not_fail_if_name_is_empty_and_login_is_too_long_for_an_organization_name() {
+    String login = STRING_64_CHARS + "b";
+    UserDto user = dbTester.users().insertUser(dto -> dto.setName("").setLogin(login));
+    when(organizationValidation.generateKeyFrom(login)).thenReturn(SLUG_OF_A_LOGIN);
+    mockForSuccessfulInsert(SOME_UUID, SOME_DATE);
+    enableCreatePersonalOrg(true);
+
+    underTest.createForUser(dbSession, user);
+
+    OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
+    assertThat(organization.getName()).isEqualTo(STRING_64_CHARS);
+    assertThat(organization.getDescription()).isEqualTo(login + "'s personal organization");
+  }
+
+  @Test
+  public void createForUser_does_not_fail_if_name_is_null_and_login_is_too_long_for_an_organization_name() {
     String login = STRING_64_CHARS + "b";
-    UserDto user = dbTester.users().insertUser(login);
+    UserDto user = dbTester.users().insertUser(dto -> dto.setName(null).setLogin(login));
     when(organizationValidation.generateKeyFrom(login)).thenReturn(SLUG_OF_A_LOGIN);
     mockForSuccessfulInsert(SOME_UUID, SOME_DATE);
     enableCreatePersonalOrg(true);
@@ -330,6 +361,7 @@ public class OrganizationCreationImplTest {
 
     OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
     assertThat(organization.getName()).isEqualTo(STRING_64_CHARS);
+    assertThat(organization.getDescription()).isEqualTo(login + "'s personal organization");
   }
 
   private void enableCreatePersonalOrg(boolean flag) {
index 10e539f2c80ab6dd9c5fe10266e00cba36d25059..6257ac9434a765082dd783bf91dcd9c5d406c7de 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.db.user;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
+import java.util.function.Consumer;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import org.sonar.core.permission.GlobalPermissions;
@@ -58,6 +59,12 @@ public class UserDbTester {
     return insertUser(dto);
   }
 
+  public UserDto insertUser(Consumer<UserDto> populateUserDto) {
+    UserDto dto = newUserDto().setActive(true);
+    populateUserDto.accept(dto);
+    return insertUser(dto);
+  }
+
   public UserDto insertUser(UserDto userDto) {
     UserDto updatedUser = dbClient.userDao().insert(db.getSession(), userDto);
     db.commit();