import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
import org.sonar.server.computation.component.TypeAwareVisitorAdapter;
+import org.sonar.server.issue.index.IssueAuthorizationIndexer;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
import static org.sonar.server.computation.component.Component.Type.VIEW;
private final DbClient dbClient;
private final DbIdsRepository dbIdsRepository;
+ private final IssueAuthorizationIndexer indexer;
private final PermissionRepository permissionRepository;
private final TreeRootHolder treeRootHolder;
- public ApplyPermissionsStep(DbClient dbClient, DbIdsRepository dbIdsRepository, PermissionRepository permissionRepository, TreeRootHolder treeRootHolder) {
+ public ApplyPermissionsStep(DbClient dbClient, DbIdsRepository dbIdsRepository, IssueAuthorizationIndexer indexer, PermissionRepository permissionRepository,
+ TreeRootHolder treeRootHolder) {
this.dbClient = dbClient;
this.dbIdsRepository = dbIdsRepository;
+ this.indexer = indexer;
this.permissionRepository = permissionRepository;
this.treeRootHolder = treeRootHolder;
}
if (dbClient.roleDao().countComponentPermissions(session, projectId) == 0) {
permissionRepository.grantDefaultRoles(session, projectId, Qualifiers.PROJECT);
session.commit();
+ indexer.index();
}
} finally {
MyBatis.closeQuietly(session);
*/
package org.sonar.server.computation.step;
+import java.util.List;
+import java.util.Map;
+import org.elasticsearch.search.SearchHit;
import org.junit.After;
import org.junit.Before;
+import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.sonar.server.computation.component.MutableDbIdsRepositoryRule;
import org.sonar.server.computation.component.ReportComponent;
import org.sonar.server.computation.component.ViewsComponent;
+import org.sonar.server.es.EsTester;
+import org.sonar.server.issue.index.IssueAuthorizationIndexer;
+import org.sonar.server.issue.index.IssueIndexDefinition;
import org.sonar.test.DbTests;
import static org.assertj.core.api.Assertions.assertThat;
private static final String ROOT_UUID = "ROOT_UUID";
private static final long SOME_DATE = 1000L;
+ @ClassRule
+ public static EsTester esTester = new EsTester().addDefinitions(new IssueIndexDefinition(new Settings()));
+
@Rule
public DbTester dbTester = DbTester.create(System2.INSTANCE);
Settings settings;
+ IssueAuthorizationIndexer issueAuthorizationIndexer;
+
ApplyPermissionsStep step;
@Before
public void setUp() {
dbSession = dbClient.openSession(false);
-
settings = new Settings();
+ esTester.truncateIndices();
- step = new ApplyPermissionsStep(dbClient, dbIdsRepository, new PermissionRepository(dbClient, settings), treeRootHolder);
+ issueAuthorizationIndexer = new IssueAuthorizationIndexer(dbClient, esTester.client());
+ issueAuthorizationIndexer.setEnabled(true);
+
+ step = new ApplyPermissionsStep(dbClient, dbIdsRepository, issueAuthorizationIndexer, new PermissionRepository(dbClient, settings), treeRootHolder);
}
@After
}
@Test
- public void grant_permission_for_report() {
+ public void grant_permission_on_new_project() {
ComponentDto projectDto = ComponentTesting.newProjectDto(ROOT_UUID).setKey(ROOT_KEY);
dbClient.componentDao().insert(dbSession, projectDto);
assertThat(dbClient.componentDao().selectOrFailByKey(dbSession, ROOT_KEY).getAuthorizationUpdatedAt()).isNotNull();
assertThat(dbClient.roleDao().selectGroupPermissions(dbSession, DefaultGroups.ANYONE, projectDto.getId())).containsOnly(UserRole.USER);
+ verifyAuthorisationIndex(ROOT_UUID, DefaultGroups.ANYONE);
}
@Test
- public void nothing_to_do_for_report() {
+ public void nothing_to_do_on_existing_project() {
ComponentDto projectDto = ComponentTesting.newProjectDto(ROOT_UUID).setKey(ROOT_KEY).setAuthorizationUpdatedAt(SOME_DATE);
dbClient.componentDao().insert(dbSession, projectDto);
// Permissions are already set on the project
}
@Test
- public void grant_permission_for_view() {
+ public void grant_permission_on_new_view() {
ComponentDto viewDto = newView(ROOT_UUID).setKey(ROOT_KEY);
dbClient.componentDao().insert(dbSession, viewDto);
}
@Test
- public void nothing_to_do_for_view() {
+ public void nothing_to_do_on_existing_view() {
ComponentDto viewDto = newView(ROOT_UUID).setKey(ROOT_KEY).setAuthorizationUpdatedAt(SOME_DATE);
dbClient.componentDao().insert(dbSession, viewDto);
// Permissions are already set on the view
dbSession.commit();
}
+ private void verifyAuthorisationIndex(String rootUuid, String groupPermission){
+ List<SearchHit> issueAuthorizationHits = esTester.getDocuments(IssueIndexDefinition.INDEX, IssueIndexDefinition.TYPE_AUTHORIZATION);
+ assertThat(issueAuthorizationHits).hasSize(1);
+ Map<String, Object> issueAuthorization = issueAuthorizationHits.get(0).sourceAsMap();
+ assertThat(issueAuthorization.get("project")).isEqualTo(rootUuid);
+ assertThat((List<String>) issueAuthorization.get("groups")).containsOnly(groupPermission);
+ assertThat((List<String>) issueAuthorization.get("users")).isEmpty();
+ }
+
@Override
protected ComputationStep step() {
return step;