aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-10-05 17:45:30 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-10-06 08:10:12 +0200
commit538324eece870b20ae18f0d9072fa286b774c843 (patch)
tree37114b9dc83259304ed97e925c3f36c0de0223c7 /server/sonar-server
parent1970bcadf13a92dd1dafd803181a7e28e3a1e90c (diff)
downloadsonarqube-538324eece870b20ae18f0d9072fa286b774c843.tar.gz
sonarqube-538324eece870b20ae18f0d9072fa286b774c843.zip
SONAR-6475 WS usergroups/users handle user group
Diffstat (limited to 'server/sonar-server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UserGroupsWsParameters.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java48
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java86
3 files changed, 72 insertions, 66 deletions
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<UserMembershipDto> 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())
@@ -129,12 +121,28 @@ public class UsersActionTest {
}
@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()));
}
}