]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8980 Reindex a user when adding an organization membership
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 21 Mar 2017 17:28:37 +0000 (18:28 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 24 Mar 2017 16:38:53 +0000 (17:38 +0100)
server/sonar-server/src/main/java/org/sonar/server/organization/ws/AddMemberAction.java
server/sonar-server/src/test/java/org/sonar/server/organization/ws/AddMemberActionTest.java

index 8de6650a589ba11d51e30267e6f6c0f59536a478..4eb1612ac81823edf6e22dc0be3e8554fc76952f 100644 (file)
@@ -32,6 +32,7 @@ import org.sonar.db.permission.OrganizationPermission;
 import org.sonar.db.user.UserDto;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.user.UserSession;
+import org.sonar.server.user.index.UserIndexer;
 
 import static java.lang.String.format;
 import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_LOGIN;
@@ -43,10 +44,12 @@ import static org.sonar.server.ws.WsUtils.checkFoundWithOptional;
 public class AddMemberAction implements OrganizationsWsAction {
   private final DbClient dbClient;
   private final UserSession userSession;
+  private final UserIndexer userIndexer;
 
-  public AddMemberAction(DbClient dbClient, UserSession userSession) {
+  public AddMemberAction(DbClient dbClient, UserSession userSession, UserIndexer userIndexer) {
     this.dbClient = dbClient;
     this.userSession = userSession;
+    this.userIndexer = userIndexer;
   }
 
   @Override
@@ -95,6 +98,7 @@ public class AddMemberAction implements OrganizationsWsAction {
 
       dbClient.organizationMemberDao().insert(dbSession, organizationMember);
       dbSession.commit();
+      userIndexer.index(user.getLogin());
     }
 
     response.noContent();
index 8b1851cb6c7d1ca11f157812ec88c6634b3dca48..d9ae10ce569627f7961e80c77c4e7eb30a127bab 100644 (file)
 
 package org.sonar.server.organization.ws;
 
+import java.util.List;
 import javax.annotation.Nullable;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.sonar.api.config.MapSettings;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.DbTester;
 import org.sonar.db.organization.OrganizationDto;
 import org.sonar.db.user.UserDto;
+import org.sonar.server.es.EsTester;
+import org.sonar.server.es.SearchOptions;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.user.index.UserDoc;
+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.user.index.UserQuery;
 import org.sonar.server.ws.TestRequest;
 import org.sonar.server.ws.TestResponse;
 import org.sonar.server.ws.WsActionTester;
@@ -52,11 +61,15 @@ public class AddMemberActionTest {
   @Rule
   public UserSessionRule userSession = UserSessionRule.standalone().logIn().setRoot();
   @Rule
+  public EsTester es = new EsTester(new UserIndexDefinition(new MapSettings()));
+  private UserIndex userIndex = new UserIndex(es.client());
+  @Rule
   public DbTester db = DbTester.create();
   private DbClient dbClient = db.getDbClient();
   private DbSession dbSession = db.getSession();
 
-  private WsActionTester ws = new WsActionTester(new AddMemberAction(dbClient, userSession));
+
+  private WsActionTester ws = new WsActionTester(new AddMemberAction(dbClient, userSession, new UserIndexer(dbClient, es.client())));
 
   private OrganizationDto organization;
   private UserDto user;
@@ -93,10 +106,13 @@ public class AddMemberActionTest {
   }
 
   @Test
-  public void add_member_in_db() {
+  public void add_member_in_db_and_user_index() {
     call(organization.getKey(), user.getLogin());
 
     assertMember(organization.getUuid(), user.getId());
+    List<UserDoc> userDocs = userIndex.search(UserQuery.builder().build(), new SearchOptions()).getDocs();
+    assertThat(userDocs).hasSize(1);
+    assertThat(userDocs.get(0).organizationUuids()).containsOnly(organization.getUuid());
   }
 
   @Test