From 69f31ac32627195d1e159d377120a13f28193839 Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Wed, 22 Mar 2017 15:53:55 +0100 Subject: [PATCH] SONAR-8980 Reindex users when deleting an organization --- .../server/organization/ws/DeleteAction.java | 7 ++++++- .../organization/ws/DeleteActionTest.java | 17 ++++++++++++++++- 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 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 -- 2.39.5