aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-03-22 15:53:55 +0100
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-03-24 17:38:53 +0100
commit69f31ac32627195d1e159d377120a13f28193839 (patch)
tree300983e5031726bccb763dc6ce7860cf92057759
parent476c36e8358eadf57fe1821a0cdd2ec708dab7a3 (diff)
downloadsonarqube-69f31ac32627195d1e159d377120a13f28193839.tar.gz
sonarqube-69f31ac32627195d1e159d377120a13f28193839.zip
SONAR-8980 Reindex users when deleting an organization
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/organization/ws/DeleteAction.java7
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java17
2 files changed, 22 insertions, 2 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/DeleteAction.java b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/DeleteAction.java
index fd412a9c6b6..6837001fa34 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/DeleteAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/DeleteAction.java
@@ -35,6 +35,7 @@ import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.OrganizationFlags;
import org.sonar.server.qualityprofile.QProfileFactory;
import org.sonar.server.user.UserSession;
+import org.sonar.server.user.index.UserIndexer;
import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
@@ -51,15 +52,17 @@ public class DeleteAction implements OrganizationsWsAction {
private final DefaultOrganizationProvider defaultOrganizationProvider;
private final ComponentCleanerService componentCleanerService;
private final OrganizationFlags organizationFlags;
+ private final UserIndexer userIndexer;
private final QProfileFactory qProfileFactory;
public DeleteAction(UserSession userSession, DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider,
- ComponentCleanerService componentCleanerService, OrganizationFlags organizationFlags, QProfileFactory qProfileFactory) {
+ ComponentCleanerService componentCleanerService, OrganizationFlags organizationFlags, UserIndexer userIndexer, QProfileFactory qProfileFactory) {
this.userSession = userSession;
this.dbClient = dbClient;
this.defaultOrganizationProvider = defaultOrganizationProvider;
this.componentCleanerService = componentCleanerService;
this.organizationFlags = organizationFlags;
+ this.userIndexer = userIndexer;
this.qProfileFactory = qProfileFactory;
}
@@ -140,9 +143,11 @@ public class DeleteAction implements OrganizationsWsAction {
}
private void deleteOrganization(DbSession dbSession, OrganizationDto organization) {
+ List<String> logins = dbClient.organizationMemberDao().selectLoginsByOrganizationUuid(dbSession, organization.getUuid());
dbClient.organizationMemberDao().deleteByOrganizationUuid(dbSession, organization.getUuid());
dbClient.organizationDao().deleteByUuid(dbSession, organization.getUuid());
dbSession.commit();
+ userIndexer.index(logins);
}
private static void preventDeletionOfDefaultOrganization(String key, DefaultOrganization defaultOrganization) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java
index 61919a60993..3d6c399b2d5 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java
@@ -20,11 +20,13 @@
package org.sonar.server.organization.ws;
+import java.util.Arrays;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;
+import org.sonar.api.config.MapSettings;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.core.util.UuidFactory;
@@ -39,6 +41,7 @@ import org.sonar.db.qualityprofile.QualityProfileDto;
import org.sonar.db.user.GroupDto;
import org.sonar.db.user.UserDto;
import org.sonar.server.component.ComponentCleanerService;
+import org.sonar.server.es.EsTester;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.exceptions.UnauthorizedException;
@@ -47,6 +50,9 @@ import org.sonar.server.organization.TestOrganizationFlags;
import org.sonar.server.qualityprofile.QProfileFactory;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.user.index.UserIndex;
+import org.sonar.server.user.index.UserIndexDefinition;
+import org.sonar.server.user.index.UserIndexer;
import org.sonar.server.ws.WsActionTester;
import static com.google.common.collect.ImmutableList.of;
@@ -62,6 +68,8 @@ public class DeleteActionTest {
@Rule
public DbTester db = DbTester.create(System2.INSTANCE);
@Rule
+ public EsTester es = new EsTester(new UserIndexDefinition(new MapSettings()));
+ @Rule
public UserSessionRule userSession = UserSessionRule.standalone();
@Rule
public ExpectedException expectedException = ExpectedException.none();
@@ -72,7 +80,11 @@ public class DeleteActionTest {
private TestOrganizationFlags organizationFlags = TestOrganizationFlags.standalone().setEnabled(true);
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db);
private QProfileFactory qProfileFactory = new QProfileFactory(dbClient, mock(UuidFactory.class), System2.INSTANCE, mock(ActiveRuleIndexer.class));
- private DeleteAction underTest = new DeleteAction(userSession, db.getDbClient(), defaultOrganizationProvider, componentCleanerService, organizationFlags, qProfileFactory);
+ private UserIndex userIndex = new UserIndex(es.client());
+ private UserIndexer userIndexer = new UserIndexer(dbClient, es.client());
+
+ private DeleteAction underTest = new DeleteAction(userSession, dbClient, defaultOrganizationProvider, componentCleanerService, organizationFlags, userIndexer, qProfileFactory);
+
private WsActionTester wsTester = new WsActionTester(underTest);
@Test
@@ -290,6 +302,7 @@ public class DeleteActionTest {
db.organizations().addMember(org, user1);
db.organizations().addMember(otherOrg, user1);
db.organizations().addMember(org, user2);
+ userIndexer.index(Arrays.asList(user1.getLogin(), user2.getLogin()));
logInAsAdministrator(org);
sendRequest(org);
@@ -298,6 +311,8 @@ public class DeleteActionTest {
assertThat(db.getDbClient().organizationMemberDao().select(db.getSession(), org.getUuid(), user1.getId())).isNotPresent();
assertThat(db.getDbClient().organizationMemberDao().select(db.getSession(), org.getUuid(), user2.getId())).isNotPresent();
assertThat(db.getDbClient().organizationMemberDao().select(db.getSession(), otherOrg.getUuid(), user1.getId())).isPresent();
+ assertThat(userIndex.getNullableByLogin(user1.getLogin()).organizationUuids()).doesNotContain(org.getUuid()).contains(otherOrg.getUuid());
+ assertThat(userIndex.getNullableByLogin(user2.getLogin()).organizationUuids()).isEmpty();
}
@Test