import org.sonar.db.user.GroupDto;
import org.sonar.db.user.UserDto;
import org.sonar.server.component.ComponentFinder;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.usergroups.ws.WsGroupRef;
import static java.lang.String.format;
public class PermissionDependenciesFinder {
private final DbClient dbClient;
private final ComponentFinder componentFinder;
+ private final UserGroupFinder userGroupFinder;
private final ResourceTypes resourceTypes;
- public PermissionDependenciesFinder(DbClient dbClient, ComponentFinder componentFinder, ResourceTypes resourceTypes) {
+ public PermissionDependenciesFinder(DbClient dbClient, ComponentFinder componentFinder, UserGroupFinder userGroupFinder, ResourceTypes resourceTypes) {
this.dbClient = dbClient;
this.componentFinder = componentFinder;
+ this.userGroupFinder = userGroupFinder;
this.resourceTypes = resourceTypes;
}
*/
@CheckForNull
public GroupDto getGroup(DbSession dbSession, WsGroupRef group) {
- Long groupId = group.id();
- String groupName = group.name();
-
- if (isAnyone(groupName)) {
+ if (isAnyone(group.name())) {
return null;
}
- GroupDto groupDto = null;
-
- if (groupId != null) {
- groupDto = checkFound(dbClient.groupDao().selectById(dbSession, groupId),
- format("Group with id '%d' is not found", groupId));
- }
-
- if (groupName != null) {
- groupDto = checkFound(dbClient.groupDao().selectByName(dbSession, groupName),
- format("Group with name '%s' is not found", groupName));
- }
-
- return groupDto;
+ return userGroupFinder.getGroup(dbSession, group);
}
public UserDto getUser(DbSession dbSession, String userLogin) {
import org.sonar.server.user.UserSession;
import static org.sonar.db.MyBatis.closeQuietly;
-import static org.sonar.server.usergroups.ws.GroupUpdater.DESCRIPTION_MAX_LENGTH;
-import static org.sonar.server.usergroups.ws.GroupUpdater.NAME_MAX_LENGTH;
-import static org.sonar.server.usergroups.ws.GroupUpdater.PARAM_DESCRIPTION;
-import static org.sonar.server.usergroups.ws.GroupUpdater.PARAM_NAME;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.DESCRIPTION_MAX_LENGTH;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.NAME_MAX_LENGTH;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.PARAM_DESCRIPTION;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.PARAM_NAME;
public class CreateAction implements UserGroupsWsAction {
private final DbClient dbClient;
private final UserSession userSession;
- private final GroupUpdater groupUpdater;
+ private final UserGroupUpdater groupUpdater;
- public CreateAction(DbClient dbClient, UserSession userSession, GroupUpdater groupUpdater) {
+ public CreateAction(DbClient dbClient, UserSession userSession, UserGroupUpdater groupUpdater) {
this.dbClient = dbClient;
this.groupUpdater = groupUpdater;
this.userSession = userSession;
*/
package org.sonar.server.usergroups.ws;
-import com.google.common.base.Preconditions;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
+import org.sonar.api.server.ws.WebService;
import org.sonar.api.server.ws.WebService.NewController;
import org.sonar.core.permission.GlobalPermissions;
+import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.MyBatis;
import org.sonar.db.user.GroupDto;
-import org.sonar.server.db.DbClient;
-import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.user.UserSession;
-public class DeleteAction implements UserGroupsWsAction {
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.lang.String.format;
+import static org.sonar.server.usergroups.ws.UserGroupsWsParameters.PARAM_GROUP_ID;
+import static org.sonar.server.usergroups.ws.UserGroupsWsParameters.PARAM_GROUP_NAME;
- private static final String PARAM_ID = "id";
+public class DeleteAction implements UserGroupsWsAction {
private final DbClient dbClient;
+ private final UserGroupFinder userGroupFinder;
private final UserSession userSession;
private final Settings settings;
- public DeleteAction(DbClient dbClient, UserSession userSession, Settings settings) {
+ public DeleteAction(DbClient dbClient, UserGroupFinder userGroupFinder, UserSession userSession, Settings settings) {
this.dbClient = dbClient;
+ this.userGroupFinder = userGroupFinder;
this.userSession = userSession;
this.settings = settings;
}
@Override
public void define(NewController context) {
- context.createAction("delete")
- .setDescription("Delete a group. The default group cannot be deleted. Requires System Administrator permission.")
+ WebService.NewAction action = context.createAction("delete")
+ .setDescription(format("Delete a group. The default groups cannot be deleted.<br/>" +
+ "'%s' or '%s' must be provided." +
+ "Requires System Administrator permission.",
+ PARAM_GROUP_ID, PARAM_GROUP_NAME))
.setHandler(this)
.setSince("5.2")
- .setPost(true)
- .createParam(PARAM_ID)
- .setDescription("ID of the group to delete.")
- .setRequired(true);
+ .setPost(true);
+
+ UserGroupsWsParameters.createGroupParameters(action);
}
@Override
public void handle(Request request, Response response) throws Exception {
userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN);
- long groupId = request.mandatoryParamAsLong(PARAM_ID);
-
+ WsGroupRef groupRef = WsGroupRef.fromUserGroupsRequest(request);
DbSession dbSession = dbClient.openSession(false);
try {
- if (dbClient.groupDao().selectById(dbSession, groupId) == null) {
- throw new NotFoundException(String.format("Could not find a group with id=%d", groupId));
- }
+ GroupDto group = userGroupFinder.getGroup(dbSession, groupRef);
+ long groupId = group.getId();
checkNotTryingToDeleteDefaultGroup(dbSession, groupId);
-
- removeGroupMembers(groupId, dbSession);
- removeGroupPermissions(groupId, dbSession);
- removeFromPermissionTemplates(groupId, dbSession);
+ removeGroupMembers(dbSession, groupId);
+ removeGroupPermissions(dbSession, groupId);
+ removeFromPermissionTemplates(dbSession, groupId);
dbClient.groupDao().deleteById(dbSession, groupId);
dbSession.commit();
private void checkNotTryingToDeleteDefaultGroup(DbSession dbSession, long groupId) {
String defaultGroupName = settings.getString(CoreProperties.CORE_DEFAULT_GROUP);
GroupDto defaultGroup = dbClient.groupDao().selectOrFailByName(dbSession, defaultGroupName);
- Preconditions.checkArgument(groupId != defaultGroup.getId(),
- String.format("Default group '%s' cannot be deleted", defaultGroupName));
+ checkArgument(groupId != defaultGroup.getId(),
+ format("Default group '%s' cannot be deleted", defaultGroupName));
}
- private void removeGroupMembers(long groupId, DbSession dbSession) {
+ private void removeGroupMembers(DbSession dbSession, long groupId) {
dbClient.userGroupDao().deleteMembersByGroupId(dbSession, groupId);
}
- private void removeGroupPermissions(long groupId, DbSession dbSession) {
+ private void removeGroupPermissions(DbSession dbSession, long groupId) {
dbClient.roleDao().deleteGroupRolesByGroupId(dbSession, groupId);
}
- private void removeFromPermissionTemplates(long groupId, DbSession dbSession) {
+ private void removeFromPermissionTemplates(DbSession dbSession, long groupId) {
dbClient.permissionTemplateDao().deleteByGroup(dbSession, groupId);
}
}
+++ /dev/null
-/*
- * 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.usergroups.ws;
-
-import com.google.common.base.Preconditions;
-import org.sonar.api.security.DefaultGroups;
-import org.sonar.api.server.ServerSide;
-import org.sonar.api.utils.text.JsonWriter;
-import org.sonar.db.DbSession;
-import org.sonar.db.user.GroupDto;
-import org.sonar.server.db.DbClient;
-import org.sonar.server.exceptions.BadRequestException;
-
-@ServerSide
-public class GroupUpdater {
-
- static final String PARAM_ID = "id";
- static final String PARAM_DESCRIPTION = "description";
- static final String PARAM_NAME = "name";
-
- // Database column size should be 500 (since migration #353),
- // but on some instances, column size is still 255,
- // hence the validation is done with 255
- static final int NAME_MAX_LENGTH = 255;
- static final int DESCRIPTION_MAX_LENGTH = 200;
-
- private final DbClient dbClient;
-
- public GroupUpdater(DbClient dbClient) {
- this.dbClient = dbClient;
- }
-
- protected void validateName(String name) {
- checkNameLength(name);
- checkNameNotAnyone(name);
- }
-
- private void checkNameLength(String name) {
- Preconditions.checkArgument(!name.isEmpty(), "Name cannot be empty");
- Preconditions.checkArgument(name.length() <= NAME_MAX_LENGTH, String.format("Name cannot be longer than %d characters", NAME_MAX_LENGTH));
- }
-
- private void checkNameNotAnyone(String name) {
- Preconditions.checkArgument(!DefaultGroups.isAnyone(name), String.format("Name '%s' is reserved (regardless of case)", DefaultGroups.ANYONE));
- }
-
- protected void checkNameIsUnique(String name, DbSession session) {
- // There is no database constraint on column groups.name
- // because MySQL cannot create a unique index
- // on a UTF-8 VARCHAR larger than 255 characters on InnoDB
- if (dbClient.groupDao().selectByName(session, name) != null) {
- throw new BadRequestException(String.format("Name '%s' is already taken", name));
- }
- }
-
- protected void validateDescription(String description) {
- Preconditions.checkArgument(description.length() <= DESCRIPTION_MAX_LENGTH, String.format("Description cannot be longer than %d characters", DESCRIPTION_MAX_LENGTH));
- }
-
- protected void writeGroup(JsonWriter json, GroupDto group, int membersCount) {
- json.name("group").beginObject()
- .prop(PARAM_ID, group.getId().toString())
- .prop(PARAM_NAME, group.getName())
- .prop(PARAM_DESCRIPTION, group.getDescription())
- .prop("membersCount", membersCount)
- .endObject();
- }
-}
import org.sonar.server.user.UserSession;
import static org.sonar.db.MyBatis.closeQuietly;
-import static org.sonar.server.usergroups.ws.GroupUpdater.DESCRIPTION_MAX_LENGTH;
-import static org.sonar.server.usergroups.ws.GroupUpdater.NAME_MAX_LENGTH;
-import static org.sonar.server.usergroups.ws.GroupUpdater.PARAM_DESCRIPTION;
-import static org.sonar.server.usergroups.ws.GroupUpdater.PARAM_ID;
-import static org.sonar.server.usergroups.ws.GroupUpdater.PARAM_NAME;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.DESCRIPTION_MAX_LENGTH;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.NAME_MAX_LENGTH;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.PARAM_DESCRIPTION;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.PARAM_ID;
+import static org.sonar.server.usergroups.ws.UserGroupUpdater.PARAM_NAME;
public class UpdateAction implements UserGroupsWsAction {
private final DbClient dbClient;
private final UserSession userSession;
- private final GroupUpdater groupUpdater;
+ private final UserGroupUpdater groupUpdater;
- public UpdateAction(DbClient dbClient, UserSession userSession, GroupUpdater groupUpdater) {
+ public UpdateAction(DbClient dbClient, UserSession userSession, UserGroupUpdater groupUpdater) {
this.dbClient = dbClient;
this.groupUpdater = groupUpdater;
this.userSession = userSession;
--- /dev/null
+/*
+ * 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.usergroups.ws;
+
+import org.sonar.db.DbClient;
+import org.sonar.db.DbSession;
+import org.sonar.db.user.GroupDto;
+
+import static java.lang.String.format;
+import static org.sonar.server.ws.WsUtils.checkFound;
+
+public class UserGroupFinder {
+ private final DbClient dbClient;
+
+ public UserGroupFinder(DbClient dbClient) {
+ this.dbClient = dbClient;
+ }
+
+ public GroupDto getGroup(DbSession dbSession, WsGroupRef group) {
+ Long groupId = group.id();
+ String groupName = group.name();
+
+ GroupDto groupDto = null;
+
+ if (groupId != null) {
+ groupDto = checkFound(dbClient.groupDao().selectById(dbSession, groupId),
+ format("Group with id '%d' is not found", groupId));
+ }
+
+ if (groupName != null) {
+ groupDto = checkFound(dbClient.groupDao().selectByName(dbSession, groupName),
+ format("Group with name '%s' is not found", groupName));
+ }
+
+ return groupDto;
+ }
+}
--- /dev/null
+/*
+ * 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.usergroups.ws;
+
+import com.google.common.base.Preconditions;
+import org.sonar.api.security.DefaultGroups;
+import org.sonar.api.server.ServerSide;
+import org.sonar.api.utils.text.JsonWriter;
+import org.sonar.db.DbSession;
+import org.sonar.db.user.GroupDto;
+import org.sonar.server.db.DbClient;
+import org.sonar.server.exceptions.BadRequestException;
+
+@ServerSide
+public class UserGroupUpdater {
+
+ static final String PARAM_ID = "id";
+ static final String PARAM_DESCRIPTION = "description";
+ static final String PARAM_NAME = "name";
+
+ // Database column size should be 500 (since migration #353),
+ // but on some instances, column size is still 255,
+ // hence the validation is done with 255
+ static final int NAME_MAX_LENGTH = 255;
+ static final int DESCRIPTION_MAX_LENGTH = 200;
+
+ private final DbClient dbClient;
+
+ public UserGroupUpdater(DbClient dbClient) {
+ this.dbClient = dbClient;
+ }
+
+ protected void validateName(String name) {
+ checkNameLength(name);
+ checkNameNotAnyone(name);
+ }
+
+ private void checkNameLength(String name) {
+ Preconditions.checkArgument(!name.isEmpty(), "Name cannot be empty");
+ Preconditions.checkArgument(name.length() <= NAME_MAX_LENGTH, String.format("Name cannot be longer than %d characters", NAME_MAX_LENGTH));
+ }
+
+ private void checkNameNotAnyone(String name) {
+ Preconditions.checkArgument(!DefaultGroups.isAnyone(name), String.format("Name '%s' is reserved (regardless of case)", DefaultGroups.ANYONE));
+ }
+
+ protected void checkNameIsUnique(String name, DbSession session) {
+ // There is no database constraint on column groups.name
+ // because MySQL cannot create a unique index
+ // on a UTF-8 VARCHAR larger than 255 characters on InnoDB
+ if (dbClient.groupDao().selectByName(session, name) != null) {
+ throw new BadRequestException(String.format("Name '%s' is already taken", name));
+ }
+ }
+
+ protected void validateDescription(String description) {
+ Preconditions.checkArgument(description.length() <= DESCRIPTION_MAX_LENGTH, String.format("Description cannot be longer than %d characters", DESCRIPTION_MAX_LENGTH));
+ }
+
+ protected void writeGroup(JsonWriter json, GroupDto group, int membersCount) {
+ json.name("group").beginObject()
+ .prop(PARAM_ID, group.getId().toString())
+ .prop(PARAM_NAME, group.getName())
+ .prop(PARAM_DESCRIPTION, group.getDescription())
+ .prop("membersCount", membersCount)
+ .endObject();
+ }
+}
@Override
protected void configureModule() {
add(
- GroupUpdater.class,
UserGroupsWs.class,
+ UserGroupUpdater.class,
+ UserGroupFinder.class,
+ // actions
SearchAction.class,
CreateAction.class,
DeleteAction.class,
import org.sonar.server.permission.PermissionChange;
import org.sonar.server.permission.PermissionUpdater;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsTester;
import org.sonar.test.DbTests;
import static org.sonar.db.component.ComponentTesting.newProjectDto;
import static org.sonar.db.component.ComponentTesting.newView;
import static org.sonar.server.permission.ws.AddGroupAction.ACTION;
+import static org.sonar.server.permission.ws.PermissionsWs.ENDPOINT;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_GROUP_ID;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_GROUP_NAME;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_PERMISSION;
-import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_PROJECT_KEY;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_PROJECT_ID;
-import static org.sonar.server.permission.ws.PermissionsWs.ENDPOINT;
+import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_PROJECT_KEY;
@Category(DbTests.class)
public class AddGroupActionTest {
dbClient = db.getDbClient();
ComponentFinder componentFinder = new ComponentFinder(dbClient);
ws = new WsTester(new PermissionsWs(
- new AddGroupAction(dbClient, new PermissionChangeBuilder(new PermissionDependenciesFinder(dbClient, componentFinder, resourceTypes)), permissionUpdater)));
+ new AddGroupAction(dbClient, new PermissionChangeBuilder(new PermissionDependenciesFinder(
+ dbClient,
+ componentFinder,
+ new UserGroupFinder(dbClient),
+ resourceTypes)),
+ permissionUpdater)));
userSession.login("admin").setGlobalPermissions(SYSTEM_ADMIN);
}
import org.sonar.server.permission.PermissionChange;
import org.sonar.server.permission.PermissionUpdater;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsTester;
import org.sonar.test.DbTests;
dbSession = db.getSession();
ComponentFinder componentFinder = new ComponentFinder(dbClient);
ws = new WsTester(new PermissionsWs(
- new AddUserAction(dbClient, permissionUpdater, new PermissionChangeBuilder(new PermissionDependenciesFinder(dbClient, componentFinder, resourceTypes)))));
+ new AddUserAction(dbClient, permissionUpdater, new PermissionChangeBuilder(new PermissionDependenciesFinder(dbClient, componentFinder, new UserGroupFinder(dbClient),
+ resourceTypes)))));
userSession.login("admin").setGlobalPermissions(SYSTEM_ADMIN);
}
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.permission.PermissionFinder;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
dbClient = db.getDbClient();
dbSession = db.getSession();
PermissionFinder permissionFinder = new PermissionFinder(dbClient);
- underTest = new GroupsAction(dbClient, userSession, permissionFinder, new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes));
+ underTest = new GroupsAction(dbClient, userSession, permissionFinder, new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes));
ws = new WsActionTester(underTest);
userSession.login("login").setGlobalPermissions(SYSTEM_ADMIN);
import org.sonar.server.permission.PermissionChange;
import org.sonar.server.permission.PermissionUpdater;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsTester;
import org.sonar.test.DbTests;
DbClient dbClient = db.getDbClient();
ComponentFinder componentFinder = new ComponentFinder(dbClient);
ws = new WsTester(new PermissionsWs(
- new RemoveGroupAction(dbClient, new PermissionChangeBuilder(new PermissionDependenciesFinder(dbClient, componentFinder, resourceTypes)), permissionUpdater)));
+ new RemoveGroupAction(dbClient, new PermissionChangeBuilder(new PermissionDependenciesFinder(dbClient, componentFinder, new UserGroupFinder(dbClient), resourceTypes)), permissionUpdater)));
userSession.login("admin").setGlobalPermissions(SYSTEM_ADMIN);
}
import org.sonar.server.permission.PermissionChange;
import org.sonar.server.permission.PermissionUpdater;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsTester;
import org.sonar.test.DbTests;
dbSession = db.getSession();
ComponentFinder componentFinder = new ComponentFinder(dbClient);
ws = new WsTester(new PermissionsWs(
- new RemoveUserAction(dbClient, permissionUpdater, new PermissionChangeBuilder(new PermissionDependenciesFinder(dbClient, componentFinder, resourceTypes)))));
+ new RemoveUserAction(dbClient, permissionUpdater, new PermissionChangeBuilder(new PermissionDependenciesFinder(dbClient, componentFinder, new UserGroupFinder(dbClient), resourceTypes)))));
userSession.login("admin").setGlobalPermissions(SYSTEM_ADMIN);
}
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.i18n.I18nRule;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsActionTester;
import static java.util.Arrays.asList;
resourceTypes = mock(ResourceTypes.class);
when(resourceTypes.getRoots()).thenReturn(rootResourceTypes());
ComponentFinder componentFinder = new ComponentFinder(dbClient);
- PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, componentFinder, resourceTypes);
+ PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, componentFinder, new UserGroupFinder(dbClient), resourceTypes);
i18n.setProjectPermissions();
dataLoader = new SearchProjectPermissionsDataLoader(dbClient, finder, resourceTypes);
insertComponent(newDeveloper("developer-name"));
insertComponent(newProjectDto("project-uuid"));
commit();
- dataLoader = new SearchProjectPermissionsDataLoader(dbClient, new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes), resourceTypes);
+ dataLoader = new SearchProjectPermissionsDataLoader(dbClient, new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes),
+ resourceTypes);
underTest = new SearchProjectPermissionsAction(dbClient, userSession, i18n, dataLoader);
ws = new WsActionTester(underTest);
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.plugins.MimeTypes;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
import org.sonarqube.ws.WsPermissions.WsGroupsResponse;
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateGroupDto;
import static org.sonar.db.user.GroupTesting.newGroupDto;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_PERMISSION;
-import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_TEMPLATE_UUID;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_TEMPLATE_NAME;
+import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_TEMPLATE_UUID;
import static org.sonar.test.JsonAssert.assertJson;
@Category(DbTests.class)
public void setUp() {
dbClient = db.getDbClient();
dbSession = db.getSession();
- underTest = new TemplateGroupsAction(dbClient, userSession, new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes));
+ underTest = new TemplateGroupsAction(dbClient, userSession,
+ new PermissionDependenciesFinder(
+ dbClient,
+ new ComponentFinder(dbClient),
+ new UserGroupFinder(dbClient),
+ resourceTypes));
ws = new WsActionTester(underTest);
userSession.login("login").setGlobalPermissions(SYSTEM_ADMIN);
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
@Before
public void setUp() {
- PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
underTest = new TemplateUsersAction(dbClient, userSession, dependenciesFinder);
ws = new WsActionTester(underTest);
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.permission.PermissionFinder;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
@Before
public void setUp() {
PermissionFinder permissionFinder = new PermissionFinder(dbClient);
- PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
underTest = new UsersAction(dbClient, userSession, permissionFinder, dependenciesFinder);
ws = new WsActionTester(underTest);
import org.sonar.server.permission.ws.PermissionDependenciesFinder;
import org.sonar.server.permission.ws.WsPermissionParameters;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
dbSession = db.getSession();
userSession.login().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
- PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
ws = new WsActionTester(new AddGroupToTemplateAction(dbClient, dependenciesFinder, userSession));
group = insertGroup(newGroupDto().setName(GROUP_NAME));
import org.sonar.server.permission.ws.PermissionDependenciesFinder;
import org.sonar.server.permission.ws.WsPermissionParameters;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
dbSession = db.getSession();
userSession.login().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
- PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
ws = new WsActionTester(new AddUserToTemplateAction(dbClient, dependenciesFinder, userSession));
user = insertUser(newUserDto().setLogin(USER_LOGIN));
import org.sonar.server.permission.PermissionService;
import org.sonar.server.permission.ws.PermissionDependenciesFinder;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
PermissionFinder permissionFinder = new PermissionFinder(dbClient);
ComponentFinder componentFinder = new ComponentFinder(dbClient);
PermissionService permissionService = new PermissionService(dbClient, repository, issueAuthorizationIndexer, userSession, componentFinder);
- PermissionDependenciesFinder permissionDependenciesFinder = new PermissionDependenciesFinder(dbClient, componentFinder, resourceTypes);
+ PermissionDependenciesFinder permissionDependenciesFinder = new PermissionDependenciesFinder(dbClient, componentFinder, new UserGroupFinder(dbClient), resourceTypes);
ApplyTemplateAction underTest = new ApplyTemplateAction(dbClient, permissionService, permissionDependenciesFinder);
ws = new WsActionTester(underTest);
import org.sonar.server.permission.ws.DeleteTemplateAction;
import org.sonar.server.permission.ws.PermissionDependenciesFinder;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
dbSession = db.getSession();
defaultTemplatePermissionFinder = mock(DefaultPermissionTemplateFinder.class);
when(defaultTemplatePermissionFinder.getDefaultTemplateUuids()).thenReturn(Collections.<String>emptySet());
- PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession, finder, defaultTemplatePermissionFinder));
permissionTemplate = insertTemplateAndAssociatedPermissions(newPermissionTemplateDto().setUuid(TEMPLATE_UUID));
import org.sonar.server.permission.ws.PermissionDependenciesFinder;
import org.sonar.server.permission.ws.WsPermissionParameters;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_GROUP_ID;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_GROUP_NAME;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_PERMISSION;
-import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_TEMPLATE_UUID;
import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_TEMPLATE_NAME;
+import static org.sonar.server.permission.ws.WsPermissionParameters.PARAM_TEMPLATE_UUID;
@Category(DbTests.class)
public class RemoveGroupFromTemplateActionTest {
dbSession = db.getSession();
userSession.login().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
- PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
ws = new WsActionTester(new RemoveGroupFromTemplateAction(dbClient, dependenciesFinder, userSession));
group = insertGroup(newGroupDto().setName(GROUP_NAME));
import org.sonar.server.permission.ws.PermissionDependenciesFinder;
import org.sonar.server.permission.ws.WsPermissionParameters;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
dbSession = db.getSession();
userSession.login().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
- PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder dependenciesFinder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
ws = new WsActionTester(new RemoveUserFromTemplateAction(dbClient, dependenciesFinder, userSession));
user = insertUser(newUserDto().setLogin(USER_LOGIN));
import org.sonar.server.platform.PersistentSettings;
import org.sonar.server.platform.ServerSettings;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
ws = new WsActionTester(new SetDefaultTemplateAction(
dbClient,
- new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes),
+ new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes),
resourceTypes,
persistentSettings,
userSession, i18n));
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.permission.ws.PermissionDependenciesFinder;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
dbClient = db.getDbClient();
dbSession = db.getSession();
- PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), resourceTypes);
+ PermissionDependenciesFinder finder = new PermissionDependenciesFinder(dbClient, new ComponentFinder(dbClient), new UserGroupFinder(dbClient), resourceTypes);
ws = new WsActionTester(new UpdateTemplateAction(dbClient, userSession, system, finder));
DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), groupDao);
- tester = new WsTester(new UserGroupsWs(new CreateAction(dbClient, userSession, new GroupUpdater(dbClient))));
+ tester = new WsTester(new UserGroupsWs(new CreateAction(dbClient, userSession, new UserGroupUpdater(dbClient))));
session = dbClient.openSession(false);
}
package org.sonar.server.usergroups.ws;
-import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
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.PermissionTemplateDao;
import org.sonar.db.user.RoleDao;
import org.sonar.db.user.UserGroupDao;
import org.sonar.db.user.UserGroupDto;
-import org.sonar.server.db.DbClient;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsTester;
import org.sonar.test.DbTests;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.db.user.GroupTesting.newGroupDto;
+import static org.sonar.server.usergroups.ws.UserGroupsWsParameters.PARAM_GROUP_NAME;
@Category(DbTests.class)
public class DeleteActionTest {
@Rule
- public DbTester dbTester = DbTester.create(System2.INSTANCE);
-
+ public DbTester db = DbTester.create(System2.INSTANCE);
@Rule
public UserSessionRule userSession = UserSessionRule.standalone();
private WsTester ws;
-
private GroupDao groupDao;
-
private UserGroupDao userGroupDao;
-
private RoleDao roleDao;
-
private PermissionTemplateDao permissionTemplateDao;
- private DbSession session;
-
+ private DbSession dbSession;
private Long defaultGroupId;
@Before
public void setUp() {
- dbTester.truncateTables();
-
- groupDao = new GroupDao(System2.INSTANCE);
- userGroupDao = new UserGroupDao();
- roleDao = new RoleDao();
- permissionTemplateDao = new PermissionTemplateDao(dbTester.myBatis(), System2.INSTANCE);
-
- DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(),
- groupDao, userGroupDao, roleDao, permissionTemplateDao);
- session = dbClient.openSession(false);
+ DbClient dbClient = db.getDbClient();
+ groupDao = dbClient.groupDao();
+ userGroupDao = dbClient.userGroupDao();
+ roleDao = dbClient.roleDao();
+ permissionTemplateDao = dbClient.permissionTemplateDao();
+ dbSession = db.getSession();
Settings settings = new Settings().setProperty(CoreProperties.CORE_DEFAULT_GROUP, CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE);
- GroupDto defaultGroup = groupDao.insert(session, new GroupDto().setName(CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE));
+ GroupDto defaultGroup = groupDao.insert(dbSession, new GroupDto().setName(CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE));
defaultGroupId = defaultGroup.getId();
- session.commit();
-
- ws = new WsTester(new UserGroupsWs(new DeleteAction(dbClient, userSession, settings)));
- }
-
- @After
- public void after() {
- session.close();
+ dbSession.commit();
+
+ ws = new WsTester(new UserGroupsWs(
+ new DeleteAction(
+ dbClient,
+ new UserGroupFinder(dbClient),
+ userSession,
+ settings)));
}
@Test
public void delete_simple() throws Exception {
- GroupDto group = groupDao.insert(session, new GroupDto().setName("to-delete"));
- session.commit();
+ GroupDto group = groupDao.insert(dbSession, new GroupDto().setName("to-delete"));
+ dbSession.commit();
loginAsAdmin();
- ws.newPostRequest("api/usergroups", "delete")
+ newRequest()
.setParam("id", group.getId().toString())
.execute().assertNoContent();
}
+ @Test
+ public void delete_with_group_name() throws Exception {
+ GroupDto group = groupDao.insert(dbSession, newGroupDto().setName("group_name"));
+ assertThat(groupDao.selectById(dbSession, group.getId())).isNotNull();
+ dbSession.commit();
+
+ loginAsAdmin();
+ newRequest()
+ .setParam(PARAM_GROUP_NAME, group.getName())
+ .execute().assertNoContent();
+
+ assertThat(groupDao.selectById(dbSession, group.getId())).isNull();
+ }
+
@Test
public void delete_with_members() throws Exception {
- GroupDto group = groupDao.insert(session, new GroupDto().setName("to-delete"));
- userGroupDao.insert(session, new UserGroupDto().setGroupId(group.getId()).setUserId(42L));
- session.commit();
+ GroupDto group = groupDao.insert(dbSession, new GroupDto().setName("to-delete"));
+ userGroupDao.insert(dbSession, new UserGroupDto().setGroupId(group.getId()).setUserId(42L));
+ dbSession.commit();
loginAsAdmin();
- ws.newPostRequest("api/usergroups", "delete")
+ newRequest()
.setParam("id", group.getId().toString())
.execute().assertNoContent();
- assertThat(dbTester.select("SELECT group_id FROM groups_users")).isEmpty();
+ assertThat(db.select("SELECT group_id FROM groups_users")).isEmpty();
}
@Test
public void delete_with_permissions() throws Exception {
- GroupDto group = groupDao.insert(session, new GroupDto().setName("to-delete"));
- roleDao.insertGroupRole(session, new GroupRoleDto().setGroupId(group.getId()).setResourceId(42L).setRole(UserRole.ADMIN));
- session.commit();
+ GroupDto group = groupDao.insert(dbSession, new GroupDto().setName("to-delete"));
+ roleDao.insertGroupRole(dbSession, new GroupRoleDto().setGroupId(group.getId()).setResourceId(42L).setRole(UserRole.ADMIN));
+ dbSession.commit();
loginAsAdmin();
- ws.newPostRequest("api/usergroups", "delete")
+ newRequest()
.setParam("id", group.getId().toString())
.execute().assertNoContent();
- assertThat(dbTester.select("SELECT group_id FROM group_roles")).isEmpty();
+ assertThat(db.select("SELECT group_id FROM group_roles")).isEmpty();
}
@Test
public void delete_with_permission_templates() throws Exception {
- GroupDto group = groupDao.insert(session, new GroupDto().setName("to-delete"));
+ GroupDto group = groupDao.insert(dbSession, new GroupDto().setName("to-delete"));
permissionTemplateDao.insertGroupPermission(42L, group.getId(), UserRole.ADMIN);
- session.commit();
+ dbSession.commit();
loginAsAdmin();
- ws.newPostRequest("api/usergroups", "delete")
+ newRequest()
.setParam("id", group.getId().toString())
.execute().assertNoContent();
- assertThat(dbTester.select("SELECT group_id FROM perm_templates_groups")).isEmpty();
+ assertThat(db.select("SELECT group_id FROM perm_templates_groups")).isEmpty();
}
@Test(expected = NotFoundException.class)
public void not_found() throws Exception {
loginAsAdmin();
- ws.newPostRequest("api/usergroups", "delete")
+ newRequest()
.setParam("id", String.valueOf(defaultGroupId + 1L))
.execute();
}
@Test(expected = IllegalArgumentException.class)
public void cannot_delete_default_group() throws Exception {
loginAsAdmin();
- ws.newPostRequest("api/usergroups", "delete")
+ newRequest()
.setParam("id", defaultGroupId.toString())
.execute();
}
private void loginAsAdmin() {
userSession.login("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
}
+
+ private WsTester.TestRequest newRequest() {
+ return ws.newPostRequest("api/usergroups", "delete");
+ }
}
DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(),
groupDao, new GroupMembershipDao(dbTester.myBatis()), userGroupDao);
- tester = new WsTester(new UserGroupsWs(new UpdateAction(dbClient, userSession, new GroupUpdater(dbClient))));
+ tester = new WsTester(new UserGroupsWs(new UpdateAction(dbClient, userSession, new UserGroupUpdater(dbClient))));
session = dbClient.openSession(false);
}
--- /dev/null
+/*
+ * 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.usergroups.ws;
+
+import org.junit.Test;
+import org.sonar.core.platform.ComponentContainer;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class UserGroupsModuleTest {
+ @Test
+ public void verify_count_of_added_components() {
+ ComponentContainer container = new ComponentContainer();
+ new UserGroupsModule().configure(container);
+ assertThat(container.size()).isEqualTo(12);
+ }
+}
public void setUp() {
WsTester tester = new WsTester(new UserGroupsWs(
new SearchAction(mock(DbClient.class)),
- new CreateAction(mock(DbClient.class), mock(UserSession.class), mock(GroupUpdater.class))));
+ new CreateAction(mock(DbClient.class), mock(UserSession.class), mock(UserGroupUpdater.class))));
controller = tester.controller("api/usergroups");
}