aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-08-28 15:43:20 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-08-28 17:30:34 +0200
commitffc4e81629792f92b532e661b7a5d2a05550fd3a (patch)
tree74094bbe16ea21d20334a643af8e20dfe7d85c5d /server/sonar-server
parent332c20dbcc77765ac095634817b5d60c9bbe1dcf (diff)
downloadsonarqube-ffc4e81629792f92b532e661b7a5d2a05550fd3a.tar.gz
sonarqube-ffc4e81629792f92b532e661b7a5d2a05550fd3a.zip
SONAR-6498 WS permissions/delete_template impossible to delete a default template
Diffstat (limited to 'server/sonar-server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/DefaultPermissionTemplates.java32
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateService.java10
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java70
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java29
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java13
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/ResourceTypeToQualifier.java39
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java11
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java11
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/PermissionFinderTest.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateServiceTest.java22
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java92
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java75
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java9
24 files changed, 377 insertions, 78 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/DefaultPermissionTemplates.java b/server/sonar-server/src/main/java/org/sonar/server/permission/DefaultPermissionTemplates.java
new file mode 100644
index 00000000000..ed1743a0537
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/DefaultPermissionTemplates.java
@@ -0,0 +1,32 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.permission;
+
+import static java.lang.String.format;
+
+public class DefaultPermissionTemplates {
+ public static final String DEFAULT_TEMPLATE_PROPERTY = "sonar.permission.template.default";
+ private static final String DEFAULT_ROOT_QUALIFIER_TEMPLATE_PROPERTY = "sonar.permission.template.%s.default";
+
+ public static String defaultRootQualifierTemplateProperty(String qualifier) {
+ return format(DEFAULT_ROOT_QUALIFIER_TEMPLATE_PROPERTY, qualifier);
+ }
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java
index cff70f7e089..393d594d963 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java
@@ -152,7 +152,7 @@ public class PermissionFinder {
}
private Long templateId(String templateKey) {
- PermissionTemplateDto dto = permissionTemplateDao.selectByKey(templateKey);
+ PermissionTemplateDto dto = permissionTemplateDao.selectByUuid(templateKey);
if (dto == null) {
throw new NotFoundException(String.format("Template '%s' does not exist", templateKey));
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateService.java b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateService.java
index 1d658d0d195..d7e412765d9 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateService.java
@@ -75,7 +75,7 @@ public class PermissionTemplateService {
@CheckForNull
public PermissionTemplate selectPermissionTemplate(String templateKey) {
checkGlobalAdminUser(userSession);
- PermissionTemplateDto permissionTemplateDto = permissionTemplateDao.selectByKeyWithUserAndGroupPermissions(templateKey);
+ PermissionTemplateDto permissionTemplateDto = permissionTemplateDao.selectByUuidWithUserAndGroupPermissions(templateKey);
return PermissionTemplate.create(permissionTemplateDto);
}
@@ -132,7 +132,13 @@ public class PermissionTemplateService {
public void deletePermissionTemplate(Long templateId) {
checkGlobalAdminUser(userSession);
- permissionTemplateDao.deleteById(templateId);
+ DbSession dbSession = dbClient.openSession(false);
+ try {
+ permissionTemplateDao.deleteById(dbSession, templateId);
+ dbSession.commit();
+ } finally {
+ dbClient.closeSession(dbSession);
+ }
}
/**
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java
index a0a34505897..55fde3b4055 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java
@@ -87,7 +87,7 @@ abstract class PermissionTemplateUpdater {
}
private Long getTemplateId(String key) {
- PermissionTemplateDto permissionTemplateDto = dbClient.permissionTemplateDao().selectByKey(key);
+ PermissionTemplateDto permissionTemplateDto = dbClient.permissionTemplateDao().selectByUuid(key);
if (permissionTemplateDto == null) {
throw new BadRequestException("Unknown template: " + key);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java
index 04141c3dad4..92ea3b0097d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java
@@ -31,6 +31,7 @@ import org.sonar.server.user.UserSession;
import org.sonarqube.ws.Permissions;
import org.sonarqube.ws.Permissions.PermissionTemplate;
+import static java.lang.String.format;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_DESCRIPTION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;
@@ -100,8 +101,7 @@ public class CreateTemplateAction implements PermissionsWsAction {
validateTemplateNameFormat(name);
PermissionTemplateDto permissionTemplateWithSameName = dbClient.permissionTemplateDao().selectByName(dbSession, name);
- checkRequest(permissionTemplateWithSameName == null, String.format
- (MSG_TEMPLATE_WITH_SAME_NAME, name));
+ checkRequest(permissionTemplateWithSameName == null, format(MSG_TEMPLATE_WITH_SAME_NAME, name));
}
private PermissionTemplateDto insertTemplate(DbSession dbSession, String name, String description, String projectPattern) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java
new file mode 100644
index 00000000000..1f6c8536408
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java
@@ -0,0 +1,70 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.permission.ws;
+
+import com.google.common.base.Function;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableSet;
+import java.util.Set;
+import javax.annotation.Nonnull;
+import org.sonar.api.config.Settings;
+import org.sonar.api.resources.ResourceTypes;
+
+import static com.google.common.base.Objects.firstNonNull;
+import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY;
+import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
+import static org.sonar.server.permission.ws.ResourceTypeToQualifier.RESOURCE_TYPE_TO_QUALIFIER;
+
+public class DefaultPermissionTemplateFinder {
+ private final Settings settings;
+ private final ResourceTypes resourceTypes;
+
+ public DefaultPermissionTemplateFinder(Settings settings, ResourceTypes resourceTypes) {
+ this.settings = settings;
+ this.resourceTypes = resourceTypes;
+ }
+
+ public Set<String> getDefaultTemplateUuids() {
+ return ImmutableSet.<String>builder()
+ .addAll(
+ FluentIterable.from(resourceTypes.getRoots())
+ .transform(RESOURCE_TYPE_TO_QUALIFIER)
+ .transform(new QualifierToDefaultTemplate(settings))
+ .toSet())
+ .add(settings.getString(DEFAULT_TEMPLATE_PROPERTY))
+ .build();
+ }
+
+ private static class QualifierToDefaultTemplate implements Function<String, String> {
+ private final Settings settings;
+
+ QualifierToDefaultTemplate(Settings settings) {
+ this.settings = settings;
+ }
+
+ @Override
+ public String apply(@Nonnull String qualifier) {
+ String qualifierProperty = settings.getString(defaultRootQualifierTemplateProperty(qualifier));
+ return firstNonNull(qualifierProperty, settings.getString(DEFAULT_TEMPLATE_PROPERTY));
+ }
+ }
+
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java
index 8f15173e3e3..1e25d69cad1 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java
@@ -20,24 +20,31 @@
package org.sonar.server.permission.ws;
+import java.util.Set;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
+import org.sonar.db.permission.PermissionTemplateDto;
import org.sonar.server.user.UserSession;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter;
+import static org.sonar.server.ws.WsUtils.checkRequest;
public class DeleteTemplateAction implements PermissionsWsAction {
private final DbClient dbClient;
private final UserSession userSession;
+ private final PermissionDependenciesFinder finder;
+ private final DefaultPermissionTemplateFinder defaultPermissionTemplateFinder;
- public DeleteTemplateAction(DbClient dbClient, UserSession userSession) {
+ public DeleteTemplateAction(DbClient dbClient, UserSession userSession, PermissionDependenciesFinder finder, DefaultPermissionTemplateFinder defaultPermissionTemplateFinder) {
this.dbClient = dbClient;
this.userSession = userSession;
+ this.finder = finder;
+ this.defaultPermissionTemplateFinder = defaultPermissionTemplateFinder;
}
@Override
@@ -55,16 +62,28 @@ public class DeleteTemplateAction implements PermissionsWsAction {
@Override
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);
- String key = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);
+ String uuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);
+ checkTemplateUuidIsNotDefault(uuid);
+
+ deleteTemplate(uuid);
+
+ wsResponse.noContent();
+ }
+
+ private void deleteTemplate(String uuid) {
DbSession dbSession = dbClient.openSession(false);
try {
- dbClient.permissionTemplateDao().deleteByKey(dbSession, key);
+ PermissionTemplateDto template = finder.getTemplate(dbSession, uuid);
+ dbClient.permissionTemplateDao().deleteById(dbSession, template.getId());
dbSession.commit();
-
- wsResponse.noContent();
} finally {
dbClient.closeSession(dbSession);
}
}
+
+ private void checkTemplateUuidIsNotDefault(String key) {
+ Set<String> defaultTemplateUuids = defaultPermissionTemplateFinder.getDefaultTemplateUuids();
+ checkRequest(!defaultTemplateUuids.contains(key), "It is not possible to delete a default template");
+ }
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java
index a6a4e862d8c..dcd4d66dbb3 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java
@@ -95,8 +95,8 @@ public class PermissionDependenciesFinder {
format("User with login '%s' is not found'", userLogin));
}
- PermissionTemplateDto getTemplate(DbSession dbSession, String templateKey) {
- return checkFound(dbClient.permissionTemplateDao().selectByKey(dbSession, templateKey),
- format("Permission template with key '%s' is not found", templateKey));
+ PermissionTemplateDto getTemplate(DbSession dbSession, String uuid) {
+ return checkFound(dbClient.permissionTemplateDao().selectByUuid(dbSession, uuid),
+ format("Permission template with id '%s' is not found", uuid));
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java
index 6998cf23015..6769088cde5 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java
@@ -27,6 +27,7 @@ public class PermissionsWsModule extends Module {
protected void configureModule() {
add(
PermissionsWs.class,
+ // actions
AddGroupAction.class,
AddUserAction.class,
RemoveGroupAction.class,
@@ -34,16 +35,18 @@ public class PermissionsWsModule extends Module {
UsersAction.class,
GroupsAction.class,
SearchGlobalPermissionsAction.class,
- PermissionChangeBuilder.class,
SearchProjectPermissionsAction.class,
- SearchProjectPermissionsDataLoader.class,
- PermissionDependenciesFinder.class,
- AddUserToTemplateAction.class,
RemoveUserFromTemplateAction.class,
+ AddUserToTemplateAction.class,
AddGroupToTemplateAction.class,
RemoveGroupFromTemplateAction.class,
CreateTemplateAction.class,
UpdateTemplateAction.class,
- DeleteTemplateAction.class);
+ DeleteTemplateAction.class,
+ // utility classes
+ PermissionChangeBuilder.class,
+ SearchProjectPermissionsDataLoader.class,
+ PermissionDependenciesFinder.class,
+ DefaultPermissionTemplateFinder.class);
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/ResourceTypeToQualifier.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/ResourceTypeToQualifier.java
new file mode 100644
index 00000000000..a751be79838
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/ResourceTypeToQualifier.java
@@ -0,0 +1,39 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.permission.ws;
+
+import com.google.common.base.Function;
+import javax.annotation.Nonnull;
+import org.sonar.api.resources.ResourceType;
+
+class ResourceTypeToQualifier {
+
+ static final Function<ResourceType, String> RESOURCE_TYPE_TO_QUALIFIER = Singleton.INSTANCE;
+
+ private enum Singleton implements Function<ResourceType, String> {
+ INSTANCE;
+
+ @Override
+ public String apply(@Nonnull ResourceType resourceType) {
+ return resourceType.getQualifier();
+ }
+ }
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java
index 925b70d735f..1326164704b 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java
@@ -31,7 +31,6 @@ import java.util.List;
import javax.annotation.Nonnull;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
-import org.sonar.api.resources.ResourceType;
import org.sonar.api.resources.ResourceTypes;
import org.sonar.api.server.ws.Request;
import org.sonar.api.utils.Paging;
@@ -46,6 +45,7 @@ import static org.sonar.api.server.ws.WebService.Param.PAGE;
import static org.sonar.api.server.ws.WebService.Param.PAGE_SIZE;
import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY;
import static org.sonar.api.utils.Paging.forPageIndex;
+import static org.sonar.server.permission.ws.ResourceTypeToQualifier.RESOURCE_TYPE_TO_QUALIFIER;
import static org.sonar.server.permission.ws.SearchProjectPermissionsData.newBuilder;
public class SearchProjectPermissionsDataLoader {
@@ -56,7 +56,7 @@ public class SearchProjectPermissionsDataLoader {
public SearchProjectPermissionsDataLoader(DbClient dbClient, ComponentFinder componentFinder, ResourceTypes resourceTypes) {
this.dbClient = dbClient;
this.componentFinder = componentFinder;
- this.rootQualifiers = Collections2.transform(resourceTypes.getRoots(), new ResourceTypeToQualifierFunction());
+ this.rootQualifiers = Collections2.transform(resourceTypes.getRoots(), RESOURCE_TYPE_TO_QUALIFIER);
}
public SearchProjectPermissionsData load(Request wsRequest) {
@@ -135,11 +135,4 @@ public class SearchProjectPermissionsDataLoader {
return component.getId();
}
}
-
- private static class ResourceTypeToQualifierFunction implements Function<ResourceType, String> {
- @Override
- public String apply(@Nonnull ResourceType resourceType) {
- return resourceType.getQualifier();
- }
- }
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
index b54beb3e14f..688e3bf3c70 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
@@ -20,6 +20,7 @@
package org.sonar.server.startup;
+import org.sonar.api.resources.Qualifiers;
import org.sonar.api.security.DefaultGroups;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
@@ -32,10 +33,10 @@ import org.sonar.db.permission.PermissionTemplateDto;
import org.sonar.db.user.GroupDto;
import org.sonar.server.platform.PersistentSettings;
-public class RegisterPermissionTemplates {
+import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY;
+import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
- public static final String DEFAULT_TEMPLATE_PROPERTY = "sonar.permission.template.default";
- public static final String DEFAULT_PROJECTS_TEMPLATE_PROPERTY = "sonar.permission.template.TRK.default";
+public class RegisterPermissionTemplates {
private static final Logger LOG = Loggers.get(RegisterPermissionTemplates.class);
@@ -52,7 +53,7 @@ public class RegisterPermissionTemplates {
if (shouldRegister()) {
if (hasExistingPermissionsConfig()) {
- String projectsPermissionsKey = settings.getString(DEFAULT_PROJECTS_TEMPLATE_PROPERTY);
+ String projectsPermissionsKey = settings.getString(defaultRootQualifierTemplateProperty(Qualifiers.PROJECT));
setDefaultProperty(projectsPermissionsKey);
} else {
insertDefaultTemplate();
@@ -64,7 +65,7 @@ public class RegisterPermissionTemplates {
}
private boolean hasExistingPermissionsConfig() {
- return settings.getString(DEFAULT_PROJECTS_TEMPLATE_PROPERTY) != null;
+ return settings.getString(defaultRootQualifierTemplateProperty(Qualifiers.PROJECT)) != null;
}
private boolean shouldRegister() {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionFinderTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionFinderTest.java
index b3592ca78a2..36cf19fc38e 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionFinderTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionFinderTest.java
@@ -264,7 +264,7 @@ public class PermissionFinderTest {
@Test
public void find_users_from_permission_template() {
- when(permissionTemplateDao.selectByKey(anyString())).thenReturn(new PermissionTemplateDto().setId(1L).setKee("my_template"));
+ when(permissionTemplateDao.selectByUuid(anyString())).thenReturn(new PermissionTemplateDto().setId(1L).setKee("my_template"));
when(permissionTemplateDao.selectUsers(any(DbSession.class), any(PermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(
newArrayList(new UserWithPermissionDto().setName("user1").setPermission("user"))
@@ -279,7 +279,7 @@ public class PermissionFinderTest {
@Test
public void fail_to_find_users_from_permission_template_when_template_not_found() {
- when(permissionTemplateDao.selectByKey(anyString())).thenReturn(null);
+ when(permissionTemplateDao.selectByUuid(anyString())).thenReturn(null);
try {
underTest.findUsersWithPermissionTemplate(PermissionQuery.builder().permission("user").template("Unknown").build());
@@ -291,7 +291,7 @@ public class PermissionFinderTest {
@Test
public void find_groups_from_permission_template() {
- when(permissionTemplateDao.selectByKey(anyString())).thenReturn(new PermissionTemplateDto().setId(1L).setKee("my_template"));
+ when(permissionTemplateDao.selectByUuid(anyString())).thenReturn(new PermissionTemplateDto().setId(1L).setKee("my_template"));
when(permissionTemplateDao.selectGroups(any(DbSession.class), any(PermissionQuery.class), anyLong())).thenReturn(
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
@@ -305,7 +305,7 @@ public class PermissionFinderTest {
@Test
public void fail_to_find_groups_from_permission_template_when_template_not_found() {
- when(permissionTemplateDao.selectByKey(anyString())).thenReturn(null);
+ when(permissionTemplateDao.selectByUuid(anyString())).thenReturn(null);
try {
underTest.findGroupsWithPermissionTemplate(PermissionQuery.builder().permission("user").template("Unknown").build());
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateServiceTest.java
index 02cdf8b6c19..6dd8aab0185 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateServiceTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateServiceTest.java
@@ -147,11 +147,11 @@ public class PermissionTemplateServiceTest {
@Test
public void should_delete_permission_template() {
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
underTest.deletePermissionTemplate(1L);
- verify(permissionTemplateDao, times(1)).deleteById(1L);
+ verify(permissionTemplateDao).deleteById(any(DbSession.class), eq(1L));
}
@Test
@@ -177,7 +177,7 @@ public class PermissionTemplateServiceTest {
.setUsersPermissions(usersPermissions)
.setGroupsByPermission(groupsPermissions);
- when(permissionTemplateDao.selectByKeyWithUserAndGroupPermissions("my template")).thenReturn(permissionTemplateDto);
+ when(permissionTemplateDao.selectByUuidWithUserAndGroupPermissions("my template")).thenReturn(permissionTemplateDto);
PermissionTemplate permissionTemplate = underTest.selectPermissionTemplate("my template");
@@ -271,7 +271,7 @@ public class PermissionTemplateServiceTest {
public void should_add_user_permission() {
UserDto userDto = new UserDto().setId(1L).setLogin("user").setName("user");
when(userDao.selectActiveUserByLogin("user")).thenReturn(userDto);
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
underTest.addUserPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "user");
@@ -283,7 +283,7 @@ public class PermissionTemplateServiceTest {
expected.expect(BadRequestException.class);
expected.expectMessage("Unknown user:");
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
when(userDao.selectActiveUserByLogin("unknown")).thenReturn(null);
underTest.addUserPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "unknown");
@@ -293,7 +293,7 @@ public class PermissionTemplateServiceTest {
public void should_remove_user_permission() {
UserDto userDto = new UserDto().setId(1L).setLogin("user").setName("user");
when(userDao.selectActiveUserByLogin("user")).thenReturn(userDto);
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
underTest.removeUserPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "user");
@@ -304,7 +304,7 @@ public class PermissionTemplateServiceTest {
public void should_add_group_permission() {
GroupDto groupDto = new GroupDto().setId(1L).setName("group");
when(groupDao.selectByName(any(DbSession.class), eq("group"))).thenReturn(groupDto);
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
underTest.addGroupPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "group");
@@ -316,7 +316,7 @@ public class PermissionTemplateServiceTest {
expected.expect(BadRequestException.class);
expected.expectMessage("Unknown group:");
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
when(groupDao.selectByName(any(DbSession.class), eq("unknown"))).thenReturn(null);
underTest.addGroupPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "unknown");
@@ -326,7 +326,7 @@ public class PermissionTemplateServiceTest {
public void should_remove_group_permission() {
GroupDto groupDto = new GroupDto().setId(1L).setName("group");
when(groupDao.selectByName(any(DbSession.class), eq("group"))).thenReturn(groupDto);
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
underTest.removeGroupPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "group");
@@ -335,7 +335,7 @@ public class PermissionTemplateServiceTest {
@Test
public void should_add_permission_to_anyone_group() {
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
underTest.addGroupPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "Anyone");
@@ -345,7 +345,7 @@ public class PermissionTemplateServiceTest {
@Test
public void should_remove_permission_from_anyone_group() {
- when(permissionTemplateDao.selectByKey(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
+ when(permissionTemplateDao.selectByUuid(DEFAULT_KEY)).thenReturn(DEFAULT_TEMPLATE);
underTest.removeGroupPermission(DEFAULT_KEY, DEFAULT_PERMISSION, "Anyone");
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java
index 270bf15228e..2e346fe58ce 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java
@@ -76,7 +76,7 @@ public class PermissionTemplateUpdaterTest {
public void should_execute_on_valid_parameters() {
final PermissionTemplateDao permissionTemplateDao = mock(PermissionTemplateDao.class);
- when(permissionTemplateDao.selectByKey("my_template")).thenReturn(new PermissionTemplateDto().setId(1L));
+ when(permissionTemplateDao.selectByUuid("my_template")).thenReturn(new PermissionTemplateDto().setId(1L));
when(dbClient.permissionTemplateDao()).thenReturn(permissionTemplateDao);
PermissionTemplateUpdater updater =
@@ -97,7 +97,7 @@ public class PermissionTemplateUpdaterTest {
expected.expectMessage("Unknown template:");
final PermissionTemplateDao permissionTemplateDao = mock(PermissionTemplateDao.class);
- when(permissionTemplateDao.selectByKey("my_template")).thenReturn(null);
+ when(permissionTemplateDao.selectByUuid("my_template")).thenReturn(null);
PermissionTemplateUpdater updater =
new PermissionTemplateUpdater(dbClient, userSessionRule, "my_template", UserRole.USER, "user") {
@@ -113,7 +113,7 @@ public class PermissionTemplateUpdaterTest {
expected.expect(BadRequestException.class);
final PermissionTemplateDao permissionTemplateDao = mock(PermissionTemplateDao.class);
- when(permissionTemplateDao.selectByKey("my_template")).thenReturn(new PermissionTemplateDto().setId(1L));
+ when(permissionTemplateDao.selectByUuid("my_template")).thenReturn(new PermissionTemplateDto().setId(1L));
when(dbClient.permissionTemplateDao()).thenReturn(permissionTemplateDao);
PermissionTemplateUpdater updater =
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java
index 559d4660572..16c4e5ea593 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java
@@ -189,7 +189,7 @@ public class AddGroupToTemplateActionTest {
@Test
public void fail_if_template_key_does_not_exist() {
expectedException.expect(NotFoundException.class);
- expectedException.expectMessage("Permission template with key 'unknown-key' is not found");
+ expectedException.expectMessage("Permission template with id 'unknown-key' is not found");
newRequest(GROUP_NAME, "unknown-key", CODEVIEWER);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java
index 5f4afa4bb4d..023da2d0854 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java
@@ -157,7 +157,7 @@ public class AddUserToTemplateActionTest {
@Test
public void fail_if_template_key_does_not_exist() {
expectedException.expect(NotFoundException.class);
- expectedException.expectMessage("Permission template with key 'unknown-key' is not found");
+ expectedException.expectMessage("Permission template with id 'unknown-key' is not found");
newRequest(USER_LOGIN, "unknown-key", CODEVIEWER);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java
new file mode 100644
index 00000000000..c7425eb3c66
--- /dev/null
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java
@@ -0,0 +1,92 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.permission.ws;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import org.junit.Before;
+import org.junit.Test;
+import org.sonar.api.config.Settings;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.ResourceType;
+import org.sonar.api.resources.ResourceTypes;
+
+import static java.util.Arrays.asList;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY;
+import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
+
+public class DefaultPermissionTemplateFinderTest {
+
+ ResourceTypes resourceTypes = mock(ResourceTypes.class);
+ Settings settings = new Settings();
+
+ DefaultPermissionTemplateFinder underTest;
+
+ @Before
+ public void setUp() {
+ underTest = new DefaultPermissionTemplateFinder(settings, resourceTypes);
+ settings
+ .setProperty(DEFAULT_TEMPLATE_PROPERTY, "default-template-uuid")
+ .setProperty(defaultRootQualifierTemplateProperty(Qualifiers.PROJECT), "default-project-template-uuid")
+ .setProperty(defaultRootQualifierTemplateProperty("DEV"), "default-dev-template-uuid")
+ .setProperty(defaultRootQualifierTemplateProperty(Qualifiers.VIEW), "default-view-template-uuid");
+ when(resourceTypes.getRoots()).thenReturn(rootResourceTypes());
+ }
+
+ @Test
+ public void get_default_template_uuids_in_settings() {
+ Set<String> result = underTest.getDefaultTemplateUuids();
+
+ assertThat(result).containsOnly("default-template-uuid", "default-project-template-uuid", "default-view-template-uuid", "default-dev-template-uuid");
+ }
+
+ @Test
+ public void get_default_template_uuid_if_no_root_resource() {
+ when(resourceTypes.getRoots()).thenReturn(Collections.<ResourceType>emptySet());
+
+ Set<String> result = underTest.getDefaultTemplateUuids();
+
+ assertThat(result).containsOnly("default-template-uuid");
+ }
+
+ @Test
+ public void get_default_template_uuid_if_no_property() {
+ settings = new Settings();
+ settings.setProperty(DEFAULT_TEMPLATE_PROPERTY, "default-template-uuid");
+ underTest = new DefaultPermissionTemplateFinder(settings, resourceTypes);
+
+ Set<String> result = underTest.getDefaultTemplateUuids();
+
+ assertThat(result).containsOnly("default-template-uuid");
+ }
+
+ private static List<ResourceType> rootResourceTypes() {
+ ResourceType project = ResourceType.builder(Qualifiers.PROJECT).build();
+ ResourceType view = ResourceType.builder(Qualifiers.VIEW).build();
+ ResourceType dev = ResourceType.builder("DEV").build();
+
+ return asList(project, view, dev);
+ }
+}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java
index ce7bf055326..319a7e1fa22 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java
@@ -20,18 +20,27 @@
package org.sonar.server.permission.ws;
+import java.util.Collections;
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.utils.System2;
+import org.sonar.api.web.UserRole;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.permission.PermissionTemplateDto;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.GroupTesting;
+import org.sonar.db.user.UserDto;
+import org.sonar.db.user.UserTesting;
+import org.sonar.server.component.ComponentFinder;
+import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.ForbiddenException;
+import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
@@ -39,12 +48,15 @@ import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.internal.util.collections.Sets.newSet;
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
public class DeleteTemplateActionTest {
- static final String TEMPLATE_KEY = "permission-template-key";
+ static final String TEMPLATE_UUID = "permission-template-uuid";
@Rule
public DbTester db = DbTester.create(System2.INSTANCE);
@@ -56,6 +68,8 @@ public class DeleteTemplateActionTest {
WsActionTester ws;
DbClient dbClient;
DbSession dbSession;
+ DefaultPermissionTemplateFinder defautTemplatePermissionFinder;
+
PermissionTemplateDto permissionTemplate;
@Before
@@ -64,20 +78,40 @@ public class DeleteTemplateActionTest {
dbClient = db.getDbClient();
dbSession = db.getSession();
- ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession));
-
- permissionTemplate = insertTemplate(newPermissionTemplateDto().setKee("permission-template-key"));
- commit();
- assertThat(dbClient.permissionTemplateDao().selectByKey(dbSession, TEMPLATE_KEY)).isNotNull();
+ defautTemplatePermissionFinder = mock(DefaultPermissionTemplateFinder.class);
+ when(defautTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(Collections.<String>emptySet());
+ PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient));
+ ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession, finder, defautTemplatePermissionFinder));
+
+ permissionTemplate = insertTemplateAndAssociatedPermissions(newPermissionTemplateDto().setKee(TEMPLATE_UUID));
+ PermissionTemplateDto permissionTemplateInDatabase = dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID);
+ assertThat(permissionTemplateInDatabase.getKee()).isEqualTo(TEMPLATE_UUID);
+ assertThat(permissionTemplateInDatabase.getGroupsPermissions()).isNotEmpty();
+ assertThat(permissionTemplateInDatabase.getUsersPermissions()).isNotEmpty();
}
@Test
public void delete_template_in_db() {
-
- TestResponse result = newRequest(TEMPLATE_KEY);
+ TestResponse result = newRequest(TEMPLATE_UUID);
assertThat(result.getInput()).isEmpty();
- assertThat(dbClient.permissionTemplateDao().selectByKey(dbSession, TEMPLATE_KEY)).isNull();
+ assertThat(dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID)).isNull();
+ }
+
+ @Test
+ public void fail_if_uuid_is_not_known() {
+ expectedException.expect(NotFoundException.class);
+
+ newRequest("unknown-template-uuid");
+ }
+
+ @Test
+ public void fail_if_template_is_default() {
+ expectedException.expect(BadRequestException.class);
+ expectedException.expectMessage("It is not possible to delete a default template");
+ when(defautTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(newSet(TEMPLATE_UUID));
+
+ newRequest(TEMPLATE_UUID);
}
@Test
@@ -85,7 +119,7 @@ public class DeleteTemplateActionTest {
expectedException.expect(UnauthorizedException.class);
userSession.anonymous();
- newRequest(TEMPLATE_KEY);
+ newRequest(TEMPLATE_UUID);
}
@Test
@@ -93,28 +127,35 @@ public class DeleteTemplateActionTest {
expectedException.expect(ForbiddenException.class);
userSession.login().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN);
- newRequest(TEMPLATE_KEY);
+ newRequest(TEMPLATE_UUID);
}
@Test
- public void fail_if_key_is_not_provided() {
+ public void fail_if_uuid_is_not_provided() {
expectedException.expect(IllegalArgumentException.class);
newRequest(null);
}
- private PermissionTemplateDto insertTemplate(PermissionTemplateDto template) {
- return dbClient.permissionTemplateDao().insert(dbSession, template);
+ private PermissionTemplateDto insertTemplateAndAssociatedPermissions(PermissionTemplateDto template) {
+ dbClient.permissionTemplateDao().insert(dbSession, template);
+ UserDto user = dbClient.userDao().insert(dbSession, UserTesting.newUserDto().setActive(true));
+ GroupDto group = dbClient.groupDao().insert(dbSession, GroupTesting.newGroupDto());
+ dbClient.permissionTemplateDao().insertUserPermission(dbSession, template.getId(), user.getId(), UserRole.ADMIN);
+ dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), group.getId(), UserRole.CODEVIEWER);
+ commit();
+
+ return template;
}
private void commit() {
dbSession.commit();
}
- private TestResponse newRequest(@Nullable String key) {
+ private TestResponse newRequest(@Nullable String id) {
TestRequest request = ws.newRequest();
- if (key != null) {
- request.setParam(PARAM_TEMPLATE_ID, key);
+ if (id != null) {
+ request.setParam(PARAM_TEMPLATE_ID, id);
}
TestResponse result = executeRequest(request);
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java
index 69eadbe065f..c8c59d23090 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java
@@ -30,6 +30,6 @@ public class PermissionsWsModuleTest {
public void verify_count_of_added_components() {
ComponentContainer container = new ComponentContainer();
new PermissionsWsModule().configure(container);
- assertThat(container.size()).isEqualTo(21);
+ assertThat(container.size()).isEqualTo(22);
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java
index 28e64178f61..9d2da24e995 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java
@@ -189,7 +189,7 @@ public class RemoveGroupFromTemplateActionTest {
@Test
public void fail_if_template_key_does_not_exist() {
expectedException.expect(NotFoundException.class);
- expectedException.expectMessage("Permission template with key 'unknown-key' is not found");
+ expectedException.expectMessage("Permission template with id 'unknown-key' is not found");
newRequest(GROUP_NAME, "unknown-key", PERMISSION);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java
index 7b42bab1fd1..08ffe9ca61b 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java
@@ -181,7 +181,7 @@ public class RemoveUserFromTemplateActionTest {
@Test
public void fail_if_template_key_does_not_exist() {
expectedException.expect(NotFoundException.class);
- expectedException.expectMessage("Permission template with key 'unknown-key' is not found");
+ expectedException.expectMessage("Permission template with id 'unknown-key' is not found");
newRequest(USER_LOGIN, "unknown-key", DEFAULT_PERMISSION);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java
index e9c1afa6f6d..684f96ed564 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java
@@ -108,7 +108,7 @@ public class UpdateTemplateActionTest {
public void update_with_the_same_values() {
newRequest(templateDto.getKee(), templateDto.getName(), templateDto.getDescription(), templateDto.getKeyPattern());
- PermissionTemplateDto updatedTemplate = dbClient.permissionTemplateDao().selectByKey(dbSession, templateDto.getKee());
+ PermissionTemplateDto updatedTemplate = dbClient.permissionTemplateDao().selectByUuid(dbSession, templateDto.getKee());
assertThat(updatedTemplate.getName()).isEqualTo(templateDto.getName());
assertThat(updatedTemplate.getDescription()).isEqualTo(templateDto.getDescription());
assertThat(updatedTemplate.getKeyPattern()).isEqualTo(templateDto.getKeyPattern());
@@ -127,7 +127,7 @@ public class UpdateTemplateActionTest {
@Test
public void fail_if_key_is_not_found() {
expectedException.expect(NotFoundException.class);
- expectedException.expectMessage("Permission template with key 'unknown-key' is not found");
+ expectedException.expectMessage("Permission template with id 'unknown-key' is not found");
newRequest("unknown-key", null, null, null);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java b/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java
index 5c607857295..750248d7dc9 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java
@@ -24,6 +24,7 @@ import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.junit.Before;
import org.junit.Test;
+import org.sonar.api.resources.Qualifiers;
import org.sonar.api.security.DefaultGroups;
import org.sonar.api.web.UserRole;
import org.sonar.db.DbClient;
@@ -46,6 +47,8 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
+import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY;
+import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
public class RegisterPermissionTemplatesTest {
@@ -94,7 +97,7 @@ public class RegisterPermissionTemplatesTest {
verify(permissionTemplateDao).insertGroupPermission(1L, null, UserRole.USER);
verify(permissionTemplateDao).insertGroupPermission(1L, null, UserRole.CODEVIEWER);
verifyNoMoreInteractions(permissionTemplateDao);
- verify(settings).saveProperty(RegisterPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY, PermissionTemplateDto.DEFAULT.getKee());
+ verify(settings).saveProperty(DEFAULT_TEMPLATE_PROPERTY, PermissionTemplateDto.DEFAULT.getKee());
}
@Test
@@ -111,7 +114,7 @@ public class RegisterPermissionTemplatesTest {
@Test
public void should_reference_TRK_template_as_default_when_present() {
- when(settings.getString(RegisterPermissionTemplates.DEFAULT_PROJECTS_TEMPLATE_PROPERTY)).thenReturn("my_projects_template");
+ when(settings.getString(defaultRootQualifierTemplateProperty(Qualifiers.PROJECT))).thenReturn("my_projects_template");
LoadedTemplateDto expectedTemplate = new LoadedTemplateDto().setKey(PermissionTemplateDto.DEFAULT.getKee())
.setType(LoadedTemplateDto.PERMISSION_TEMPLATE_TYPE);
@@ -120,7 +123,7 @@ public class RegisterPermissionTemplatesTest {
initializer.start();
verify(loadedTemplateDao).insert(argThat(Matches.template(expectedTemplate)));
- verify(settings).saveProperty(RegisterPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY, "my_projects_template");
+ verify(settings).saveProperty(DEFAULT_TEMPLATE_PROPERTY, "my_projects_template");
verifyZeroInteractions(permissionTemplateDao);
}