aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorBenoit <benoit.gianinetti@sonarsource.com>2019-06-24 17:16:52 +0200
committerSonarTech <sonartech@sonarsource.com>2019-07-05 20:21:11 +0200
commit764ee36334740399c1fc7f324568fda4827a5815 (patch)
tree6b105ace6591b599a6ac587b301208e937d46794 /server/sonar-server
parent1e6e288af65eb99a89ab58f4c7018205efca090d (diff)
downloadsonarqube-764ee36334740399c1fc7f324568fda4827a5815.tar.gz
sonarqube-764ee36334740399c1fc7f324568fda4827a5815.zip
SC-763 Remove creation of personal organizations
Diffstat (limited to 'server/sonar-server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/authentication/UserRegistrarImpl.java15
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdater.java47
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java109
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplOrgMembershipSyncTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplTest.java24
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java183
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java7
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterCreateTest.java17
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java33
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateLoginActionTest.java3
11 files changed, 18 insertions, 424 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/authentication/UserRegistrarImpl.java b/server/sonar-server/src/main/java/org/sonar/server/authentication/UserRegistrarImpl.java
index 59ff1b4aecd..62008a956ef 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/authentication/UserRegistrarImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/authentication/UserRegistrarImpl.java
@@ -63,7 +63,6 @@ import static java.lang.String.format;
import static java.util.Collections.singletonList;
import static java.util.Objects.requireNonNull;
import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex;
-import static org.sonar.server.authentication.UserRegistration.UpdateLoginStrategy;
public class UserRegistrarImpl implements UserRegistrar {
@@ -209,16 +208,20 @@ public class UserRegistrarImpl implements UserRegistrar {
if (personalOrganizationUuid == null) {
return;
}
+
Optional<OrganizationDto> personalOrganization = dbClient.organizationDao().selectByUuid(dbSession, personalOrganizationUuid);
- checkState(personalOrganization.isPresent(),
- "Cannot find personal organization uuid '%s' for user '%s'", personalOrganizationUuid, user.getLogin());
- UpdateLoginStrategy updateLoginStrategy = authenticatorParameters.getUpdateLoginStrategy();
+
+ personalOrganization.ifPresent(organizationDto -> updateOrganizationKey(dbSession, user, authenticatorParameters, newLogin, organizationDto));
+ }
+
+ private void updateOrganizationKey(DbSession dbSession, UserDto user, UserRegistration authenticatorParameters, @Nullable String newLogin, OrganizationDto personalOrganization) {
+ UserRegistration.UpdateLoginStrategy updateLoginStrategy = authenticatorParameters.getUpdateLoginStrategy();
switch (updateLoginStrategy) {
case ALLOW:
- organizationUpdater.updateOrganizationKey(dbSession, personalOrganization.get(), requireNonNull(newLogin, "new login cannot be null"));
+ organizationUpdater.updateOrganizationKey(dbSession, personalOrganization, requireNonNull(newLogin, "new login cannot be null"));
return;
case WARN:
- throw new UpdateLoginRedirectionException(authenticatorParameters.getUserIdentity(), authenticatorParameters.getProvider(), user, personalOrganization.get());
+ throw new UpdateLoginRedirectionException(authenticatorParameters.getUserIdentity(), authenticatorParameters.getProvider(), user, personalOrganization);
default:
throw new IllegalStateException(format("Unknown strategy %s", updateLoginStrategy));
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdater.java
index 4712f580a15..5bc4e3b6675 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdater.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdater.java
@@ -19,7 +19,6 @@
*/
package org.sonar.server.organization;
-import java.util.Optional;
import java.util.function.Consumer;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
@@ -36,7 +35,6 @@ public interface OrganizationUpdater {
String OWNERS_GROUP_DESCRIPTION = "Owners of organization";
String PERM_TEMPLATE_NAME = "Default template";
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
@@ -75,51 +73,6 @@ public interface OrganizationUpdater {
OrganizationDto create(DbSession dbSession, UserDto userCreator, NewOrganization newOrganization, Consumer<OrganizationDto> beforeCommit) throws KeyConflictException;
/**
- * Create a new guarded organization which details are based on the login of the specified User.
- * <p>
- * This method does several operations at once:
- * <ol>
- * <li>
- * create a guarded organization with the details computed from user's details:
- * <ul>
- * <li>key: generated from the user's login</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>
- * </li>
- * <li>create a group called {@link DefaultGroupCreatorImpl#DEFAULT_GROUP_NAME members} with browse permissions</li>
- * <li>make the specified user a member of this group</li>
- * <li>give all organization wide permissions to the user</li>
- * <li>create a default template for the organization
- * <ul>
- * <li>name is {@link #PERM_TEMPLATE_NAME Default template}</li>
- * <li>description follows pattern {@link #PERM_TEMPLATE_DESCRIPTION_PATTERN} based on the organization name</li>
- * </ul>
- * </li>
- * <li>this permission template defines the specified permissions (which effectively makes projects public and
- * automatically adds new projects to the user's favorites):
- * <ul>
- * <li>project creator : {@link UserRole#ADMIN ADMIN}</li>
- * <li>project creator : {@link UserRole#ISSUE_ADMIN ISSUE_ADMIN}</li>
- * <li>project creator : {@link UserRole#SECURITYHOTSPOT_ADMIN SECURITYHOTSPOT_ADMIN}</li>
- * <li>project creator : {@link UserRole#SCAN SCAN}</li>
- * <li>group {@link DefaultGroupCreatorImpl#DEFAULT_GROUP_NAME members} : {@link UserRole#USER USER}</li>
- * <li>group {@link DefaultGroupCreatorImpl#DEFAULT_GROUP_NAME members} : {@link UserRole#CODEVIEWER CODEVIEWER}</li>
- * </ul>
- * </li>
- * </ol>
- * </p>
- *
- * @return the created organization or empty if feature is disabled
- *
- * @throws IllegalArgumentException if any field of {@code newOrganization} is invalid according to {@link OrganizationValidation}
- * @throws IllegalStateException if an organization with the key generated from the login already exists
- */
- Optional<OrganizationDto> createForUser(DbSession dbSession, UserDto newUser);
-
- /**
* Update the personal organization key of a user.
* No update will be performed if generated key match the same key as existing one.
*
diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java b/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java
index b8d82a462bb..38f4a3c1a17 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java
@@ -24,12 +24,9 @@ import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import java.util.function.Consumer;
import javax.annotation.Nullable;
-import org.sonar.api.config.Configuration;
import org.sonar.api.utils.System2;
-import org.sonar.core.config.CorePropertyDefinitions;
import org.sonar.core.util.UuidFactory;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
@@ -38,8 +35,6 @@ import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.organization.OrganizationMemberDto;
import org.sonar.db.permission.GroupPermissionDto;
import org.sonar.db.permission.OrganizationPermission;
-import org.sonar.db.permission.UserPermissionDto;
-import org.sonar.db.permission.template.PermissionTemplateCharacteristicDto;
import org.sonar.db.permission.template.PermissionTemplateDto;
import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.db.qualityprofile.DefaultQProfileDto;
@@ -65,7 +60,6 @@ import static org.sonar.api.web.UserRole.USER;
import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex;
import static org.sonar.db.organization.OrganizationDto.Subscription.FREE;
import static org.sonar.db.permission.OrganizationPermission.SCAN;
-import static org.sonar.server.organization.OrganizationUpdater.NewOrganization.newOrganizationBuilder;
public class OrganizationUpdaterImpl implements OrganizationUpdater {
@@ -73,20 +67,18 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater {
private final System2 system2;
private final UuidFactory uuidFactory;
private final OrganizationValidation organizationValidation;
- private final Configuration config;
private final BuiltInQProfileRepository builtInQProfileRepository;
private final DefaultGroupCreator defaultGroupCreator;
private final UserIndexer userIndexer;
private final PermissionService permissionService;
public OrganizationUpdaterImpl(DbClient dbClient, System2 system2, UuidFactory uuidFactory,
- OrganizationValidation organizationValidation, Configuration config, UserIndexer userIndexer,
+ OrganizationValidation organizationValidation, UserIndexer userIndexer,
BuiltInQProfileRepository builtInQProfileRepository, DefaultGroupCreator defaultGroupCreator, PermissionService permissionService) {
this.dbClient = dbClient;
this.system2 = system2;
this.uuidFactory = uuidFactory;
this.organizationValidation = organizationValidation;
- this.config = config;
this.userIndexer = userIndexer;
this.builtInQProfileRepository = builtInQProfileRepository;
this.defaultGroupCreator = defaultGroupCreator;
@@ -123,43 +115,6 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater {
}
@Override
- public Optional<OrganizationDto> createForUser(DbSession dbSession, UserDto newUser) {
- if (!isCreatePersonalOrgEnabled()) {
- return Optional.empty();
- }
-
- String nameOrLogin = nameOrLogin(newUser);
- NewOrganization newOrganization = newOrganizationBuilder()
- .setKey(organizationValidation.generateKeyFrom(newUser.getLogin()))
- .setName(toName(nameOrLogin))
- .setDescription(format(PERSONAL_ORGANIZATION_DESCRIPTION_PATTERN, nameOrLogin))
- .build();
- checkKey(dbSession, newOrganization.getKey());
-
- QualityGateDto builtInQualityGate = dbClient.qualityGateDao().selectBuiltIn(dbSession);
- OrganizationDto organization = insertOrganization(dbSession, newOrganization, builtInQualityGate,
- dto -> dto.setGuarded(true));
- dbClient.userDao().update(dbSession, newUser.setOrganizationUuid(organization.getUuid()));
- insertOrganizationMember(dbSession, organization, newUser.getId());
- GroupDto defaultGroup = defaultGroupCreator.create(dbSession, organization.getUuid());
- dbClient.qualityGateDao().associate(dbSession, uuidFactory.create(), organization, builtInQualityGate);
- permissionService.getAllOrganizationPermissions()
- .forEach(p -> insertUserPermissions(dbSession, newUser, organization, p));
- insertPersonalOrgDefaultTemplate(dbSession, organization, defaultGroup);
- try (DbSession batchDbSession = dbClient.openSession(true)) {
- insertQualityProfiles(dbSession, batchDbSession, organization);
- addCurrentUserToGroup(dbSession, defaultGroup, newUser.getId());
-
- batchDbSession.commit();
-
- // Elasticsearch is updated when DB session is committed
- userIndexer.commitAndIndex(dbSession, newUser);
-
- return Optional.of(organization);
- }
- }
-
- @Override
public void updateOrganizationKey(DbSession dbSession, OrganizationDto organization, String newKey) {
String sanitizedKey = organizationValidation.generateKeyFrom(newKey);
if (organization.getKey().equals(sanitizedKey)) {
@@ -174,25 +129,6 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater {
"Can't create organization with key '%s' because an organization with this key already exists", key);
}
- 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
- organizationValidation.checkName(name);
- return name;
- }
-
- private boolean isCreatePersonalOrgEnabled() {
- return config.getBoolean(CorePropertyDefinitions.ORGANIZATIONS_CREATE_PERSONAL_ORG).orElse(false);
- }
-
private void validate(NewOrganization newOrganization) {
requireNonNull(newOrganization, "newOrganization can't be null");
organizationValidation.checkName(newOrganization.getName());
@@ -246,43 +182,6 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater {
new DefaultTemplates().setProjectUuid(permissionTemplateDto.getUuid()));
}
- private void insertPersonalOrgDefaultTemplate(DbSession dbSession, OrganizationDto organizationDto, GroupDto defaultGroup) {
- long now = system2.now();
- Date dateNow = new Date(now);
- PermissionTemplateDto permissionTemplateDto = dbClient.permissionTemplateDao().insert(
- dbSession,
- new PermissionTemplateDto()
- .setOrganizationUuid(organizationDto.getUuid())
- .setUuid(uuidFactory.create())
- .setName("Default template")
- .setDescription(format(PERM_TEMPLATE_DESCRIPTION_PATTERN, organizationDto.getName()))
- .setCreatedAt(dateNow)
- .setUpdatedAt(dateNow));
-
- insertProjectCreatorPermission(dbSession, permissionTemplateDto, ADMIN, now);
- insertProjectCreatorPermission(dbSession, permissionTemplateDto, SCAN.getKey(), now);
- insertGroupPermission(dbSession, permissionTemplateDto, USER, defaultGroup);
- insertGroupPermission(dbSession, permissionTemplateDto, CODEVIEWER, defaultGroup);
- insertGroupPermission(dbSession, permissionTemplateDto, ISSUE_ADMIN, defaultGroup);
- insertGroupPermission(dbSession, permissionTemplateDto, SECURITYHOTSPOT_ADMIN, defaultGroup);
-
- dbClient.organizationDao().setDefaultTemplates(
- dbSession,
- organizationDto.getUuid(),
- new DefaultTemplates().setProjectUuid(permissionTemplateDto.getUuid()));
- }
-
- private void insertProjectCreatorPermission(DbSession dbSession, PermissionTemplateDto permissionTemplateDto, String permission, long now) {
- dbClient.permissionTemplateCharacteristicDao().insert(
- dbSession,
- new PermissionTemplateCharacteristicDto()
- .setTemplateId(permissionTemplateDto.getId())
- .setWithProjectCreator(true)
- .setPermission(permission)
- .setCreatedAt(now)
- .setUpdatedAt(now));
- }
-
private void insertGroupPermission(DbSession dbSession, PermissionTemplateDto template, String permission, @Nullable GroupDto group) {
dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), group == null ? null : group.getId(), permission);
}
@@ -337,12 +236,6 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater {
.setRole(permission.getKey()));
}
- private void insertUserPermissions(DbSession dbSession, UserDto userDto, OrganizationDto organization, OrganizationPermission permission) {
- dbClient.userPermissionDao().insert(
- dbSession,
- new UserPermissionDto(organization.getUuid(), permission.getKey(), userDto.getId(), null));
- }
-
private void addCurrentUserToGroup(DbSession dbSession, GroupDto group, int createUserId) {
dbClient.userGroupDao().insert(
dbSession,
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 f85f3ce7ef3..bf54d87f49e 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
@@ -433,7 +433,7 @@ public class UserUpdater {
} else {
addUserToDefaultOrganizationAndDefaultGroup(dbSession, userDto);
}
- organizationUpdater.createForUser(dbSession, userDto);
+
return res;
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplOrgMembershipSyncTest.java b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplOrgMembershipSyncTest.java
index cfb39c95859..f8a299a80bf 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplOrgMembershipSyncTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplOrgMembershipSyncTest.java
@@ -115,7 +115,7 @@ public class UserRegistrarImplOrgMembershipSyncTest {
private UserRegistrarImpl underTest = new UserRegistrarImpl(db.getDbClient(), userUpdater, defaultOrganizationProvider, organizationFlags,
new OrganizationUpdaterImpl(db.getDbClient(), mock(System2.class), UuidFactoryFast.getInstance(),
- new OrganizationValidationImpl(), settings.asConfig(), null, null, null, permissionService),
+ new OrganizationValidationImpl(), null, null, null, permissionService),
defaultGroupFinder, new MemberUpdater(db.getDbClient(), defaultGroupFinder, userIndexer));
@Test
diff --git a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplTest.java
index 32f6851b8e7..2b6d540f9cb 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserRegistrarImplTest.java
@@ -119,7 +119,7 @@ public class UserRegistrarImplTest {
private UserRegistrarImpl underTest = new UserRegistrarImpl(db.getDbClient(), userUpdater, defaultOrganizationProvider, organizationFlags,
new OrganizationUpdaterImpl(db.getDbClient(), mock(System2.class), UuidFactoryFast.getInstance(),
- new OrganizationValidationImpl(), settings.asConfig(), null, null, null, permissionService),
+ new OrganizationValidationImpl(), null, null, null, permissionService),
defaultGroupFinder, new MemberUpdater(db.getDbClient(), defaultGroupFinder, userIndexer));
@Test
@@ -654,28 +654,6 @@ public class UserRegistrarImplTest {
}
@Test
- public void fail_to_authenticate_existing_user_when_personal_org_does_not_exist() {
- organizationFlags.setEnabled(true);
- db.users().insertUser(u -> u
- .setLogin("Old login")
- .setExternalId(USER_IDENTITY.getProviderId())
- .setExternalLogin("old identity")
- .setExternalIdentityProvider(IDENTITY_PROVIDER.getKey())
- .setOrganizationUuid("unknown"));
-
- expectedException.expect(IllegalStateException.class);
- expectedException.expectMessage("Cannot find personal organization uuid 'unknown' for user 'Old login'");
-
- underTest.register(UserRegistration.builder()
- .setUserIdentity(USER_IDENTITY)
- .setProvider(IDENTITY_PROVIDER)
- .setSource(Source.local(BASIC))
- .setExistingEmailStrategy(ExistingEmailStrategy.FORBID)
- .setUpdateLoginStrategy(UpdateLoginStrategy.ALLOW)
- .build());
- }
-
- @Test
public void authenticate_existing_disabled_user() {
organizationFlags.setEnabled(true);
db.users().insertUser(u -> u
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java
index 77a858eb9a7..75720a17016 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java
@@ -109,7 +109,6 @@ public class OrganizationUpdaterImplTest {
private DbClient dbClient = db.getDbClient();
private UuidFactory uuidFactory = new SequenceUuidFactory();
private OrganizationValidation organizationValidation = mock(OrganizationValidation.class);
- private MapSettings settings = new MapSettings();
private UserIndexer userIndexer = new UserIndexer(dbClient, es.client());
private UserIndex userIndex = new UserIndex(es.client(), system2);
private DefaultGroupCreator defaultGroupCreator = new DefaultGroupCreatorImpl(dbClient);
@@ -117,7 +116,7 @@ public class OrganizationUpdaterImplTest {
private ResourceTypes resourceTypes = new ResourceTypesRule().setRootQualifiers(Qualifiers.PROJECT);
private PermissionService permissionService = new PermissionServiceImpl(resourceTypes);
- private OrganizationUpdaterImpl underTest = new OrganizationUpdaterImpl(dbClient, system2, uuidFactory, organizationValidation, settings.asConfig(), userIndexer,
+ private OrganizationUpdaterImpl underTest = new OrganizationUpdaterImpl(dbClient, system2, uuidFactory, organizationValidation, userIndexer,
builtInQProfileRepositoryRule, defaultGroupCreator, permissionService);
@Test
@@ -348,182 +347,6 @@ public class OrganizationUpdaterImplTest {
}
@Test
- public void createForUser_creates_guarded_organization_with_key_name_and_description_generated_from_user_login_and_name_and_associated_to_user() {
- UserDto user = db.users().insertUser(A_LOGIN);
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
- builtInQProfileRepositoryRule.initialize();
- db.qualityGates().insertBuiltInQualityGate();
-
- underTest.createForUser(dbSession, user);
-
- OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
- assertThat(organization.getUuid()).isNotEmpty();
- assertThat(organization.getKey()).isEqualTo(SLUG_OF_A_LOGIN);
- 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();
- assertThat(organization.getSubscription()).isEqualTo(Subscription.FREE);
- assertThat(organization.getCreatedAt()).isEqualTo(A_DATE);
- assertThat(organization.getUpdatedAt()).isEqualTo(A_DATE);
-
- assertThat(db.getDbClient().userDao().selectByUuid(dbSession, user.getUuid()).getOrganizationUuid()).isEqualTo(organization.getUuid());
- }
-
- @Test
- public void createForUser_fails_with_ISE_if_organization_with_slug_of_login_already_exists() {
- UserDto user = db.users().insertUser(A_LOGIN);
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- db.organizations().insertForKey(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
-
- expectedException.expect(IllegalStateException.class);
- expectedException.expectMessage("Can't create organization with key '" + SLUG_OF_A_LOGIN + "' " +
- "because an organization with this key already exists");
-
- underTest.createForUser(dbSession, user);
- }
-
- @Test
- public void createForUser_gives_all_permissions_for_new_organization_to_current_user() {
- UserDto user = db.users().insertUser(dto -> dto.setLogin(A_LOGIN).setName(A_NAME));
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
- builtInQProfileRepositoryRule.initialize();
- db.qualityGates().insertBuiltInQualityGate();
-
- underTest.createForUser(dbSession, user);
-
- OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
- assertThat(dbClient.userPermissionDao().selectGlobalPermissionsOfUser(dbSession, user.getId(), organization.getUuid()))
- .containsOnly(GlobalPermissions.ALL.toArray(new String[GlobalPermissions.ALL.size()]));
- }
-
- @Test
- public void createForUser_creates_members_group_and_add_current_user_to_it() {
- UserDto user = db.users().insertUser(dto -> dto.setLogin(A_LOGIN).setName(A_NAME));
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
- builtInQProfileRepositoryRule.initialize();
- db.qualityGates().insertBuiltInQualityGate();
-
- underTest.createForUser(dbSession, user);
-
- verifyMembersGroup(user, SLUG_OF_A_LOGIN);
- }
-
- @Test
- public void createForUser_creates_default_template_for_new_organization() {
- UserDto user = db.users().insertUser(dto -> dto.setLogin(A_LOGIN).setName(A_NAME));
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
- builtInQProfileRepositoryRule.initialize();
- db.qualityGates().insertBuiltInQualityGate();
-
- underTest.createForUser(dbSession, user);
-
- OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
- int defaultGroupId = dbClient.organizationDao().getDefaultGroupId(dbSession, organization.getUuid()).get();
- PermissionTemplateDto defaultTemplate = dbClient.permissionTemplateDao().selectByName(dbSession, organization.getUuid(), "default template");
- assertThat(defaultTemplate.getName()).isEqualTo("Default template");
- assertThat(defaultTemplate.getDescription()).isEqualTo("Default permission template of organization " + A_NAME);
- DefaultTemplates defaultTemplates = dbClient.organizationDao().getDefaultTemplates(dbSession, organization.getUuid()).get();
- assertThat(defaultTemplates.getProjectUuid()).isEqualTo(defaultTemplate.getUuid());
- assertThat(defaultTemplates.getApplicationsUuid()).isNull();
- assertThat(dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateId(dbSession, defaultTemplate.getId()))
- .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getPermission)
- .containsOnly(
- tuple(defaultGroupId, UserRole.USER),
- tuple(defaultGroupId, UserRole.CODEVIEWER),
- tuple(defaultGroupId, UserRole.ISSUE_ADMIN),
- tuple(defaultGroupId, UserRole.SECURITYHOTSPOT_ADMIN));
- assertThat(dbClient.permissionTemplateCharacteristicDao().selectByTemplateIds(dbSession, Collections.singletonList(defaultTemplate.getId())))
- .extracting(PermissionTemplateCharacteristicDto::getWithProjectCreator, PermissionTemplateCharacteristicDto::getPermission)
- .containsOnly(
- tuple(true, UserRole.ADMIN),
- tuple(true, GlobalPermissions.SCAN_EXECUTION));
- }
-
- @Test
- public void createForUser_add_current_user_as_member_of_organization() {
- UserDto user = db.users().insertUser(dto -> dto.setLogin(A_LOGIN).setName(A_NAME));
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
- builtInQProfileRepositoryRule.initialize();
- db.qualityGates().insertBuiltInQualityGate();
-
- underTest.createForUser(dbSession, user);
-
- OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
- assertThat(dbClient.organizationMemberDao().select(dbSession, organization.getUuid(), user.getId())).isPresent();
- }
-
- @Test
- public void createForUser_associates_to_built_in_quality_profiles() {
- UserDto user = db.users().insertUser(A_LOGIN);
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
- db.qualityGates().insertBuiltInQualityGate();
- BuiltInQProfile builtIn1 = builtInQProfileRepositoryRule.add(newLanguage("foo"), "qp1");
- BuiltInQProfile builtIn2 = builtInQProfileRepositoryRule.add(newLanguage("foo"), "qp2");
- builtInQProfileRepositoryRule.initialize();
- insertRulesProfile(builtIn1);
- insertRulesProfile(builtIn2);
-
- underTest.createForUser(dbSession, user);
-
- OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
- List<QProfileDto> profiles = dbClient.qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, organization);
- assertThat(profiles).extracting(p -> new QProfileName(p.getLanguage(), p.getName())).containsExactlyInAnyOrder(
- builtIn1.getQProfileName(), builtIn2.getQProfileName());
- }
-
- @Test
- public void createForUser_associates_to_built_in_quality_gate() {
- QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate();
- UserDto user = db.users().insertUser(A_LOGIN);
- when(organizationValidation.generateKeyFrom(A_LOGIN)).thenReturn(SLUG_OF_A_LOGIN);
- enableCreatePersonalOrg(true);
- builtInQProfileRepositoryRule.initialize();
-
- underTest.createForUser(dbSession, user);
-
- OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, SLUG_OF_A_LOGIN).get();
- assertThat(dbClient.qualityGateDao().selectDefault(dbSession, organization).getUuid()).isEqualTo(builtInQualityGate.getUuid());
- }
-
- @Test
- public void createForUser_has_no_effect_if_setting_for_feature_is_not_set() {
- checkSizeOfTables();
-
- underTest.createForUser(null /* argument is not even read */, null /* argument is not even read */);
-
- checkSizeOfTables();
- }
-
- @Test
- public void createForUser_has_no_effect_if_setting_for_feature_is_disabled() {
- enableCreatePersonalOrg(false);
-
- checkSizeOfTables();
-
- underTest.createForUser(null /* argument is not even read */, null /* argument is not even read */);
-
- checkSizeOfTables();
- }
-
- private void checkSizeOfTables() {
- assertThat(db.countRowsOfTable("organizations")).isEqualTo(1);
- assertThat(db.countRowsOfTable("groups")).isEqualTo(0);
- assertThat(db.countRowsOfTable("groups_users")).isEqualTo(0);
- assertThat(db.countRowsOfTable("permission_templates")).isEqualTo(0);
- assertThat(db.countRowsOfTable("perm_templates_users")).isEqualTo(0);
- assertThat(db.countRowsOfTable("perm_templates_groups")).isEqualTo(0);
- }
-
- @Test
public void update_personal_organization() {
OrganizationDto organization = db.organizations().insert(o -> o.setKey("old login"));
when(organizationValidation.generateKeyFrom("new_login")).thenReturn("new_login");
@@ -557,10 +380,6 @@ public class OrganizationUpdaterImplTest {
underTest.updateOrganizationKey(dbSession, organization, "new_login");
}
- private void enableCreatePersonalOrg(boolean flag) {
- settings.setProperty(CorePropertyDefinitions.ORGANIZATIONS_CREATE_PERSONAL_ORG, flag);
- }
-
private void verifyGroupOwners(UserDto user, String organizationKey, String organizationName) {
OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, organizationKey).get();
Optional<GroupDto> groupOpt = dbClient.groupDao().selectByName(dbSession, organization.getUuid(), "Owners");
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java
index de8573516a2..93f3479c185 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java
@@ -81,9 +81,9 @@ import static org.sonar.core.config.CorePropertyDefinitions.ORGANIZATIONS_ANYONE
import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_NAME;
import static org.sonar.server.organization.ws.OrganizationsWsTestSupport.STRING_257_CHARS_LONG;
import static org.sonar.server.organization.ws.OrganizationsWsTestSupport.STRING_65_CHARS_LONG;
-import static org.sonar.server.user.index.UserIndexDefinition.TYPE_USER;
import static org.sonar.server.user.index.UserIndexDefinition.FIELD_ORGANIZATION_UUIDS;
import static org.sonar.server.user.index.UserIndexDefinition.FIELD_UUID;
+import static org.sonar.server.user.index.UserIndexDefinition.TYPE_USER;
import static org.sonar.test.JsonAssert.assertJson;
public class CreateActionTest {
@@ -108,9 +108,8 @@ public class CreateActionTest {
private UserIndexer userIndexer = new UserIndexer(dbClient, es.client());
private ResourceTypes resourceTypes = new ResourceTypesRule().setRootQualifiers(Qualifiers.PROJECT);
private PermissionService permissionService = new PermissionServiceImpl(resourceTypes);
- private OrganizationUpdater organizationUpdater = new OrganizationUpdaterImpl(dbClient, system2, UuidFactoryFast.getInstance(), organizationValidation, settings.asConfig(),
- userIndexer,
- mock(BuiltInQProfileRepository.class), new DefaultGroupCreatorImpl(dbClient), permissionService);
+ private OrganizationUpdater organizationUpdater = new OrganizationUpdaterImpl(dbClient, system2, UuidFactoryFast.getInstance(), organizationValidation,
+ userIndexer, mock(BuiltInQProfileRepository.class), new DefaultGroupCreatorImpl(dbClient), permissionService);
private TestOrganizationFlags organizationFlags = TestOrganizationFlags.standalone().setEnabled(true);
private OrganizationAlmBinding organizationAlmBinding = mock(OrganizationAlmBinding.class);
diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterCreateTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterCreateTest.java
index 4b5e8c53f39..af9a0eca653 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterCreateTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterCreateTest.java
@@ -55,8 +55,6 @@ import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.data.MapEntry.entry;
import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.sonar.db.user.UserTesting.newLocalUser;
@@ -633,21 +631,6 @@ public class UserUpdaterCreateTest {
}
@Test
- public void create_personal_organization_when_creating_user() {
- createDefaultGroup();
-
- UserDto dto = underTest.createAndCommit(db.getSession(), NewUser.builder()
- .setLogin("user")
- .setName("User")
- .setEmail("user@mail.com")
- .setPassword("PASSWORD")
- .build(), u -> {
- });
-
- verify(organizationUpdater).createForUser(any(DbSession.class), eq(dto));
- }
-
- @Test
public void add_user_as_member_of_default_organization_when_creating_user_and_organizations_are_disabled() {
createDefaultGroup();
diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java
index 8aeaf3c7403..3cf1855426d 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java
@@ -25,13 +25,11 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.mockito.ArgumentCaptor;
import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.internal.AlwaysIncreasingSystem2;
import org.sonar.core.config.CorePropertyDefinitions;
-import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.user.GroupDto;
import org.sonar.db.user.UserDto;
@@ -60,9 +58,7 @@ import static java.util.Optional.ofNullable;
import static org.assertj.core.api.Assertions.assertThat;
import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
import static org.sonar.db.user.UserTesting.newUserDto;
import static org.sonar.server.user.index.UserIndexDefinition.FIELD_EMAIL;
import static org.sonar.server.user.index.UserIndexDefinition.FIELD_LOGIN;
@@ -136,20 +132,6 @@ public class CreateActionTest {
}
@Test
- public void create_user_calls_create_personal_organization_if_personal_organizations_are_enabled() {
- logInAsSystemAdministrator();
- enableCreatePersonalOrg(true);
- assertACallToOrganizationCreationWhenUserIsCreated();
- }
-
- @Test
- public void create_user_calls_create_personal_organization_if_personal_organizations_are_disabled() {
- logInAsSystemAdministrator();
- enableCreatePersonalOrg(false);
- assertACallToOrganizationCreationWhenUserIsCreated();
- }
-
- @Test
public void create_user_associates_him_to_default_organization() {
logInAsSystemAdministrator();
enableCreatePersonalOrg(true);
@@ -398,21 +380,6 @@ public class CreateActionTest {
.build());
}
- private void assertACallToOrganizationCreationWhenUserIsCreated() {
- call(CreateRequest.builder()
- .setLogin("john")
- .setName("John")
- .setPassword("1234")
- .build());
-
- Optional<UserDto> dbUser = db.users().selectUserByLogin("john");
- assertThat(dbUser).isPresent();
-
- ArgumentCaptor<UserDto> userCaptor = ArgumentCaptor.forClass(UserDto.class);
- verify(organizationUpdater).createForUser(any(DbSession.class), userCaptor.capture());
- assertThat(userCaptor.getValue().getId()).isEqualTo(dbUser.get().getId());
- }
-
private void logInAsSystemAdministrator() {
userSessionRule.logIn().setSystemAdministrator();
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateLoginActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateLoginActionTest.java
index 782a680c38f..c7f89fc8e42 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateLoginActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateLoginActionTest.java
@@ -61,9 +61,8 @@ public class UpdateLoginActionTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
- private MapSettings settings = new MapSettings();
private OrganizationUpdater organizationUpdater = new OrganizationUpdaterImpl(db.getDbClient(), mock(System2.class), UuidFactoryFast.getInstance(),
- new OrganizationValidationImpl(), settings.asConfig(), null, null, null, null);
+ new OrganizationValidationImpl(), null, null, null, null);
private WsActionTester ws = new WsActionTester(new UpdateLoginAction(db.getDbClient(), userSession,
new UserUpdater(system2, mock(NewUserNotifier.class), db.getDbClient(), new UserIndexer(db.getDbClient(), es.client()),