]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6474 WS usergroups/delete handles group name
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Mon, 5 Oct 2015 15:20:56 +0000 (17:20 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 6 Oct 2015 06:10:12 +0000 (08:10 +0200)
30 files changed:
server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/CreateAction.java
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/DeleteAction.java
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/GroupUpdater.java [deleted file]
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UpdateAction.java
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupFinder.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupUpdater.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupsModule.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddGroupActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/AddUserActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/GroupsActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/RemoveUserActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/TemplateGroupsActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/TemplateUsersActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/UsersActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/AddGroupToTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/AddUserToTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/ApplyTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/DeleteTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/RemoveGroupFromTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/RemoveUserFromTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/SetDefaultTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/UpdateTemplateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/CreateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UpdateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UserGroupsModuleTest.java [new file with mode: 0644]
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UserGroupsWsTest.java

index 4958fa1c81237908ad4d65c2c1fed9665c34c8fe..187ba67d49a6e1b3e586848273519eb4edf26f0f 100644 (file)
@@ -30,6 +30,7 @@ import org.sonar.db.permission.PermissionTemplateDto;
 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;
@@ -40,11 +41,13 @@ import static org.sonar.server.ws.WsUtils.checkFound;
 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;
   }
 
@@ -76,26 +79,11 @@ public class PermissionDependenciesFinder {
    */
   @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) {
index 309ea6a5d0dfcfb2692ebe296737e5ce25cf4d28..ef07490631ba01b552a36088c200935644f06ac6 100644 (file)
@@ -31,18 +31,18 @@ import org.sonar.db.user.GroupDto;
 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;
index e0ea69526ff9f32c90735fd212fdb149c49226d1..4eeacd5a21f2f70f47d949acc82ff071e0169ca6 100644 (file)
  */
 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();
@@ -89,19 +92,19 @@ public class DeleteAction implements UserGroupsWsAction {
   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);
   }
 }
diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/GroupUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/GroupUpdater.java
deleted file mode 100644 (file)
index e67c605..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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();
-  }
-}
index 9aa000b91044add8ee670de96ee33b53defd28ec..eb5b66210f09baf85875f2ea88e8d311e5a5791d 100644 (file)
@@ -33,19 +33,19 @@ import org.sonar.server.exceptions.NotFoundException;
 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;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupFinder.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupFinder.java
new file mode 100644 (file)
index 0000000..470aa8a
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * 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;
+  }
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupUpdater.java
new file mode 100644 (file)
index 0000000..9924563
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * 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();
+  }
+}
index 68334a09948e7c47d9375afeaa7f78a58e8a76a6..e2f01e13f9339df65613b1fea2afac05f6ccafe4 100644 (file)
@@ -26,8 +26,10 @@ public class UserGroupsModule extends Module {
   @Override
   protected void configureModule() {
     add(
-      GroupUpdater.class,
       UserGroupsWs.class,
+      UserGroupUpdater.class,
+      UserGroupFinder.class,
+      // actions
       SearchAction.class,
       CreateAction.class,
       DeleteAction.class,
index 3c3779189d8ad435627814d949199510403d6761..787fab250e71af621f3a20f3e5a42b9ca86800f9 100644 (file)
@@ -42,6 +42,7 @@ import org.sonar.server.exceptions.ServerException;
 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;
 
@@ -52,12 +53,12 @@ import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
 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 {
@@ -79,7 +80,12 @@ 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);
   }
 
index 48e3b6d7bc8e1dc81ec5b567ae54854a444a89e7..4281848a89cd50ad665a350864a69fa79273e049 100644 (file)
@@ -41,6 +41,7 @@ import org.sonar.server.exceptions.ServerException;
 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;
 
@@ -81,7 +82,8 @@ public class AddUserActionTest {
     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);
   }
 
index 3d5ea0755a2dd242125d79e5be7b40102ff6365a..8b7ed74c2a1a485992050893584f31a4ada10165 100644 (file)
@@ -47,6 +47,7 @@ import org.sonar.server.exceptions.ForbiddenException;
 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;
 
@@ -85,7 +86,7 @@ public class GroupsActionTest {
     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);
index 7a485b6660cebe730839772a26a3f6393760b1a4..2b4f3323eedaabe818db4de1c994e07252b25d89 100644 (file)
@@ -42,6 +42,7 @@ import org.sonar.server.exceptions.ServerException;
 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;
 
@@ -78,7 +79,7 @@ public class RemoveGroupActionTest {
     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);
   }
 
index 6557350bc681d581ac4ab03d8dd8d9886783b798..eb29e8bb8a785f4b25bdc12d2cbe351e756054a7 100644 (file)
@@ -41,6 +41,7 @@ import org.sonar.server.exceptions.ServerException;
 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;
 
@@ -79,7 +80,7 @@ public class RemoveUserActionTest {
     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);
   }
 
index 8368c1276cdc9e06a9aee8f376dd3c81510c7319..3e88bffa8a993147bcc4d6688052137ffe82ad33 100644 (file)
@@ -45,6 +45,7 @@ import org.sonar.server.exceptions.ForbiddenException;
 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;
@@ -85,7 +86,7 @@ public class SearchProjectPermissionsActionTest {
     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);
@@ -225,7 +226,8 @@ public class SearchProjectPermissionsActionTest {
     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);
 
index 53ed5888aa543ad58507107279b08ac8159c5641..f05da6003ab63573b40b334ee34200801f4b6ebc 100644 (file)
@@ -47,6 +47,7 @@ import org.sonar.server.exceptions.NotFoundException;
 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;
@@ -61,8 +62,8 @@ import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTem
 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)
@@ -88,7 +89,12 @@ public class TemplateGroupsActionTest {
   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);
index bfd1f1f51e7e16b251d3c9afcaa0a130218204f2..6c10b5d617497835130e8771d646d4e74e856afa 100644 (file)
@@ -46,6 +46,7 @@ import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.exceptions.UnauthorizedException;
 import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.usergroups.ws.UserGroupFinder;
 import org.sonar.server.ws.TestRequest;
 import org.sonar.server.ws.WsActionTester;
 import org.sonar.test.DbTests;
@@ -80,7 +81,7 @@ public class TemplateUsersActionTest {
 
   @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);
 
index 9b24ebd01f3d933ddd595ec4d0968473da9d410f..397a495ca35a518ef7a06da2c25516cd28a4044d 100644 (file)
@@ -43,6 +43,7 @@ import org.sonar.server.exceptions.ForbiddenException;
 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;
 
@@ -76,7 +77,7 @@ public class UsersActionTest {
   @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);
 
index 1d26b5ae5d821901a3dc6e83f240e16c305555c5..8c9516723aa44e2642dd47d63d343ec401216dbf 100644 (file)
@@ -49,6 +49,7 @@ import org.sonar.server.exceptions.UnauthorizedException;
 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;
@@ -92,7 +93,7 @@ public class AddGroupToTemplateActionTest {
     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));
index 6bc89246c15a17faefc1368c9173d86163115b6b..e42476b4c2ab93281d21c0c4f1a5e0b516be0447 100644 (file)
@@ -48,6 +48,7 @@ import org.sonar.server.exceptions.UnauthorizedException;
 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;
@@ -87,7 +88,7 @@ public class AddUserToTemplateActionTest {
     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));
index 5f6764949668044ec1cc74c284ec4644f386cc58..ec227d9ec144c26fd38ae8aa2b4e980a2a108b76 100644 (file)
@@ -58,6 +58,7 @@ import org.sonar.server.permission.PermissionFinder;
 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;
@@ -110,7 +111,7 @@ public class ApplyTemplateActionTest {
     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);
index 2a6ecc9d7b008e58d8f8c23f4eb82ce622859ede..6021d9a6649216acec7b6773650ba37449e20c0e 100644 (file)
@@ -47,6 +47,7 @@ import org.sonar.server.exceptions.UnauthorizedException;
 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;
@@ -86,7 +87,7 @@ public class DeleteTemplateActionTest {
     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));
index cbb9772b6c4ff90250c84ddb2d1a5caa492f28b6..8ba57d49b7283cae0eede168841d5f933576a03d 100644 (file)
@@ -48,6 +48,7 @@ import org.sonar.server.exceptions.UnauthorizedException;
 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;
@@ -62,8 +63,8 @@ import static org.sonar.db.user.GroupTesting.newGroupDto;
 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 {
@@ -90,7 +91,7 @@ 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));
index 7bda0f44f05ac27f4dc2901645c14cb61d5bf979..b50d28d0a2e73fb41ba921efd9c8a7053daa4e72 100644 (file)
@@ -48,6 +48,7 @@ import org.sonar.server.exceptions.UnauthorizedException;
 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;
@@ -88,7 +89,7 @@ public class RemoveUserFromTemplateActionTest {
     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));
index cd7dde8c148fbc9fc458e10f30a572cf5d61b953..6c40baada039734a00f573c383c5679982621795 100644 (file)
@@ -48,6 +48,7 @@ import org.sonar.server.permission.ws.PermissionDependenciesFinder;
 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;
@@ -94,7 +95,7 @@ public class SetDefaultTemplateActionTest {
 
     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));
index b882b9f82e5ff97162751a3b46eeb2dfb577f2eb..1193571351c0507bdb5e8856a821f8591d06168c 100644 (file)
@@ -42,6 +42,7 @@ import org.sonar.server.exceptions.NotFoundException;
 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;
@@ -80,7 +81,7 @@ public class UpdateTemplateActionTest {
 
     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));
 
index 8ee28e049c7f05f7dfb50e16c8ae7e2dc3ffdf3a..2411ad91327f9e22e91544e7e2043b97ac480db1 100644 (file)
@@ -67,7 +67,7 @@ public class CreateActionTest {
 
     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);
   }
index ca7bc0f9cb85efb1a0736b333fa2fc77802f93ec..e835f5b15989ab8c9780d202b446713f5cdda7bf 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.sonar.server.usergroups.ws;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -30,6 +29,7 @@ import org.sonar.api.config.Settings;
 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;
@@ -39,121 +39,126 @@ import org.sonar.db.user.GroupRoleDto;
 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();
   }
@@ -161,7 +166,7 @@ public class DeleteActionTest {
   @Test(expected = IllegalArgumentException.class)
   public void cannot_delete_default_group() throws Exception {
     loginAsAdmin();
-    ws.newPostRequest("api/usergroups", "delete")
+    newRequest()
       .setParam("id", defaultGroupId.toString())
       .execute();
   }
@@ -169,4 +174,8 @@ public class DeleteActionTest {
   private void loginAsAdmin() {
     userSession.login("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
   }
+
+  private WsTester.TestRequest newRequest() {
+    return ws.newPostRequest("api/usergroups", "delete");
+  }
 }
index e03e5329b52e31034bcdd0db2aa31f35864ef18a..9cc1145e08aa9e66dc243a18ccf100e6f9146a6d 100644 (file)
@@ -76,7 +76,7 @@ public class UpdateActionTest {
     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);
   }
diff --git a/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UserGroupsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UserGroupsModuleTest.java
new file mode 100644 (file)
index 0000000..3e61a51
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * 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);
+  }
+}
index d739480aa9ab6c5420d647aa4e08f793d22e4cd9..88e66c1a01a5dced9602ac2af28a20d93948a0d9 100644 (file)
@@ -41,7 +41,7 @@ public class UserGroupsWsTest {
   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");
   }