From: Teryk Bellahsene Date: Mon, 5 Oct 2015 15:45:30 +0000 (+0200) Subject: SONAR-6475 WS usergroups/users handle user group X-Git-Tag: 5.2-RC1~59 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=538324eece870b20ae18f0d9072fa286b774c843;p=sonarqube.git SONAR-6475 WS usergroups/users handle user group --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupsWsParameters.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupsWsParameters.java index 98ad4fb8244..8b0550352ea 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupsWsParameters.java +++ b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupsWsParameters.java @@ -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"); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java index d00e5fe653d..b7c5b7bc63f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java @@ -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 users = dbClient.groupMembershipDao().selectMembers(dbSession, query, paging.offset(), paging.pageSize()); diff --git a/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java index f58bcfe0eed..607ab97c9c9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java @@ -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())); } }