]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6475 WS usergroups/users handle user group
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Mon, 5 Oct 2015 15:45:30 +0000 (17:45 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 6 Oct 2015 06:10:12 +0000 (08:10 +0200)
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupsWsParameters.java
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java

index 98ad4fb8244813ec72fa2feae178212ed1748d9e..8b0550352ea9d4ae88cf3878ad9b8faf65b8b42d 100644 (file)
@@ -41,13 +41,13 @@ public class UserGroupsWsParameters {
 
   private static void createGroupNameParameter(NewAction action) {
     action.createParam(PARAM_GROUP_NAME)
-      .setDescription("Group name or 'anyone' (case insensitive)")
+      .setDescription("Group name")
       .setExampleValue("sonar-administrators");
   }
 
   static NewParam createLoginParameter(NewAction action) {
     return action.createParam(PARAM_LOGIN)
-      .setDescription("Login of the user.")
+      .setDescription("User login")
       .setExampleValue("g.hopper");
   }
 }
index d00e5fe653df42ef42cc219f009dea5c7312bafa..b7c5b7bc63f473112419e41fa330f245cc8010d9 100644 (file)
@@ -29,17 +29,17 @@ import org.sonar.api.server.ws.WebService.SelectionMode;
 import org.sonar.api.utils.Paging;
 import org.sonar.api.utils.text.JsonWriter;
 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.db.user.GroupMembershipQuery;
 import org.sonar.db.user.UserMembershipDto;
 import org.sonar.db.user.UserMembershipQuery;
-import org.sonar.server.db.DbClient;
-import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.user.UserSession;
 
 import static org.sonar.api.utils.Paging.forPageIndex;
+import static org.sonar.server.usergroups.ws.UserGroupsWsParameters.createGroupParameters;
 
 public class UsersAction implements UserGroupsWsAction {
 
@@ -50,10 +50,12 @@ public class UsersAction implements UserGroupsWsAction {
   private static final String FIELD_LOGIN = "login";
 
   private final DbClient dbClient;
+  private final UserGroupFinder userGroupFinder;
   private final UserSession userSession;
 
-  public UsersAction(DbClient dbClient, UserSession userSession) {
+  public UsersAction(DbClient dbClient, UserGroupFinder userGroupFinder, UserSession userSession) {
     this.dbClient = dbClient;
+    this.userGroupFinder = userGroupFinder;
     this.userSession = userSession;
   }
 
@@ -62,45 +64,37 @@ public class UsersAction implements UserGroupsWsAction {
     NewAction action = context.createAction("users")
       .setDescription("Search for users with membership information with respect to a group.")
       .setHandler(this)
+      .setSince("5.2")
       .setResponseExample(getClass().getResource("example-users.json"))
-      .setSince("5.2");
+      .addSelectionModeParam()
+      .addSearchQuery("freddy", "names", "logins")
+      .addPagingParams(25);
 
-    action.createParam(PARAM_ID)
-      .setDescription("A group ID")
-      .setExampleValue("42")
-      .setRequired(true);
-
-    action.addSelectionModeParam();
-
-    action.addSearchQuery("freddy", "names", "logins");
-
-    action.addPagingParams(25);
+    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 wsGroupRef = WsGroupRef.fromUserGroupsRequest(request);
     int pageSize = request.mandatoryParamAsInt(Param.PAGE_SIZE);
     int page = request.mandatoryParamAsInt(Param.PAGE);
     String queryString = request.param(Param.TEXT_QUERY);
     String selected = request.mandatoryParam(Param.SELECTED);
 
-    UserMembershipQuery query = UserMembershipQuery.builder()
-      .groupId(groupId)
-      .memberSearch(queryString)
-      .membership(getMembership(selected))
-      .pageIndex(page)
-      .pageSize(pageSize)
-      .build();
-
     DbSession dbSession = dbClient.openSession(false);
     try {
-      GroupDto group = dbClient.groupDao().selectById(dbSession, groupId);
-      if (group == null) {
-        throw new NotFoundException(String.format("Could not find user group with id '%s'", groupId));
-      }
+      GroupDto group = userGroupFinder.getGroup(dbSession, wsGroupRef);
+      long groupId = group.getId();
+
+      UserMembershipQuery query = UserMembershipQuery.builder()
+        .groupId(groupId)
+        .memberSearch(queryString)
+        .membership(getMembership(selected))
+        .pageIndex(page)
+        .pageSize(pageSize)
+        .build();
       int total = dbClient.groupMembershipDao().countMembers(dbSession, query);
       Paging paging = forPageIndex(page).withPageSize(pageSize).andTotal(total);
       List<UserMembershipDto> users = dbClient.groupMembershipDao().selectMembers(dbSession, query, paging.offset(), paging.pageSize());
index f58bcfe0eedbb0f7da74cd14c0fb90727cb3ab18..607ab97c9c919ee579d0c56e88f04bcd8f92e19e 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;
@@ -29,59 +28,56 @@ import org.sonar.api.server.ws.WebService.Param;
 import org.sonar.api.server.ws.WebService.SelectionMode;
 import org.sonar.api.utils.System2;
 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.user.GroupDao;
 import org.sonar.db.user.GroupDto;
 import org.sonar.db.user.GroupMembershipDao;
+import org.sonar.db.user.UserDao;
 import org.sonar.db.user.UserDto;
 import org.sonar.db.user.UserGroupDao;
 import org.sonar.db.user.UserGroupDto;
-import org.sonar.server.db.DbClient;
 import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.tester.UserSessionRule;
-import org.sonar.db.user.GroupDao;
-import org.sonar.db.user.UserDao;
 import org.sonar.server.ws.WsTester;
 import org.sonar.server.ws.WsTester.TestRequest;
 import org.sonar.test.DbTests;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.server.usergroups.ws.UserGroupsWsParameters.PARAM_GROUP_NAME;
+
 @Category(DbTests.class)
 public class UsersActionTest {
 
   @Rule
-  public DbTester dbTester = DbTester.create(System2.INSTANCE);
+  public DbTester db = DbTester.create(System2.INSTANCE);
   @Rule
   public UserSessionRule userSession = UserSessionRule.standalone();
 
   WsTester wsTester;
   DbClient dbClient;
-  DbSession session;
+  DbSession dbSession;
 
   @Before
   public void setUp() {
-    dbTester.truncateTables();
-
-    System2 system2 = System2.INSTANCE;
-    UserDao userDao = new UserDao(dbTester.myBatis(), system2);
-    GroupDao groupDao = new GroupDao(system2);
-    UserGroupDao userGroupDao = new UserGroupDao();
-    GroupMembershipDao groupMembershipDao = new GroupMembershipDao(dbTester.myBatis());
-
-    dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), userDao, groupDao, userGroupDao, groupMembershipDao);
-    session = dbClient.openSession(false);
-    session.commit();
-
-    wsTester = new WsTester(new UserGroupsWs(new UsersAction(dbClient, userSession)));
+    dbClient = db.getDbClient();
+    dbSession = db.getSession();
+    UserDao userDao = dbClient.userDao();
+    GroupDao groupDao = dbClient.groupDao();
+    UserGroupDao userGroupDao = dbClient.userGroupDao();
+    GroupMembershipDao groupMembershipDao = dbClient.groupMembershipDao();
+
+    wsTester = new WsTester(new UserGroupsWs(
+      new UsersAction(
+        dbClient,
+        new UserGroupFinder(dbClient),
+        userSession)));
     userSession.login("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
 
   }
 
-  @After
-  public void tearDown() {
-    session.close();
-  }
-
   @Test(expected = NotFoundException.class)
   public void fail_on_unknown_user() throws Exception {
     newUsersRequest()
@@ -97,14 +93,10 @@ public class UsersActionTest {
       .setParam("login", "john").execute();
   }
 
-  private TestRequest newUsersRequest() {
-    return wsTester.newGetRequest("api/usergroups", "users");
-  }
-
   @Test
   public void empty_users() throws Exception {
     GroupDto group = insertGroup();
-    session.commit();
+    dbSession.commit();
 
     newUsersRequest()
       .setParam("login", "john")
@@ -119,7 +111,7 @@ public class UsersActionTest {
     UserDto groupUser = insertUser("ada", "Ada Lovelace");
     insertUser("grace", "Grace Hopper");
     addUserToGroup(groupUser, group);
-    session.commit();
+    dbSession.commit();
 
     newUsersRequest()
       .setParam("id", group.getId().toString())
@@ -128,13 +120,29 @@ public class UsersActionTest {
       .assertJson(getClass(), "all.json");
   }
 
+  @Test
+  public void all_users_by_group_name() throws Exception {
+    GroupDto group = insertGroup();
+    UserDto adaLovelace = insertUser("ada", "Ada Lovelace");
+    UserDto graceHopper = insertUser("grace", "Grace Hopper");
+    addUserToGroup(adaLovelace, group);
+    addUserToGroup(graceHopper, group);
+    dbSession.commit();
+
+    String response = newUsersRequest()
+      .setParam(PARAM_GROUP_NAME, group.getName())
+      .execute().outputAsString();
+
+    assertThat(response).contains("Ada Lovelace", "Grace Hopper");
+  }
+
   @Test
   public void selected_users() throws Exception {
     GroupDto group = insertGroup();
     UserDto groupUser = insertUser("ada", "Ada Lovelace");
     insertUser("grace", "Grace Hopper");
     addUserToGroup(groupUser, group);
-    session.commit();
+    dbSession.commit();
 
     newUsersRequest()
       .setParam("id", group.getId().toString())
@@ -154,7 +162,7 @@ public class UsersActionTest {
     UserDto groupUser = insertUser("ada", "Ada Lovelace");
     insertUser("grace", "Grace Hopper");
     addUserToGroup(groupUser, group);
-    session.commit();
+    dbSession.commit();
 
     newUsersRequest()
       .setParam("id", group.getId().toString())
@@ -169,7 +177,7 @@ public class UsersActionTest {
     UserDto groupUser = insertUser("ada", "Ada Lovelace");
     insertUser("grace", "Grace Hopper");
     addUserToGroup(groupUser, group);
-    session.commit();
+    dbSession.commit();
 
     newUsersRequest()
       .setParam("id", group.getId().toString())
@@ -193,7 +201,7 @@ public class UsersActionTest {
     UserDto groupUser = insertUser("ada", "Ada Lovelace");
     insertUser("grace", "Grace Hopper");
     addUserToGroup(groupUser, group);
-    session.commit();
+    dbSession.commit();
 
     newUsersRequest()
       .setParam("id", group.getId().toString())
@@ -209,16 +217,20 @@ public class UsersActionTest {
       .assertJson(getClass(), "all_ada.json");
   }
 
+  private TestRequest newUsersRequest() {
+    return wsTester.newGetRequest("api/usergroups", "users");
+  }
+
   private GroupDto insertGroup() {
-    return dbClient.groupDao().insert(session, new GroupDto()
+    return dbClient.groupDao().insert(dbSession, new GroupDto()
       .setName("sonar-users"));
   }
 
   private UserDto insertUser(String login, String name) {
-    return dbClient.userDao().insert(session, new UserDto().setLogin(login).setName(name));
+    return dbClient.userDao().insert(dbSession, new UserDto().setLogin(login).setName(name));
   }
 
   private void addUserToGroup(UserDto user, GroupDto usersGroup) {
-    dbClient.userGroupDao().insert(session, new UserGroupDto().setUserId(user.getId()).setGroupId(usersGroup.getId()));
+    dbClient.userGroupDao().insert(dbSession, new UserGroupDto().setUserId(user.getId()).setGroupId(usersGroup.getId()));
   }
 }