Browse Source

Add permission template name as a web service parameter in the permission template domain

tags/5.2-RC1
Teryk Bellahsene 8 years ago
parent
commit
5258f37933
24 changed files with 305 additions and 144 deletions
  1. 5
    7
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java
  2. 4
    6
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java
  3. 3
    6
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/ApplyTemplateAction.java
  4. 7
    7
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java
  5. 24
    16
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java
  6. 7
    13
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java
  7. 20
    8
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java
  8. 8
    3
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java
  9. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequestValidator.java
  10. 4
    6
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java
  11. 4
    6
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java
  12. 7
    8
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/SetDefaultTemplateAction.java
  13. 12
    12
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java
  14. 66
    0
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsTemplateRef.java
  15. 16
    2
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java
  16. 18
    3
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java
  17. 13
    1
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/ApplyTemplateActionTest.java
  18. 6
    6
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/CreateTemplateActionTest.java
  19. 1
    11
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java
  20. 19
    8
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java
  21. 19
    2
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java
  22. 18
    3
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java
  23. 16
    2
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/SetDefaultTemplateActionTest.java
  24. 6
    6
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java

+ 5
- 7
server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java View File

@@ -34,14 +34,13 @@ import org.sonar.server.user.UserSession;
import static org.sonar.api.security.DefaultGroups.ANYONE;
import static org.sonar.db.user.GroupMembershipQuery.IN;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateNotAnyoneAndAdminPermission;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter;
import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter;
import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateParameters;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateNotAnyoneAndAdminPermission;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;

public class AddGroupToTemplateAction implements PermissionsWsAction {
private final DbClient dbClient;
@@ -65,7 +64,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction {
"It requires administration permissions to access.")
.setHandler(this);

createTemplateIdParameter(action);
createTemplateParameters(action);
createProjectPermissionParameter(action);
createGroupIdParameter(action);
createGroupNameParameter(action);
@@ -75,7 +74,6 @@ public class AddGroupToTemplateAction implements PermissionsWsAction {
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);

String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);
String permission = wsRequest.mandatoryParam(PARAM_PERMISSION);
WsGroupRef group = WsGroupRef.fromRequest(wsRequest);

@@ -84,7 +82,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction {
validateProjectPermission(permission);
validateNotAnyoneAndAdminPermission(permission, group.name());

PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid);
PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest));
GroupDto groupDto = dependenciesFinder.getGroup(dbSession, group);

if (!groupAlreadyAdded(dbSession, template.getId(), groupDto, permission)) {

+ 4
- 6
server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java View File

@@ -36,13 +36,12 @@ import org.sonar.server.user.UserSession;
import static com.google.common.collect.FluentIterable.from;
import static org.sonar.db.user.GroupMembershipQuery.IN;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN;
import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateParameters;
import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;

public class AddUserToTemplateAction implements PermissionsWsAction {
private final DbClient dbClient;
@@ -65,7 +64,7 @@ public class AddUserToTemplateAction implements PermissionsWsAction {
"It requires administration permissions to access.")
.setHandler(this);

createTemplateIdParameter(action);
createTemplateParameters(action);
createProjectPermissionParameter(action);
createUserLoginParameter(action);
}
@@ -74,14 +73,13 @@ public class AddUserToTemplateAction implements PermissionsWsAction {
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);

String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);
String permission = wsRequest.mandatoryParam(PARAM_PERMISSION);
final String userLogin = wsRequest.mandatoryParam(PARAM_USER_LOGIN);

DbSession dbSession = dbClient.openSession(false);
try {
validateProjectPermission(permission);
PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid);
PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest));
UserDto user = dependenciesFinder.getUser(dbSession, userLogin);

if (!isUserAlreadyAdded(dbSession, template.getId(), userLogin, permission)) {

+ 3
- 6
server/sonar-server/src/main/java/org/sonar/server/permission/ws/ApplyTemplateAction.java View File

@@ -31,9 +31,8 @@ import org.sonar.server.permission.ApplyPermissionTemplateQuery;
import org.sonar.server.permission.PermissionService;

import static java.util.Collections.singletonList;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter;
import static org.sonar.server.permission.ws.Parameters.createProjectParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateParameters;

public class ApplyTemplateAction implements PermissionsWsAction {
private final DbClient dbClient;
@@ -56,17 +55,15 @@ public class ApplyTemplateAction implements PermissionsWsAction {
.setSince("5.2")
.setHandler(this);

createTemplateIdParameter(action);
createTemplateParameters(action);
createProjectParameter(action);
}

@Override
public void handle(Request wsRequest, Response wsResponse) throws Exception {
String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);

DbSession dbSession = dbClient.openSession(false);
try {
PermissionTemplateDto template = finder.getTemplate(dbSession, templateUuid);
PermissionTemplateDto template = finder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest));
ComponentDto project = finder.getProject(dbSession, WsProjectRef.fromRequest(wsRequest));

ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.create(

+ 7
- 7
server/sonar-server/src/main/java/org/sonar/server/permission/ws/CreateTemplateAction.java View File

@@ -33,9 +33,9 @@ import org.sonarqube.ws.Permissions.WsCreatePermissionTemplateResponse;

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;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN;
import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION;
import static org.sonar.server.permission.ws.Parameters.PARAM_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN;
import static org.sonar.server.permission.ws.Parameters.createTemplateDescriptionParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateProjectKeyPatternParameter;
import static org.sonar.server.permission.ws.PermissionRequestValidator.MSG_TEMPLATE_WITH_SAME_NAME;
@@ -67,7 +67,7 @@ public class CreateTemplateAction implements PermissionsWsAction {
.setPost(true)
.setHandler(this);

action.createParam(PARAM_TEMPLATE_NAME)
action.createParam(PARAM_NAME)
.setRequired(true)
.setDescription("Name")
.setExampleValue("Financial Service Permissions");
@@ -78,9 +78,9 @@ public class CreateTemplateAction implements PermissionsWsAction {

@Override
public void handle(Request wsRequest, Response wsResponse) throws Exception {
String name = wsRequest.mandatoryParam(PARAM_TEMPLATE_NAME);
String description = wsRequest.param(PARAM_TEMPLATE_DESCRIPTION);
String projectPattern = wsRequest.param(PARAM_TEMPLATE_PATTERN);
String name = wsRequest.mandatoryParam(PARAM_NAME);
String description = wsRequest.param(PARAM_DESCRIPTION);
String projectPattern = wsRequest.param(PARAM_PATTERN);

DbSession dbSession = dbClient.openSession(false);
try {

+ 24
- 16
server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java View File

@@ -21,15 +21,15 @@
package org.sonar.server.permission.ws;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Nonnull;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.ResourceTypes;

import static com.google.common.base.Objects.firstNonNull;
import static com.google.common.collect.FluentIterable.from;
import static com.google.common.collect.Ordering.natural;
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;
@@ -44,14 +44,10 @@ public class DefaultPermissionTemplateFinder {
}

Set<String> getDefaultTemplateUuids() {
return ImmutableSet.<String>builder()
.addAll(
from(resourceTypes.getRoots())
.transform(RESOURCE_TYPE_TO_QUALIFIER)
.transform(new QualifierToDefaultTemplate(settings))
.toSet())
.add(settings.getString(DEFAULT_TEMPLATE_PROPERTY))
.build();
return from(resourceTypes.getRoots())
.transform(RESOURCE_TYPE_TO_QUALIFIER)
.transform(new QualifierToDefaultTemplate(settings))
.toSortedSet(natural());
}

List<TemplateUuidQualifier> getDefaultTemplatesByQualifier() {
@@ -88,8 +84,8 @@ public class DefaultPermissionTemplateFinder {

@Override
public String apply(@Nonnull String qualifier) {
String qualifierProperty = settings.getString(defaultRootQualifierTemplateProperty(qualifier));
return firstNonNull(qualifierProperty, settings.getString(DEFAULT_TEMPLATE_PROPERTY));
String effectiveTemplateUuid = effectiveTemplateUuid(settings, qualifier);
return effectiveTemplateUuid;
}
}

@@ -102,11 +98,23 @@ public class DefaultPermissionTemplateFinder {

@Override
public TemplateUuidQualifier apply(@Nonnull String qualifier) {
String qualifierTemplateUuid = firstNonNull(
settings.getString(defaultRootQualifierTemplateProperty(qualifier)),
settings.getString(DEFAULT_TEMPLATE_PROPERTY));
String effectiveTemplateUuid = effectiveTemplateUuid(settings, qualifier);

return new TemplateUuidQualifier(effectiveTemplateUuid, qualifier);
}
}

return new TemplateUuidQualifier(qualifierTemplateUuid, qualifier);
private static String effectiveTemplateUuid(Settings settings, String qualifier) {
String qualifierTemplateUuid = settings.getString(defaultRootQualifierTemplateProperty(qualifier));
String projectTemplateUuid = settings.getString(defaultRootQualifierTemplateProperty(Qualifiers.PROJECT));
String defaultTemplateUuid = settings.getString(DEFAULT_TEMPLATE_PROPERTY);

if (qualifierTemplateUuid != null) {
return qualifierTemplateUuid;
} else if (projectTemplateUuid != null) {
return projectTemplateUuid;
} else {
return defaultTemplateUuid;
}
}


+ 7
- 13
server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java View File

@@ -30,8 +30,8 @@ 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_ID;
import static org.sonar.server.permission.ws.Parameters.createIdParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateParameters;
import static org.sonar.server.permission.ws.WsTemplateRef.fromRequest;
import static org.sonar.server.ws.WsUtils.checkRequest;

public class DeleteTemplateAction implements PermissionsWsAction {
@@ -56,30 +56,24 @@ public class DeleteTemplateAction implements PermissionsWsAction {
.setPost(true)
.setHandler(this);

createIdParameter(action);
createTemplateParameters(action);
}

@Override
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);

String uuid = wsRequest.mandatoryParam(PARAM_ID);
checkTemplateUuidIsNotDefault(uuid);

deleteTemplate(uuid);

wsResponse.noContent();
}

private void deleteTemplate(String uuid) {
DbSession dbSession = dbClient.openSession(false);
try {
PermissionTemplateDto template = finder.getTemplate(dbSession, uuid);
PermissionTemplateDto template = finder.getTemplate(dbSession, fromRequest(wsRequest));
checkTemplateUuidIsNotDefault(template.getUuid());
dbClient.permissionTemplateDao().deleteById(dbSession, template.getId());
dbSession.commit();
} finally {
dbClient.closeSession(dbSession);
}

wsResponse.noContent();
}

private void checkTemplateUuidIsNotDefault(String key) {

+ 20
- 8
server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java View File

@@ -23,6 +23,7 @@ package org.sonar.server.permission.ws;
import org.sonar.api.server.ws.WebService.NewAction;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.permission.ProjectPermissions;
import org.sonar.core.util.Uuids;

import static java.lang.String.format;

@@ -35,11 +36,12 @@ class Parameters {
static final String PARAM_PROJECT_KEY = "projectKey";
static final String PARAM_USER_LOGIN = "login";
static final String PARAM_TEMPLATE_ID = "templateId";
static final String PARAM_TEMPLATE_NAME = "templateName";

static final String PARAM_ID = "id";
static final String PARAM_TEMPLATE_NAME = "name";
static final String PARAM_TEMPLATE_DESCRIPTION = "description";
static final String PARAM_TEMPLATE_PATTERN = "projectKeyPattern";
static final String PARAM_NAME = "name";
static final String PARAM_DESCRIPTION = "description";
static final String PARAM_PATTERN = "projectKeyPattern";

static final String PARAM_QUALIFIER = "qualifier";

@@ -108,21 +110,31 @@ class Parameters {
.setExampleValue("g.hopper");
}

static void createTemplateIdParameter(NewAction action) {
static void createTemplateParameters(NewAction action) {
createTemplateIdParameter(action);
createTemplateNameParameter(action);
}

private static void createTemplateIdParameter(NewAction action) {
action.createParam(PARAM_TEMPLATE_ID)
.setRequired(true)
.setDescription("Template id")
.setExampleValue("617f3501-3d32-41bd-a7ac-18315d2e3c7a");
.setExampleValue(Uuids.UUID_EXAMPLE_01);
}

private static void createTemplateNameParameter(NewAction action) {
action.createParam(PARAM_TEMPLATE_NAME)
.setDescription("Template name")
.setExampleValue("Default Permission Template for Projects");
}

static void createTemplateProjectKeyPatternParameter(NewAction action) {
action.createParam(PARAM_TEMPLATE_PATTERN)
action.createParam(PARAM_PATTERN)
.setDescription("Project key pattern. Must be a valid Java regular expression")
.setExampleValue(".*\\.finance\\..*");
}

static void createTemplateDescriptionParameter(NewAction action) {
action.createParam(PARAM_TEMPLATE_DESCRIPTION)
action.createParam(PARAM_DESCRIPTION)
.setDescription("Description")
.setExampleValue("Permissions for all projects related to the financial service");
}

+ 8
- 3
server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java View File

@@ -99,8 +99,13 @@ public class PermissionDependenciesFinder {
format("User with login '%s' is not found'", userLogin));
}

PermissionTemplateDto getTemplate(DbSession dbSession, String uuid) {
return checkFound(dbClient.permissionTemplateDao().selectByUuid(dbSession, uuid),
format("Permission template with id '%s' is not found", uuid));
PermissionTemplateDto getTemplate(DbSession dbSession, WsTemplateRef template) {
if (template.uuid() != null) {
return checkFound(dbClient.permissionTemplateDao().selectByUuid(dbSession, template.uuid()),
format("Permission template with id '%s' is not found", template.uuid()));
} else {
return checkFound(dbClient.permissionTemplateDao().selectByName(dbSession, template.name()),
format("Permission template with name '%s' is not found (case insensitive)", template.name()));
}
}
}

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequestValidator.java View File

@@ -34,7 +34,7 @@ import static org.apache.commons.lang.StringUtils.isBlank;
import static org.sonar.api.security.DefaultGroups.isAnyone;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_QUALIFIER;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN;
import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN;
import static org.sonar.server.ws.WsUtils.checkRequest;

public class PermissionRequestValidator {
@@ -77,7 +77,7 @@ public class PermissionRequestValidator {
try {
Pattern.compile(projectPattern);
} catch (PatternSyntaxException e) {
throw new BadRequestException(format("The '%s' parameter must be a valid Java regular expression. '%s' was passed", PARAM_TEMPLATE_PATTERN, projectPattern));
throw new BadRequestException(format("The '%s' parameter must be a valid Java regular expression. '%s' was passed", PARAM_PATTERN, projectPattern));
}
}
}

+ 4
- 6
server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java View File

@@ -30,13 +30,12 @@ import org.sonar.db.user.GroupDto;
import org.sonar.server.user.UserSession;

import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter;
import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter;
import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateParameters;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;

public class RemoveGroupFromTemplateAction implements PermissionsWsAction {
private final DbClient dbClient;
@@ -60,7 +59,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction {
"It requires administration permissions to access.")
.setHandler(this);

createTemplateIdParameter(action);
createTemplateParameters(action);
createProjectPermissionParameter(action);
createGroupIdParameter(action);
createGroupNameParameter(action);
@@ -70,7 +69,6 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction {
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);

String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);
String permission = wsRequest.mandatoryParam(PARAM_PERMISSION);
WsGroupRef group = WsGroupRef.fromRequest(wsRequest);

@@ -78,7 +76,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction {
try {
validateProjectPermission(permission);

PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid);
PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest));
GroupDto groupDto = dependenciesFinder.getGroup(dbSession, group);

Long groupId = groupDto == null ? null : groupDto.getId();

+ 4
- 6
server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java View File

@@ -30,13 +30,12 @@ import org.sonar.db.user.UserDto;
import org.sonar.server.user.UserSession;

import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN;
import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateParameters;
import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPermission;

public class RemoveUserFromTemplateAction implements PermissionsWsAction {
private final DbClient dbClient;
@@ -59,7 +58,7 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction {
"It requires administration permissions to access.")
.setHandler(this);

createTemplateIdParameter(action);
createTemplateParameters(action);
createProjectPermissionParameter(action);
createUserLoginParameter(action);
}
@@ -68,14 +67,13 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction {
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);

String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);
String permission = wsRequest.mandatoryParam(PARAM_PERMISSION);
String userLogin = wsRequest.mandatoryParam(PARAM_USER_LOGIN);

DbSession dbSession = dbClient.openSession(false);
try {
validateProjectPermission(permission);
PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, templateUuid);
PermissionTemplateDto template = dependenciesFinder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest));
UserDto user = dependenciesFinder.getUser(dbSession, userLogin);

dbClient.permissionTemplateDao().deleteUserPermission(dbSession, template.getId(), user.getId(), permission);

+ 7
- 8
server/sonar-server/src/main/java/org/sonar/server/permission/ws/SetDefaultTemplateAction.java View File

@@ -29,6 +29,7 @@ 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.platform.PersistentSettings;
import org.sonar.server.user.UserSession;

@@ -38,8 +39,7 @@ import static java.lang.String.format;
import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonar.server.permission.ws.Parameters.PARAM_QUALIFIER;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.createTemplateIdParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateParameters;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateQualifier;
import static org.sonar.server.permission.ws.ResourceTypeToQualifier.RESOURCE_TYPE_TO_QUALIFIER;

@@ -70,7 +70,7 @@ public class SetDefaultTemplateAction implements PermissionsWsAction {
.setSince("5.2")
.setHandler(this);

createTemplateIdParameter(action);
createTemplateParameters(action);

action.createParam(PARAM_QUALIFIER)
.setDescription("Project qualifier. Possible values are:" + buildRootQualifiersDescription())
@@ -82,12 +82,11 @@ public class SetDefaultTemplateAction implements PermissionsWsAction {
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);

String templateUuid = wsRequest.mandatoryParam(PARAM_TEMPLATE_ID);
String qualifier = wsRequest.mandatoryParam(PARAM_QUALIFIER);

checkTemplateExists(templateUuid);
PermissionTemplateDto template = getTemplate(wsRequest);
validateQualifier(qualifier, getRootQualifiers());
setDefaultTemplateUuid(templateUuid, qualifier);
setDefaultTemplateUuid(template.getUuid(), qualifier);
wsResponse.noContent();
}

@@ -114,10 +113,10 @@ public class SetDefaultTemplateAction implements PermissionsWsAction {
return i18n.message(userSession.locale(), qualifiersPropertyPrefix + qualifier, "");
}

private void checkTemplateExists(String templateUuid) {
private PermissionTemplateDto getTemplate(Request wsRequest) {
DbSession dbSession = dbClient.openSession(false);
try {
finder.getTemplate(dbSession, templateUuid);
return finder.getTemplate(dbSession, WsTemplateRef.fromRequest(wsRequest));
} finally {
dbClient.closeSession(dbSession);
}

+ 12
- 12
server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java View File

@@ -36,12 +36,12 @@ import org.sonarqube.ws.Permissions.WsUpdatePermissionTemplateResponse;
import static com.google.common.base.Objects.firstNonNull;
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_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN;
import static org.sonar.server.permission.ws.Parameters.createTemplateDescriptionParameter;
import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION;
import static org.sonar.server.permission.ws.Parameters.PARAM_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN;
import static org.sonar.server.permission.ws.Parameters.createIdParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateDescriptionParameter;
import static org.sonar.server.permission.ws.Parameters.createTemplateProjectKeyPatternParameter;
import static org.sonar.server.permission.ws.PermissionRequestValidator.MSG_TEMPLATE_WITH_SAME_NAME;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPattern;
@@ -75,7 +75,7 @@ public class UpdateTemplateAction implements PermissionsWsAction {

createIdParameter(action);

action.createParam(PARAM_TEMPLATE_NAME)
action.createParam(PARAM_NAME)
.setDescription("Name")
.setExampleValue("Financial Service Permissions");

@@ -87,14 +87,14 @@ public class UpdateTemplateAction implements PermissionsWsAction {
public void handle(Request wsRequest, Response wsResponse) throws Exception {
checkGlobalAdminUser(userSession);

String key = wsRequest.mandatoryParam(PARAM_ID);
String nameParam = wsRequest.param(PARAM_TEMPLATE_NAME);
String descriptionParam = wsRequest.param(PARAM_TEMPLATE_DESCRIPTION);
String projectPatternParam = wsRequest.param(PARAM_TEMPLATE_PATTERN);
String uuid = wsRequest.mandatoryParam(PARAM_ID);
String nameParam = wsRequest.param(PARAM_NAME);
String descriptionParam = wsRequest.param(PARAM_DESCRIPTION);
String projectPatternParam = wsRequest.param(PARAM_PATTERN);

DbSession dbSession = dbClient.openSession(false);
try {
PermissionTemplateDto templateToUpdate = getAndBuildTemplateToUpdate(dbSession, key, nameParam, descriptionParam, projectPatternParam);
PermissionTemplateDto templateToUpdate = getAndBuildTemplateToUpdate(dbSession, uuid, nameParam, descriptionParam, projectPatternParam);
validateTemplate(dbSession, templateToUpdate);
PermissionTemplateDto updatedTemplate = updateTemplate(dbSession, templateToUpdate);

@@ -110,9 +110,9 @@ public class UpdateTemplateAction implements PermissionsWsAction {
validateProjectPattern(templateToUpdate.getKeyPattern());
}

private PermissionTemplateDto getAndBuildTemplateToUpdate(DbSession dbSession, String key, @Nullable String newName, @Nullable String newDescription,
private PermissionTemplateDto getAndBuildTemplateToUpdate(DbSession dbSession, String uuid, @Nullable String newName, @Nullable String newDescription,
@Nullable String newProjectKeyPattern) {
PermissionTemplateDto templateToUpdate = finder.getTemplate(dbSession, key);
PermissionTemplateDto templateToUpdate = finder.getTemplate(dbSession, WsTemplateRef.newTemplateRef(uuid, null));
templateToUpdate.setName(firstNonNull(newName, templateToUpdate.getName()));
templateToUpdate.setDescription(firstNonNull(newDescription, templateToUpdate.getDescription()));
templateToUpdate.setKeyPattern(firstNonNull(newProjectKeyPattern, templateToUpdate.getKeyPattern()));

+ 66
- 0
server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsTemplateRef.java View File

@@ -0,0 +1,66 @@
/*
* 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 javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonar.api.server.ws.Request;

import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;
import static org.sonar.server.ws.WsUtils.checkRequest;

/**
* Template from a WS request. Guaranties the template id or the template name is provided, not both.
*/
class WsTemplateRef {

private final String uuid;
private final String name;

private WsTemplateRef(@Nullable String uuid, @Nullable String name) {
checkRequest(uuid != null ^ name != null, "Template name or template id must be provided, not both.");

this.uuid = uuid;
this.name = name;
}

static WsTemplateRef fromRequest(Request wsRequest) {
String uuid = wsRequest.param(PARAM_TEMPLATE_ID);
String name = wsRequest.param(PARAM_TEMPLATE_NAME);

return new WsTemplateRef(uuid, name);
}

static WsTemplateRef newTemplateRef(@Nullable String uuid, @Nullable String name) {
return new WsTemplateRef(uuid, name);
}

@CheckForNull
String uuid() {
return this.uuid;
}

@CheckForNull
String name() {
return this.name;
}
}

+ 16
- 2
server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupToTemplateActionTest.java View File

@@ -59,8 +59,10 @@ import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTem
import static org.sonar.db.user.GroupMembershipQuery.IN;
import static org.sonar.db.user.GroupTesting.newGroupDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;

@Category(DbTests.class)
public class AddGroupToTemplateActionTest {
@@ -100,6 +102,18 @@ public class AddGroupToTemplateActionTest {
assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(GROUP_NAME);
}

@Test
public void add_group_to_template_by_name() {
ws.newRequest()
.setParam(PARAM_GROUP_NAME, GROUP_NAME)
.setParam(PARAM_PERMISSION, CODEVIEWER)
.setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase())
.execute();
commit();

assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(GROUP_NAME);
}

@Test
public void add_with_group_id() {
ws.newRequest()
@@ -172,8 +186,8 @@ public class AddGroupToTemplateActionTest {
}

@Test
public void fail_if_template_key_missing() {
expectedException.expect(IllegalArgumentException.class);
public void fail_if_template_uuid_and_name_missing() {
expectedException.expect(BadRequestException.class);

newRequest(GROUP_NAME, null, CODEVIEWER);
}

+ 18
- 3
server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserToTemplateActionTest.java View File

@@ -55,6 +55,9 @@ import static org.sonar.api.web.UserRole.ISSUE_ADMIN;
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto;
import static org.sonar.db.user.GroupMembershipQuery.IN;
import static org.sonar.db.user.UserTesting.newUserDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN;

@Category(DbTests.class)
public class AddUserToTemplateActionTest {
@@ -94,6 +97,18 @@ public class AddUserToTemplateActionTest {
assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(USER_LOGIN);
}

@Test
public void add_user_to_template_by_name() {
ws.newRequest()
.setParam(PARAM_USER_LOGIN, USER_LOGIN)
.setParam(PARAM_PERMISSION, CODEVIEWER)
.setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase())
.execute();
commit();

assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), CODEVIEWER)).containsExactly(USER_LOGIN);
}

@Test
public void does_not_add_a_user_twice() {
newRequest(USER_LOGIN, permissionTemplate.getKee(), ISSUE_ADMIN);
@@ -140,8 +155,8 @@ public class AddUserToTemplateActionTest {
}

@Test
public void fail_if_template_key_missing() {
expectedException.expect(IllegalArgumentException.class);
public void fail_if_template_uuid_and_name_are_missing() {
expectedException.expect(BadRequestException.class);

newRequest(USER_LOGIN, null, CODEVIEWER);
}
@@ -165,7 +180,7 @@ public class AddUserToTemplateActionTest {
private void newRequest(@Nullable String userLogin, @Nullable String templateKey, @Nullable String permission) {
TestRequest request = ws.newRequest();
if (userLogin != null) {
request.setParam(Parameters.PARAM_USER_LOGIN, userLogin);
request.setParam(PARAM_USER_LOGIN, userLogin);
}
if (templateKey != null) {
request.setParam(Parameters.PARAM_TEMPLATE_ID, templateKey);

+ 13
- 1
server/sonar-server/src/test/java/org/sonar/server/permission/ws/ApplyTemplateActionTest.java View File

@@ -71,6 +71,7 @@ import static org.sonar.db.user.UserTesting.newUserDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;

@Category(DbTests.class)
public class ApplyTemplateActionTest {
@@ -148,6 +149,17 @@ public class ApplyTemplateActionTest {
verify(issueAuthorizationIndexer).index();
}

@Test
public void apply_template_with_project_uuid_by_template_name() {
ws.newRequest()
.setParam(PARAM_TEMPLATE_NAME, template1.getName().toUpperCase())
.setParam(PARAM_PROJECT_ID, project.uuid())
.execute();
commit();

assertTemplate1AppliedToProject();
}

@Test
public void apply_template_with_project_key() {
newRequest(template1.getUuid(), null, project.key());
@@ -181,7 +193,7 @@ public class ApplyTemplateActionTest {

@Test
public void fail_when_template_is_not_provided() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expect(BadRequestException.class);

newRequest(null, project.uuid(), null);
}

+ 6
- 6
server/sonar-server/src/test/java/org/sonar/server/permission/ws/CreateTemplateActionTest.java View File

@@ -43,9 +43,9 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_DESCRIPTION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN;
import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION;
import static org.sonar.server.permission.ws.Parameters.PARAM_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN;
import static org.sonar.test.JsonAssert.assertJson;

public class CreateTemplateActionTest {
@@ -161,13 +161,13 @@ public class CreateTemplateActionTest {
private TestResponse newRequest(@Nullable String name, @Nullable String description, @Nullable String projectPattern) {
TestRequest request = ws.newRequest();
if (name != null) {
request.setParam(PARAM_TEMPLATE_NAME, name);
request.setParam(PARAM_NAME, name);
}
if (description != null) {
request.setParam(PARAM_TEMPLATE_DESCRIPTION, description);
request.setParam(PARAM_DESCRIPTION, description);
}
if (projectPattern != null) {
request.setParam(PARAM_TEMPLATE_PATTERN, projectPattern);
request.setParam(PARAM_PATTERN, projectPattern);
}

return request.execute();

+ 1
- 11
server/sonar-server/src/test/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinderTest.java View File

@@ -20,7 +20,6 @@

package org.sonar.server.permission.ws;

import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.junit.Before;
@@ -59,16 +58,7 @@ public class DefaultPermissionTemplateFinderTest {
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");
assertThat(result).containsOnly("default-project-template-uuid", "default-view-template-uuid", "default-dev-template-uuid");
}

@Test

+ 19
- 8
server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java View File

@@ -52,7 +52,8 @@ 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_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;

public class DeleteTemplateActionTest {

@@ -68,7 +69,7 @@ public class DeleteTemplateActionTest {
WsActionTester ws;
DbClient dbClient;
DbSession dbSession;
DefaultPermissionTemplateFinder defautTemplatePermissionFinder;
DefaultPermissionTemplateFinder defaultTemplatePermissionFinder;

PermissionTemplateDto permissionTemplate;

@@ -78,10 +79,10 @@ public class DeleteTemplateActionTest {

dbClient = db.getDbClient();
dbSession = db.getSession();
defautTemplatePermissionFinder = mock(DefaultPermissionTemplateFinder.class);
when(defautTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(Collections.<String>emptySet());
defaultTemplatePermissionFinder = mock(DefaultPermissionTemplateFinder.class);
when(defaultTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(Collections.<String>emptySet());
PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient));
ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession, finder, defautTemplatePermissionFinder));
ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession, finder, defaultTemplatePermissionFinder));

permissionTemplate = insertTemplateAndAssociatedPermissions(newPermissionTemplateDto().setKee(TEMPLATE_UUID));
PermissionTemplateDto permissionTemplateInDatabase = dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID);
@@ -98,6 +99,16 @@ public class DeleteTemplateActionTest {
assertThat(dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID)).isNull();
}

@Test
public void delete_template_by_name_case_insensitive() {
ws.newRequest()
.setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase())
.execute();
commit();

assertThat(dbClient.permissionTemplateDao().selectByUuidWithUserAndGroupPermissions(dbSession, TEMPLATE_UUID)).isNull();
}

@Test
public void fail_if_uuid_is_not_known() {
expectedException.expect(NotFoundException.class);
@@ -109,7 +120,7 @@ public class DeleteTemplateActionTest {
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));
when(defaultTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(newSet(TEMPLATE_UUID));

newRequest(TEMPLATE_UUID);
}
@@ -132,7 +143,7 @@ public class DeleteTemplateActionTest {

@Test
public void fail_if_uuid_is_not_provided() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expect(BadRequestException.class);

newRequest(null);
}
@@ -155,7 +166,7 @@ public class DeleteTemplateActionTest {
private TestResponse newRequest(@Nullable String id) {
TestRequest request = ws.newRequest();
if (id != null) {
request.setParam(PARAM_ID, id);
request.setParam(PARAM_TEMPLATE_ID, id);
}

TestResponse result = executeRequest(request);

+ 19
- 2
server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateActionTest.java View File

@@ -56,8 +56,10 @@ import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTem
import static org.sonar.db.user.GroupMembershipQuery.IN;
import static org.sonar.db.user.GroupTesting.newGroupDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;

@Category(DbTests.class)
public class RemoveGroupFromTemplateActionTest {
@@ -102,6 +104,21 @@ public class RemoveGroupFromTemplateActionTest {
assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).isEmpty();
}

@Test
public void remove_group_from_template_by_name_case_insensitive() {
assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).containsExactly(GROUP_NAME);
commit();

ws.newRequest()
.setParam(PARAM_GROUP_NAME, GROUP_NAME)
.setParam(PARAM_PERMISSION, PERMISSION)
.setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase())
.execute();
commit();

assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).isEmpty();
}

@Test
public void remove_group_with_group_id() {
assertThat(getGroupNamesInTemplateAndPermission(permissionTemplate.getId(), PERMISSION)).containsExactly(GROUP_NAME);
@@ -172,8 +189,8 @@ public class RemoveGroupFromTemplateActionTest {
}

@Test
public void fail_if_template_key_missing() {
expectedException.expect(IllegalArgumentException.class);
public void fail_if_template_missing() {
expectedException.expect(BadRequestException.class);

newRequest(GROUP_NAME, null, PERMISSION);
}

+ 18
- 3
server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserFromTemplateActionTest.java View File

@@ -55,6 +55,9 @@ import static org.sonar.api.web.UserRole.ISSUE_ADMIN;
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto;
import static org.sonar.db.user.GroupMembershipQuery.IN;
import static org.sonar.db.user.UserTesting.newUserDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN;

@Category(DbTests.class)
public class RemoveUserFromTemplateActionTest {
@@ -96,6 +99,18 @@ public class RemoveUserFromTemplateActionTest {
assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), DEFAULT_PERMISSION)).isEmpty();
}

@Test
public void remove_user_from_template_by_name_case_insensitive() {
ws.newRequest()
.setParam(PARAM_USER_LOGIN, USER_LOGIN)
.setParam(PARAM_PERMISSION, DEFAULT_PERMISSION)
.setParam(PARAM_TEMPLATE_NAME, permissionTemplate.getName().toUpperCase())
.execute();
commit();

assertThat(getLoginsInTemplateAndPermission(permissionTemplate.getId(), DEFAULT_PERMISSION)).isEmpty();
}

@Test
public void remove_user_from_template_twice_without_failing() {
newRequest(USER_LOGIN, permissionTemplate.getKee(), DEFAULT_PERMISSION);
@@ -164,8 +179,8 @@ public class RemoveUserFromTemplateActionTest {
}

@Test
public void fail_if_template_key_missing() {
expectedException.expect(IllegalArgumentException.class);
public void fail_if_template_missing() {
expectedException.expect(BadRequestException.class);

newRequest(USER_LOGIN, null, DEFAULT_PERMISSION);
}
@@ -189,7 +204,7 @@ public class RemoveUserFromTemplateActionTest {
private void newRequest(@Nullable String userLogin, @Nullable String templateKey, @Nullable String permission) {
TestRequest request = ws.newRequest();
if (userLogin != null) {
request.setParam(Parameters.PARAM_USER_LOGIN, userLogin);
request.setParam(PARAM_USER_LOGIN, userLogin);
}
if (templateKey != null) {
request.setParam(Parameters.PARAM_TEMPLATE_ID, templateKey);

+ 16
- 2
server/sonar-server/src/test/java/org/sonar/server/permission/ws/SetDefaultTemplateActionTest.java View File

@@ -62,6 +62,7 @@ import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEM
import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
import static org.sonar.server.permission.ws.Parameters.PARAM_QUALIFIER;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;

@Category(DbTests.class)
public class SetDefaultTemplateActionTest {
@@ -101,7 +102,7 @@ public class SetDefaultTemplateActionTest {
}

@Test
public void update_settings_of_default_and_qualifier_default_for_project_qualifier() {
public void update_settings_for_project_qualifier() {
// default value is project qualifier's value
String result = newRequest(template.getUuid(), null);

@@ -112,6 +113,19 @@ public class SetDefaultTemplateActionTest {
assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty("DEV"))).isEqualTo("any-dev-template-uuid");
}

@Test
public void update_settings_for_project_qualifier_by_template_name() {
ws.newRequest()
.setParam(PARAM_TEMPLATE_NAME, template.getName().toUpperCase())
.execute();
db.getSession().commit();

assertThat(persistentSettings.getString(DEFAULT_TEMPLATE_PROPERTY)).isEqualTo("any-template-uuid");
assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty(PROJECT))).isEqualTo(template.getUuid());
assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty(VIEW))).isEqualTo("any-view-template-uuid");
assertThat(persistentSettings.getString(defaultRootQualifierTemplateProperty("DEV"))).isEqualTo("any-dev-template-uuid");
}

@Test
public void update_settings_of_views_property() {
newRequest(template.getUuid(), VIEW);
@@ -140,7 +154,7 @@ public class SetDefaultTemplateActionTest {

@Test
public void fail_if_template_not_provided() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expect(BadRequestException.class);

newRequest(null, PROJECT);
}

+ 6
- 6
server/sonar-server/src/test/java/org/sonar/server/permission/ws/UpdateTemplateActionTest.java View File

@@ -47,10 +47,10 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_DESCRIPTION;
import static org.sonar.server.permission.ws.Parameters.PARAM_DESCRIPTION;
import static org.sonar.server.permission.ws.Parameters.PARAM_ID;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN;
import static org.sonar.server.permission.ws.Parameters.PARAM_NAME;
import static org.sonar.server.permission.ws.Parameters.PARAM_PATTERN;
import static org.sonar.test.JsonAssert.assertJson;

public class UpdateTemplateActionTest {
@@ -223,13 +223,13 @@ public class UpdateTemplateActionTest {
request.setParam(PARAM_ID, key);
}
if (name != null) {
request.setParam(PARAM_TEMPLATE_NAME, name);
request.setParam(PARAM_NAME, name);
}
if (description != null) {
request.setParam(PARAM_TEMPLATE_DESCRIPTION, description);
request.setParam(PARAM_DESCRIPTION, description);
}
if (projectPattern != null) {
request.setParam(PARAM_TEMPLATE_PATTERN, projectPattern);
request.setParam(PARAM_PATTERN, projectPattern);
}

return request.execute();

Loading…
Cancel
Save