From: Aurelien Poscia Date: Fri, 14 Jul 2023 09:45:49 +0000 (+0200) Subject: SONAR-19790 handled managed projects /api/permissions/[bulk_]apply_template X-Git-Tag: 10.2.0.77647~386 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f8db20b2213cfcde4c7e8256fdbe5c718a3dac2d;p=sonarqube.git SONAR-19790 handled managed projects /api/permissions/[bulk_]apply_template --- diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/ApplyTemplateActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/ApplyTemplateActionIT.java index fbd658b8eb6..594d47573bf 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/ApplyTemplateActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/ApplyTemplateActionIT.java @@ -38,6 +38,8 @@ import org.sonar.server.es.TestIndexers; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; +import org.sonar.server.management.ManagedInstanceChecker; +import org.sonar.server.management.ManagedProjectService; import org.sonar.server.permission.DefaultTemplatesResolver; import org.sonar.server.permission.DefaultTemplatesResolverImpl; import org.sonar.server.permission.PermissionTemplateService; @@ -46,6 +48,10 @@ import org.sonar.server.ws.TestRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import static org.sonar.api.resources.Qualifiers.APP; import static org.sonar.api.resources.Qualifiers.PROJECT; import static org.sonar.api.resources.Qualifiers.VIEW; @@ -72,9 +78,12 @@ public class ApplyTemplateActionIT extends BasePermissionWsIT newRequest(templateUuid, projectUuid, null)) + .isInstanceOf(BadRequestException.class) + .hasMessage("Operation not allowed when the project is externally managed."); + } + @Test public void fail_when_not_admin() { userSession.logIn().addPermission(SCAN); diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java index 1fa591ec7e3..f6ad527c94c 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java @@ -44,6 +44,7 @@ import org.sonar.server.es.TestIndexers; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.l18n.I18nRule; +import org.sonar.server.management.ManagedProjectService; import org.sonar.server.permission.DefaultTemplatesResolver; import org.sonar.server.permission.DefaultTemplatesResolverImpl; import org.sonar.server.permission.PermissionTemplateService; @@ -51,6 +52,10 @@ import org.sonar.server.permission.ws.BasePermissionWsIT; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import static org.sonar.api.resources.Qualifiers.APP; import static org.sonar.api.resources.Qualifiers.PROJECT; import static org.sonar.api.resources.Qualifiers.VIEW; @@ -75,11 +80,14 @@ public class BulkApplyTemplateActionIT extends BasePermissionWsIT" + + .setDescription("Apply a permission template to several components. Managed projects will be ignored.
" + "The template id or name must be provided.
" + "Requires the following permission: 'Administer System'.") .setPost(true) @@ -119,7 +123,7 @@ public class BulkApplyTemplateAction implements PermissionsWsAction { action.createParam(PARAM_VISIBILITY) .setDescription("Filter the projects that should be visible to everyone (%s), or only specific user/groups (%s).
" + - "If no visibility is specified, the default project visibility will be used.", + "If no visibility is specified, the default project visibility will be used.", Visibility.PUBLIC.getLabel(), Visibility.PRIVATE.getLabel()) .setRequired(false) .setInternal(true) @@ -154,9 +158,12 @@ public class BulkApplyTemplateAction implements PermissionsWsAction { ComponentQuery componentQuery = buildDbQuery(request); List components = dbClient.componentDao().selectByQuery(dbSession, componentQuery, 0, Integer.MAX_VALUE); - List entities = dbClient.entityDao().selectByKeys(dbSession, components.stream() + Set entityUuids = components.stream() .map(ComponentDto::getKey) - .collect(Collectors.toSet())); + .collect(Collectors.toSet()); + List entities = dbClient.entityDao().selectByKeys(dbSession, entityUuids).stream() + .filter(entity -> !managedProjectService.isProjectManaged(dbSession, entity.getUuid())) + .toList(); permissionTemplateService.applyAndCommit(dbSession, template, entities); }