@@ -19,7 +19,6 @@ | |||
*/ | |||
package org.sonar.server.usergroups.ws; | |||
import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
@@ -33,9 +32,13 @@ import org.sonar.server.exceptions.NotFoundException; | |||
import org.sonar.server.exceptions.UnauthorizedException; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.ws.WsTester; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.TestResponse; | |||
import org.sonar.server.ws.WsActionTester; | |||
import static java.net.HttpURLConnection.HTTP_NO_CONTENT; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.api.security.DefaultGroups.ANYONE; | |||
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; | |||
import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_GROUP_NAME; | |||
import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_LOGIN; | |||
@@ -51,12 +54,7 @@ public class AddUserActionTest { | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private WsTester ws; | |||
@Before | |||
public void setUp() { | |||
ws = new WsTester(new UserGroupsWs(new AddUserAction(db.getDbClient(), userSession, newGroupWsSupport()))); | |||
} | |||
private WsActionTester ws = new WsActionTester(new AddUserAction(db.getDbClient(), userSession, newGroupWsSupport())); | |||
@Test | |||
public void add_user_to_group_referenced_by_its_id() throws Exception { | |||
@@ -67,8 +65,7 @@ public class AddUserActionTest { | |||
newRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).containsOnly(group.getId()); | |||
} | |||
@@ -82,8 +79,7 @@ public class AddUserActionTest { | |||
newRequest() | |||
.setParam(PARAM_GROUP_NAME, group.getName()) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).containsOnly(group.getId()); | |||
} | |||
@@ -100,8 +96,7 @@ public class AddUserActionTest { | |||
.setParam(PARAM_ORGANIZATION_KEY, org.getKey()) | |||
.setParam(PARAM_GROUP_NAME, group.getName()) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).containsOnly(group.getId()); | |||
} | |||
@@ -118,8 +113,7 @@ public class AddUserActionTest { | |||
newRequest() | |||
.setParam("id", admins.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).containsOnly(admins.getId(), users.getId()); | |||
} | |||
@@ -134,8 +128,7 @@ public class AddUserActionTest { | |||
newRequest() | |||
.setParam("id", users.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
// do not insert duplicated row | |||
assertThat(db.users().selectGroupIdsOfUser(user)).hasSize(1).containsOnly(users.getId()); | |||
@@ -152,19 +145,33 @@ public class AddUserActionTest { | |||
newRequest() | |||
.setParam("id", users.getId().toString()) | |||
.setParam("login", user2.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user1)).containsOnly(users.getId()); | |||
assertThat(db.users().selectGroupIdsOfUser(user2)).containsOnly(users.getId()); | |||
} | |||
@Test | |||
public void response_status_is_no_content() throws Exception { | |||
GroupDto group = db.users().insertGroup(); | |||
UserDto user = db.users().insertUser(); | |||
loginAsAdminOnDefaultOrganization(); | |||
TestResponse response = newRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute(); | |||
assertThat(response.getStatus()).isEqualTo(HTTP_NO_CONTENT); | |||
} | |||
@Test | |||
public void fail_if_group_does_not_exist() throws Exception { | |||
UserDto user = db.users().insertUser(); | |||
loginAsAdminOnDefaultOrganization(); | |||
expectedException.expect(NotFoundException.class); | |||
expectedException.expectMessage("No group with id '42'"); | |||
newRequest() | |||
.setParam("id", "42") | |||
@@ -178,6 +185,7 @@ public class AddUserActionTest { | |||
loginAsAdminOnDefaultOrganization(); | |||
expectedException.expect(NotFoundException.class); | |||
expectedException.expectMessage("Could not find a user with login 'my-admin'"); | |||
newRequest() | |||
.setParam("id", group.getId().toString()) | |||
@@ -228,8 +236,24 @@ public class AddUserActionTest { | |||
.setParam(PARAM_ORGANIZATION_KEY, org.getKey()) | |||
.setParam(PARAM_GROUP_NAME, group.getName()) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
} | |||
@Test | |||
public void fail_to_add_user_to_anyone() throws Exception { | |||
OrganizationDto organization = db.organizations().insert(org -> org.setKey("org")); | |||
UserDto user = db.users().insertUser(); | |||
addUserAsMemberOfOrganization(organization, user); | |||
loginAsAdmin(organization); | |||
expectedException.expect(NotFoundException.class); | |||
expectedException.expectMessage("No group with name 'Anyone' in organization 'org'"); | |||
newRequest() | |||
.setParam(PARAM_GROUP_NAME, ANYONE) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.setParam(PARAM_ORGANIZATION_KEY, organization.getKey()) | |||
.execute(); | |||
} | |||
private void executeRequest(GroupDto groupDto, UserDto userDto) throws Exception { | |||
@@ -239,8 +263,8 @@ public class AddUserActionTest { | |||
.execute(); | |||
} | |||
private WsTester.TestRequest newRequest() { | |||
return ws.newPostRequest("api/user_groups", "add_user"); | |||
private TestRequest newRequest() { | |||
return ws.newRequest(); | |||
} | |||
private void loginAsAdminOnDefaultOrganization() { |
@@ -19,7 +19,6 @@ | |||
*/ | |||
package org.sonar.server.usergroups.ws; | |||
import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
@@ -34,8 +33,11 @@ import org.sonar.server.exceptions.ForbiddenException; | |||
import org.sonar.server.exceptions.NotFoundException; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.ws.WsTester; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.TestResponse; | |||
import org.sonar.server.ws.WsActionTester; | |||
import static java.net.HttpURLConnection.HTTP_NO_CONTENT; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; | |||
import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_GROUP_NAME; | |||
@@ -52,13 +54,7 @@ public class RemoveUserActionTest { | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private WsTester ws; | |||
@Before | |||
public void setUp() { | |||
GroupWsSupport groupSupport = new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider); | |||
ws = new WsTester(new UserGroupsWs(new RemoveUserAction(db.getDbClient(), userSession, groupSupport))); | |||
} | |||
private WsActionTester ws = new WsActionTester(new RemoveUserAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider))); | |||
@Test | |||
public void does_nothing_if_user_is_not_in_group() throws Exception { | |||
@@ -72,8 +68,7 @@ public class RemoveUserActionTest { | |||
newRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).isEmpty(); | |||
} | |||
@@ -90,8 +85,7 @@ public class RemoveUserActionTest { | |||
newRequest() | |||
.setParam("id", users.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).isEmpty(); | |||
} | |||
@@ -107,8 +101,7 @@ public class RemoveUserActionTest { | |||
newRequest() | |||
.setParam(PARAM_GROUP_NAME, group.getName()) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).isEmpty(); | |||
} | |||
@@ -128,8 +121,7 @@ public class RemoveUserActionTest { | |||
.setParam(PARAM_ORGANIZATION_KEY, org.getKey()) | |||
.setParam(PARAM_GROUP_NAME, group.getName()) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).isEmpty(); | |||
} | |||
@@ -150,12 +142,28 @@ public class RemoveUserActionTest { | |||
newRequest() | |||
.setParam("id", admins.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute() | |||
.assertNoContent(); | |||
.execute(); | |||
assertThat(db.users().selectGroupIdsOfUser(user)).containsOnly(users.getId()); | |||
} | |||
@Test | |||
public void response_status_is_no_content() throws Exception { | |||
// keep an administrator | |||
insertAnAdministratorInDefaultOrganization(); | |||
GroupDto users = db.users().insertGroup(db.getDefaultOrganization(), "users"); | |||
UserDto user = db.users().insertUser("my-admin"); | |||
db.users().insertMember(users, user); | |||
loginAsAdminOnDefaultOrganization(); | |||
TestResponse response = newRequest() | |||
.setParam("id", users.getId().toString()) | |||
.setParam("login", user.getLogin()) | |||
.execute(); | |||
assertThat(response.getStatus()).isEqualTo(HTTP_NO_CONTENT); | |||
} | |||
@Test | |||
public void fail_if_unknown_group() throws Exception { | |||
UserDto user = db.users().insertUser("my-admin"); | |||
@@ -217,8 +225,8 @@ public class RemoveUserActionTest { | |||
.execute(); | |||
} | |||
private WsTester.TestRequest newRequest() { | |||
return ws.newPostRequest("api/user_groups", "remove_user"); | |||
private TestRequest newRequest() { | |||
return ws.newRequest(); | |||
} | |||
private void loginAsAdminOnDefaultOrganization() { |
@@ -19,7 +19,6 @@ | |||
*/ | |||
package org.sonar.server.usergroups.ws; | |||
import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
@@ -32,12 +31,14 @@ import org.sonar.db.user.UserDto; | |||
import org.sonar.server.exceptions.UnauthorizedException; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.ws.WsTester; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.WsActionTester; | |||
import static org.apache.commons.lang.StringUtils.capitalize; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.db.user.GroupTesting.newGroupDto; | |||
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; | |||
import static org.sonar.db.user.GroupTesting.newGroupDto; | |||
import static org.sonar.test.JsonAssert.assertJson; | |||
public class SearchActionTest { | |||
@@ -50,17 +51,20 @@ public class SearchActionTest { | |||
@Rule | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private WsTester ws; | |||
@Before | |||
public void setUp() { | |||
ws = new WsTester(new UserGroupsWs(new SearchAction(db.getDbClient(), userSession, newGroupWsSupport()))); | |||
} | |||
private WsActionTester ws = new WsActionTester(new SearchAction(db.getDbClient(), userSession, newGroupWsSupport())); | |||
@Test | |||
public void search_empty() throws Exception { | |||
loginAsDefaultOrgAdmin(); | |||
newRequest().execute().assertJson(getClass(), "empty.json"); | |||
String result = newRequest().execute().getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"p\": 1,\n" + | |||
" \"ps\": 100,\n" + | |||
" \"total\": 0,\n" + | |||
" \"groups\": []\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -70,9 +74,19 @@ public class SearchActionTest { | |||
insertGroup(db.getDefaultOrganization(), "customer1", 0); | |||
insertGroup(db.getDefaultOrganization(), "customer2", 0); | |||
insertGroup(db.getDefaultOrganization(), "customer3", 0); | |||
loginAsDefaultOrgAdmin(); | |||
newRequest().execute().assertJson(getClass(), "five_groups.json"); | |||
String result = newRequest().execute().getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"groups\": [\n" + | |||
" {\"name\": \"admins\", \"description\": \"Admins\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer1\", \"description\": \"Customer1\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer2\", \"description\": \"Customer2\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer3\", \"description\": \"Customer3\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"users\", \"description\": \"Users\", \"membersCount\": 0}\n" + | |||
" ]\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -82,9 +96,19 @@ public class SearchActionTest { | |||
insertGroup(db.getDefaultOrganization(), "customer1", 0); | |||
insertGroup(db.getDefaultOrganization(), "customer2", 4); | |||
insertGroup(db.getDefaultOrganization(), "customer3", 0); | |||
loginAsDefaultOrgAdmin(); | |||
newRequest().execute().assertJson(getClass(), "with_members.json"); | |||
String result = newRequest().execute().getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"groups\": [\n" + | |||
" {\"name\": \"admins\", \"description\": \"Admins\", \"membersCount\": 1},\n" + | |||
" {\"name\": \"customer1\", \"description\": \"Customer1\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer2\", \"description\": \"Customer2\", \"membersCount\": 4},\n" + | |||
" {\"name\": \"customer3\", \"description\": \"Customer3\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"users\", \"description\": \"Users\", \"membersCount\": 5}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
@@ -94,9 +118,17 @@ public class SearchActionTest { | |||
insertGroup(db.getDefaultOrganization(), "customer%_%/1", 0); | |||
insertGroup(db.getDefaultOrganization(), "customer%_%/2", 0); | |||
insertGroup(db.getDefaultOrganization(), "customer%_%/3", 0); | |||
loginAsDefaultOrgAdmin(); | |||
newRequest().setParam(Param.TEXT_QUERY, "tomer%_%/").execute().assertJson(getClass(), "customers.json"); | |||
String result = newRequest().setParam(Param.TEXT_QUERY, "tomer%_%/").execute().getInput(); | |||
assertJson(result).ignoreFields("id").isSimilarTo("{\n" + | |||
" \"groups\": [\n" + | |||
" {\"name\": \"customer%_%/1\", \"description\": \"Customer%_%/1\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer%_%/2\", \"description\": \"Customer%_%/2\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer%_%/3\", \"description\": \"Customer%_%/3\", \"membersCount\": 0}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
@@ -106,46 +138,65 @@ public class SearchActionTest { | |||
insertGroup(db.getDefaultOrganization(), "customer1", 0); | |||
insertGroup(db.getDefaultOrganization(), "customer2", 0); | |||
insertGroup(db.getDefaultOrganization(), "customer3", 0); | |||
loginAsDefaultOrgAdmin(); | |||
newRequest() | |||
.setParam(Param.PAGE_SIZE, "3").execute().assertJson(getClass(), "page_1.json"); | |||
newRequest() | |||
.setParam(Param.PAGE_SIZE, "3").setParam(Param.PAGE, "2").execute().assertJson(getClass(), "page_2.json"); | |||
newRequest() | |||
.setParam(Param.PAGE_SIZE, "3").setParam(Param.PAGE, "3").execute().assertJson(getClass(), "page_3.json"); | |||
assertJson(newRequest().setParam(Param.PAGE_SIZE, "3").execute().getInput()).isSimilarTo("{\n" + | |||
" \"p\": 1,\n" + | |||
" \"ps\": 3,\n" + | |||
" \"total\": 5,\n" + | |||
" \"groups\": [\n" + | |||
" {\"name\": \"admins\", \"description\": \"Admins\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer1\", \"description\": \"Customer1\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"customer2\", \"description\": \"Customer2\", \"membersCount\": 0}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
assertJson(newRequest().setParam(Param.PAGE_SIZE, "3").setParam(Param.PAGE, "2").execute().getInput()).isSimilarTo("{\n" + | |||
" \"p\": 2,\n" + | |||
" \"ps\": 3,\n" + | |||
" \"total\": 5,\n" + | |||
" \"groups\": [\n" + | |||
" {\"name\": \"customer3\", \"description\": \"Customer3\", \"membersCount\": 0},\n" + | |||
" {\"name\": \"users\", \"description\": \"Users\", \"membersCount\": 0}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
assertJson(newRequest().setParam(Param.PAGE_SIZE, "3").setParam(Param.PAGE, "3").execute().getInput()).isSimilarTo("{\n" + | |||
" \"p\": 3,\n" + | |||
" \"ps\": 3,\n" + | |||
" \"total\": 5,\n" + | |||
" \"groups\": []\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
public void search_with_fields() throws Exception { | |||
insertGroup(db.getDefaultOrganization(), "sonar-users", 0); | |||
loginAsDefaultOrgAdmin(); | |||
assertThat(newRequest().execute().outputAsString()) | |||
assertThat(newRequest().execute().getInput()) | |||
.contains("id") | |||
.contains("name") | |||
.contains("description") | |||
.contains("membersCount"); | |||
assertThat(newRequest().setParam(Param.FIELDS, "").execute().outputAsString()) | |||
assertThat(newRequest().setParam(Param.FIELDS, "").execute().getInput()) | |||
.contains("id") | |||
.contains("name") | |||
.contains("description") | |||
.contains("membersCount"); | |||
assertThat(newRequest().setParam(Param.FIELDS, "name").execute().outputAsString()) | |||
assertThat(newRequest().setParam(Param.FIELDS, "name").execute().getInput()) | |||
.contains("id") | |||
.contains("name") | |||
.doesNotContain("description") | |||
.doesNotContain("membersCount"); | |||
assertThat(newRequest().setParam(Param.FIELDS, "description").execute().outputAsString()) | |||
assertThat(newRequest().setParam(Param.FIELDS, "description").execute().getInput()) | |||
.contains("id") | |||
.doesNotContain("name") | |||
.contains("description") | |||
.doesNotContain("membersCount"); | |||
assertThat(newRequest().setParam(Param.FIELDS, "membersCount").execute().outputAsString()) | |||
assertThat(newRequest().setParam(Param.FIELDS, "membersCount").execute().getInput()) | |||
.contains("id") | |||
.doesNotContain("name") | |||
.doesNotContain("description") | |||
@@ -161,12 +212,9 @@ public class SearchActionTest { | |||
loginAsDefaultOrgAdmin(); | |||
userSession.addPermission(ADMINISTER, org); | |||
newRequest() | |||
.setParam("organization", org.getKey()) | |||
.execute() | |||
.assertJson( | |||
"{\"total\":1,\"p\":1,\"ps\":100," + | |||
"\"groups\":[{\"id\":\"" + group.getId() + "\",\"name\":\"users\"}]}\n"); | |||
String result = newRequest().setParam("organization", org.getKey()).execute().getInput(); | |||
assertJson(result).isSimilarTo("{\"groups\":[{\"id\":\"" + group.getId() + "\",\"name\":\"users\"}]}\n"); | |||
} | |||
@Test | |||
@@ -177,8 +225,8 @@ public class SearchActionTest { | |||
newRequest().execute(); | |||
} | |||
private WsTester.TestRequest newRequest() { | |||
return ws.newGetRequest("api/user_groups", "search"); | |||
private TestRequest newRequest() { | |||
return ws.newRequest(); | |||
} | |||
private void insertGroup(OrganizationDto org, String name, int numberOfMembers) { |
@@ -33,14 +33,15 @@ import org.sonar.server.exceptions.NotFoundException; | |||
import org.sonar.server.exceptions.ServerException; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.ws.WsTester; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.WsActionTester; | |||
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; | |||
import static org.sonar.test.JsonAssert.assertJson; | |||
public class UpdateActionTest { | |||
private static final String DEFAULT_GROUP_NAME_KEY = "sonar.defaultGroup"; | |||
private static final String DEFAULT_GROUP_NAME_VALUE = "DEFAULT_GROUP_NAME_VALUE"; | |||
private static final String DEFAULT_GROUP_NAME_VALUE = "sonar-users"; | |||
@Rule | |||
public DbTester db = DbTester.create(System2.INSTANCE); | |||
@@ -50,7 +51,7 @@ public class UpdateActionTest { | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private WsTester ws = new WsTester(new UserGroupsWs(new UpdateAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider)))); | |||
private WsActionTester ws = new WsActionTester(new UpdateAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider))); | |||
@Test | |||
public void update_both_name_and_description() throws Exception { | |||
@@ -59,17 +60,19 @@ public class UpdateActionTest { | |||
db.users().insertMember(group, user); | |||
loginAsAdminOnDefaultOrganization(); | |||
newRequest() | |||
String result = newRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("name", "new-name") | |||
.setParam("description", "New Description") | |||
.execute().assertJson("{" + | |||
" \"group\": {" + | |||
" \"name\": \"new-name\"," + | |||
" \"description\": \"New Description\"," + | |||
" \"membersCount\": 1" + | |||
" }" + | |||
"}"); | |||
.execute().getInput(); | |||
assertJson(result).isSimilarTo("{" + | |||
" \"group\": {" + | |||
" \"name\": \"new-name\"," + | |||
" \"description\": \"New Description\"," + | |||
" \"membersCount\": 1" + | |||
" }" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -77,16 +80,18 @@ public class UpdateActionTest { | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
newRequest() | |||
String result = newRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("name", "new-name") | |||
.execute().assertJson("{" + | |||
" \"group\": {" + | |||
" \"name\": \"new-name\"," + | |||
" \"description\": \"" + group.getDescription() + "\"," + | |||
" \"membersCount\": 0" + | |||
" }" + | |||
"}"); | |||
.execute().getInput(); | |||
assertJson(result).isSimilarTo("{" + | |||
" \"group\": {" + | |||
" \"name\": \"new-name\"," + | |||
" \"description\": \"" + group.getDescription() + "\"," + | |||
" \"membersCount\": 0" + | |||
" }" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -94,16 +99,18 @@ public class UpdateActionTest { | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
newRequest() | |||
String result = newRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("description", "New Description") | |||
.execute().assertJson("{" + | |||
" \"group\": {" + | |||
" \"name\": \"" + group.getName() + "\"," + | |||
" \"description\": \"New Description\"," + | |||
" \"membersCount\": 0" + | |||
" }" + | |||
"}"); | |||
.execute().getInput(); | |||
assertJson(result).isSimilarTo("{" + | |||
" \"group\": {" + | |||
" \"name\": \"" + group.getName() + "\"," + | |||
" \"description\": \"New Description\"," + | |||
" \"membersCount\": 0" + | |||
" }" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -233,8 +240,8 @@ public class UpdateActionTest { | |||
.execute(); | |||
} | |||
private WsTester.TestRequest newRequest() { | |||
return ws.newPostRequest("api/user_groups", "update"); | |||
private TestRequest newRequest() { | |||
return ws.newRequest(); | |||
} | |||
private void loginAsAdminOnDefaultOrganization() { |
@@ -19,7 +19,6 @@ | |||
*/ | |||
package org.sonar.server.usergroups.ws; | |||
import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
@@ -34,13 +33,14 @@ import org.sonar.server.exceptions.ForbiddenException; | |||
import org.sonar.server.exceptions.NotFoundException; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.ws.WsTester; | |||
import org.sonar.server.ws.WsTester.TestRequest; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.WsActionTester; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.db.user.UserTesting.newUserDto; | |||
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; | |||
import static org.sonar.db.user.UserTesting.newUserDto; | |||
import static org.sonar.server.usergroups.ws.GroupWsSupport.PARAM_GROUP_ID; | |||
import static org.sonar.test.JsonAssert.assertJson; | |||
public class UsersActionTest { | |||
@@ -51,17 +51,7 @@ public class UsersActionTest { | |||
@Rule | |||
public UserSessionRule userSession = UserSessionRule.standalone(); | |||
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private WsTester wsTester; | |||
@Before | |||
public void setUp() { | |||
GroupWsSupport groupSupport = new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider); | |||
wsTester = new WsTester(new UserGroupsWs( | |||
new UsersAction( | |||
db.getDbClient(), | |||
userSession, | |||
groupSupport))); | |||
} | |||
private WsActionTester ws = new WsActionTester(new UsersAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider))); | |||
@Test | |||
public void fail_if_unknown_group_id() throws Exception { | |||
@@ -106,11 +96,17 @@ public class UsersActionTest { | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
newUsersRequest() | |||
String result = newUsersRequest() | |||
.setParam("login", "john") | |||
.setParam("id", group.getId().toString()) | |||
.execute() | |||
.assertJson(getClass(), "empty.json"); | |||
.getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"p\": 1,\n" + | |||
" \"total\": 0,\n" + | |||
" \"users\": []\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -121,11 +117,18 @@ public class UsersActionTest { | |||
db.users().insertMember(group, lovelace); | |||
loginAsAdminOnDefaultOrganization(); | |||
newUsersRequest() | |||
String result = newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.assertJson(getClass(), "all.json"); | |||
.getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada.login\", \"name\": \"Ada Lovelace\", \"selected\": true},\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
@@ -139,12 +142,19 @@ public class UsersActionTest { | |||
db.organizations().addMember(org, hopper); | |||
loginAsAdmin(org); | |||
newUsersRequest() | |||
String result = newUsersRequest() | |||
.setParam("organization", org.getKey()) | |||
.setParam("name", group.getName()) | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.assertJson(getClass(), "all.json"); | |||
.getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada.login\", \"name\": \"Ada Lovelace\", \"selected\": true},\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
@@ -155,11 +165,18 @@ public class UsersActionTest { | |||
db.users().insertMember(group, lovelace); | |||
loginAsAdminOnDefaultOrganization(); | |||
newUsersRequest() | |||
String result = newUsersRequest() | |||
.setParam("name", group.getName()) | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.assertJson(getClass(), "all.json"); | |||
.getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada.login\", \"name\": \"Ada Lovelace\", \"selected\": true},\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
@@ -171,7 +188,7 @@ public class UsersActionTest { | |||
db.users().insertMember(group, graceHopper); | |||
loginAsAdminOnDefaultOrganization(); | |||
String response = newUsersRequest().setParam(PARAM_GROUP_ID, group.getId().toString()).execute().outputAsString(); | |||
String response = newUsersRequest().setParam(PARAM_GROUP_ID, group.getId().toString()).execute().getInput(); | |||
assertThat(response).contains("Ada Lovelace", "Grace Hopper"); | |||
} | |||
@@ -184,16 +201,24 @@ public class UsersActionTest { | |||
db.users().insertMember(group, lovelace); | |||
loginAsAdminOnDefaultOrganization(); | |||
newUsersRequest() | |||
assertJson(newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.execute() | |||
.assertJson(getClass(), "selected.json"); | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\n" + | |||
"}"); | |||
newUsersRequest() | |||
assertJson(newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam(Param.SELECTED, SelectionMode.SELECTED.value()) | |||
.execute() | |||
.assertJson(getClass(), "selected.json"); | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -204,11 +229,17 @@ public class UsersActionTest { | |||
db.users().insertMember(group, lovelace); | |||
loginAsAdminOnDefaultOrganization(); | |||
newUsersRequest() | |||
String result = newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam(Param.SELECTED, SelectionMode.DESELECTED.value()) | |||
.execute() | |||
.assertJson(getClass(), "deselected.json"); | |||
.getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -219,20 +250,34 @@ public class UsersActionTest { | |||
db.users().insertMember(group, lovelace); | |||
loginAsAdminOnDefaultOrganization(); | |||
newUsersRequest() | |||
assertJson(newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("ps", "1") | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.assertJson(getClass(), "all_page1.json"); | |||
newUsersRequest() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"p\": 1,\n" + | |||
" \"ps\": 1,\n" + | |||
" \"total\": 2,\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\n" + | |||
"}"); | |||
assertJson(newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("ps", "1") | |||
.setParam("p", "2") | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.assertJson(getClass(), "all_page2.json"); | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"p\": 2,\n" + | |||
" \"ps\": 1,\n" + | |||
" \"total\": 2,\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -243,31 +288,60 @@ public class UsersActionTest { | |||
db.users().insertMember(group, lovelace); | |||
loginAsAdminOnDefaultOrganization(); | |||
newUsersRequest() | |||
assertJson(newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam("q", "ace") | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.assertJson(getClass(), "all.json"); | |||
newUsersRequest().setParam("id", group.getId().toString()) | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada.login\", \"name\": \"Ada Lovelace\", \"selected\": true},\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}\n"); | |||
assertJson(newUsersRequest().setParam("id", group.getId().toString()) | |||
.setParam("q", ".logi") | |||
.execute() | |||
.assertJson(getClass(), "all_ada.json"); | |||
newUsersRequest().setParam("id", group.getId().toString()) | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\n" + | |||
" \"login\": \"ada.login\",\n" + | |||
" \"name\": \"Ada Lovelace\",\n" + | |||
" \"selected\": true\n" + | |||
" }\n" + | |||
" ]\n" + | |||
"}\n"); | |||
assertJson(newUsersRequest().setParam("id", group.getId().toString()) | |||
.setParam("q", "OvE") | |||
.execute() | |||
.assertJson(getClass(), "all_ada.json"); | |||
newUsersRequest().setParam("id", group.getId().toString()) | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\n" + | |||
" \"login\": \"ada.login\",\n" + | |||
" \"name\": \"Ada Lovelace\",\n" + | |||
" \"selected\": true\n" + | |||
" }\n" + | |||
" ]\n" + | |||
"}\n"); | |||
assertJson(newUsersRequest().setParam("id", group.getId().toString()) | |||
.setParam("q", "mail") | |||
.execute() | |||
.assertJson(getClass(), "all_ada.json"); | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\n" + | |||
" \"login\": \"ada.login\",\n" + | |||
" \"name\": \"Ada Lovelace\",\n" + | |||
" \"selected\": true\n" + | |||
" }\n" + | |||
" ]\n" + | |||
"}\n"); | |||
} | |||
private TestRequest newUsersRequest() { | |||
return wsTester.newGetRequest("api/user_groups", "users"); | |||
return ws.newRequest(); | |||
} | |||
private void loginAsAdminOnDefaultOrganization() { |
@@ -1,10 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"ps": 100, | |||
"total": 3, | |||
"groups": [ | |||
{"name": "customer%_%/1", "description": "Customer%_%/1", "membersCount": 0}, | |||
{"name": "customer%_%/2", "description": "Customer%_%/2", "membersCount": 0}, | |||
{"name": "customer%_%/3", "description": "Customer%_%/3", "membersCount": 0} | |||
] | |||
} |
@@ -1,6 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"ps": 100, | |||
"total": 0, | |||
"groups": [] | |||
} |
@@ -1,12 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"ps": 100, | |||
"total": 5, | |||
"groups": [ | |||
{"name": "admins", "description": "Admins", "membersCount": 0}, | |||
{"name": "customer1", "description": "Customer1", "membersCount": 0}, | |||
{"name": "customer2", "description": "Customer2", "membersCount": 0}, | |||
{"name": "customer3", "description": "Customer3", "membersCount": 0}, | |||
{"name": "users", "description": "Users", "membersCount": 0} | |||
] | |||
} |
@@ -1,10 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"ps": 3, | |||
"total": 5, | |||
"groups": [ | |||
{"name": "admins", "description": "Admins", "membersCount": 0}, | |||
{"name": "customer1", "description": "Customer1", "membersCount": 0}, | |||
{"name": "customer2", "description": "Customer2", "membersCount": 0} | |||
] | |||
} |
@@ -1,9 +0,0 @@ | |||
{ | |||
"p": 2, | |||
"ps": 3, | |||
"total": 5, | |||
"groups": [ | |||
{"name": "customer3", "description": "Customer3", "membersCount": 0}, | |||
{"name": "users", "description": "Users", "membersCount": 0} | |||
] | |||
} |
@@ -1,6 +0,0 @@ | |||
{ | |||
"p": 3, | |||
"ps": 3, | |||
"total": 5, | |||
"groups": [] | |||
} |
@@ -1,12 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"ps": 100, | |||
"total": 5, | |||
"groups": [ | |||
{"name": "admins", "description": "Admins", "membersCount": 1}, | |||
{"name": "customer1", "description": "Customer1", "membersCount": 0}, | |||
{"name": "customer2", "description": "Customer2", "membersCount": 4}, | |||
{"name": "customer3", "description": "Customer3", "membersCount": 0}, | |||
{"name": "users", "description": "Users", "membersCount": 5} | |||
] | |||
} |
@@ -1,8 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"total": 2, | |||
"users": [ | |||
{"login": "ada.login", "name": "Ada Lovelace", "selected": true}, | |||
{"login": "grace", "name": "Grace Hopper", "selected": false} | |||
] | |||
} |
@@ -1,11 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"total": 1, | |||
"users": [ | |||
{ | |||
"login": "ada.login", | |||
"name": "Ada Lovelace", | |||
"selected": true | |||
} | |||
] | |||
} |
@@ -1,8 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"ps": 1, | |||
"total": 2, | |||
"users": [ | |||
{"login": "ada", "name": "Ada Lovelace", "selected": true} | |||
] | |||
} |
@@ -1,8 +0,0 @@ | |||
{ | |||
"p": 2, | |||
"ps": 1, | |||
"total": 2, | |||
"users": [ | |||
{"login": "grace", "name": "Grace Hopper", "selected": false} | |||
] | |||
} |
@@ -1,7 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"total": 1, | |||
"users": [ | |||
{"login": "ada", "name": "Ada Lovelace", "selected": true} | |||
] | |||
} |
@@ -1,7 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"total": 1, | |||
"users": [ | |||
{"login": "grace", "name": "Grace Hopper", "selected": false} | |||
] | |||
} |
@@ -1,5 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"total": 0, | |||
"users": [] | |||
} |
@@ -1,7 +0,0 @@ | |||
{ | |||
"p": 1, | |||
"total": 1, | |||
"users": [ | |||
{"login": "ada", "name": "Ada Lovelace", "selected": true} | |||
] | |||
} |