@@ -24,7 +24,6 @@ import javax.annotation.Nullable; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.permission.template.PermissionTemplateDto; | |||
import org.sonar.db.user.GroupDto; | |||
import org.sonar.db.user.UserDto; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
@@ -88,12 +87,6 @@ public class OrganizationDbTester { | |||
dbSession.commit(); | |||
} | |||
public void setDefaultGroup(OrganizationDto defaultOrganization, GroupDto defaultGroupDto) { | |||
DbSession dbSession = dbTester.getSession(); | |||
dbTester.getDbClient().organizationDao().setDefaultGroupId(dbSession, defaultOrganization.getUuid(), defaultGroupDto); | |||
dbSession.commit(); | |||
} | |||
public void addMember(OrganizationDto organization, UserDto user) { | |||
checkArgument(user.getId() != null, "User must be saved in database"); | |||
dbTester.getDbClient().organizationMemberDao().insert(dbTester.getSession(), new OrganizationMemberDto().setOrganizationUuid(organization.getUuid()).setUserId(user.getId())); |
@@ -139,6 +139,10 @@ public class UserDbTester { | |||
return insertDefaultGroup(newGroupDto().setName(name).setOrganizationUuid(organization.getUuid())); | |||
} | |||
public GroupDto insertDefaultGroup(OrganizationDto organization) { | |||
return insertDefaultGroup(newGroupDto().setOrganizationUuid(organization.getUuid())); | |||
} | |||
@CheckForNull | |||
public GroupDto selectGroupById(int groupId) { | |||
return db.getDbClient().groupDao().selectById(db.getSession(), groupId); |
@@ -72,8 +72,8 @@ public class AddUserAction implements UserGroupsWsAction { | |||
@Override | |||
public void handle(Request request, Response response) throws Exception { | |||
try (DbSession dbSession = dbClient.openSession(false)) { | |||
GroupDto groupId = support.findGroupDto(dbSession, request); | |||
userSession.checkLoggedIn().checkPermission(ADMINISTER, groupId.getOrganizationUuid()); | |||
GroupDto group = support.findGroupDto(dbSession, request); | |||
userSession.checkLoggedIn().checkPermission(ADMINISTER, group.getOrganizationUuid()); | |||
String login = request.mandatoryParam(PARAM_LOGIN); | |||
UserDto user = dbClient.userDao().selectActiveUserByLogin(dbSession, login); | |||
@@ -81,10 +81,10 @@ public class AddUserAction implements UserGroupsWsAction { | |||
OrganizationDto organization = support.findOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION_KEY)); | |||
checkMembership(dbSession, organization, user); | |||
support.checkGroupIsNotDefault(groupId); | |||
support.checkGroupIsNotDefault(dbSession, group); | |||
if (!isMemberOf(dbSession, user, groupId)) { | |||
UserGroupDto membershipDto = new UserGroupDto().setGroupId(groupId.getId()).setUserId(user.getId()); | |||
if (!isMemberOf(dbSession, user, group)) { | |||
UserGroupDto membershipDto = new UserGroupDto().setGroupId(group.getId()).setUserId(user.getId()); | |||
dbClient.userGroupDao().insert(dbSession, membershipDto); | |||
dbSession.commit(); | |||
} |
@@ -31,11 +31,11 @@ import org.sonar.db.organization.OrganizationDto; | |||
import org.sonar.db.user.GroupDto; | |||
import org.sonar.server.exceptions.NotFoundException; | |||
import org.sonar.server.organization.DefaultOrganizationProvider; | |||
import org.sonar.server.usergroups.DefaultGroupFinder; | |||
import org.sonarqube.ws.WsUserGroups; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static org.sonar.core.util.Protobuf.setNullable; | |||
import static org.sonar.server.user.UserUpdater.SONAR_USERS_GROUP_NAME; | |||
import static org.sonar.server.ws.WsUtils.checkFound; | |||
import static org.sonar.server.ws.WsUtils.checkFoundWithOptional; | |||
import static org.sonar.server.ws.WsUtils.checkRequest; | |||
@@ -58,10 +58,12 @@ public class GroupWsSupport { | |||
private final DbClient dbClient; | |||
private final DefaultOrganizationProvider defaultOrganizationProvider; | |||
private final DefaultGroupFinder defaultGroupFinder; | |||
public GroupWsSupport(DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) { | |||
public GroupWsSupport(DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider, DefaultGroupFinder defaultGroupFinder) { | |||
this.dbClient = dbClient; | |||
this.defaultOrganizationProvider = defaultOrganizationProvider; | |||
this.defaultGroupFinder = defaultGroupFinder; | |||
} | |||
/** | |||
@@ -149,8 +151,9 @@ public class GroupWsSupport { | |||
checkRequest(!dbClient.groupDao().selectByName(dbSession, organizationUuid, name).isPresent(), "Group '%s' already exists", name); | |||
} | |||
void checkGroupIsNotDefault(GroupDto groupDto) { | |||
checkArgument(!SONAR_USERS_GROUP_NAME.equals(groupDto.getName()), "Default group '%s' cannot be used to perform this action", SONAR_USERS_GROUP_NAME); | |||
void checkGroupIsNotDefault(DbSession dbSession, GroupDto groupDto) { | |||
GroupDto defaultGroup = defaultGroupFinder.findDefaultGroup(dbSession, groupDto.getOrganizationUuid()); | |||
checkArgument(!defaultGroup.getId().equals(groupDto.getId()), "Default group '%s' cannot be used to perform this action", groupDto.getName()); | |||
} | |||
static WsUserGroups.Group.Builder toProtobuf(OrganizationDto organization, GroupDto group, int membersCount, boolean isDefault) { |
@@ -73,7 +73,7 @@ public class RemoveUserAction implements UserGroupsWsAction { | |||
try (DbSession dbSession = dbClient.openSession(false)) { | |||
GroupDto group = support.findGroupDto(dbSession, request); | |||
userSession.checkPermission(OrganizationPermission.ADMINISTER, group.getOrganizationUuid()); | |||
support.checkGroupIsNotDefault(group); | |||
support.checkGroupIsNotDefault(dbSession, group); | |||
String login = request.mandatoryParam(PARAM_LOGIN); | |||
UserDto user = getUser(dbSession, login); |
@@ -95,7 +95,7 @@ public class UpdateAction implements UserGroupsWsAction { | |||
Optional<OrganizationDto> org = dbClient.organizationDao().selectByUuid(dbSession, group.getOrganizationUuid()); | |||
checkFoundWithOptional(org, "Could not find organization with id '%s'.", group.getOrganizationUuid()); | |||
userSession.checkPermission(ADMINISTER, org.get()); | |||
support.checkGroupIsNotDefault(group); | |||
support.checkGroupIsNotDefault(dbSession, group); | |||
boolean changed = false; | |||
String newName = request.param(PARAM_GROUP_NAME); |
@@ -36,13 +36,14 @@ import org.sonar.server.permission.PermissionUpdater; | |||
import org.sonar.server.permission.UserPermissionChanger; | |||
import org.sonar.server.permission.index.PermissionIndexer; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.usergroups.ws.GroupWsSupport; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.WsActionTester; | |||
import static org.mockito.Mockito.mock; | |||
import static org.sonar.db.permission.template.PermissionTemplateTesting.newPermissionTemplateDto; | |||
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER; | |||
import static org.sonar.db.permission.template.PermissionTemplateTesting.newPermissionTemplateDto; | |||
public abstract class BasePermissionWsTest<A extends PermissionsWsAction> { | |||
@@ -63,7 +64,7 @@ public abstract class BasePermissionWsTest<A extends PermissionsWsAction> { | |||
protected abstract A buildWsAction(); | |||
protected GroupWsSupport newGroupWsSupport() { | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider); | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider, new DefaultGroupFinder(db.getDbClient())); | |||
} | |||
protected PermissionWsSupport newPermissionWsSupport() { |
@@ -46,6 +46,7 @@ import org.sonar.server.exceptions.UnauthorizedException; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.permission.ws.PermissionWsSupport; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.usergroups.ws.GroupWsSupport; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.TestResponse; | |||
@@ -77,7 +78,7 @@ public class DeleteTemplateActionTest { | |||
@Before | |||
public void setUp() throws Exception { | |||
GroupWsSupport groupWsSupport = new GroupWsSupport(dbClient, TestDefaultOrganizationProvider.from(db)); | |||
GroupWsSupport groupWsSupport = new GroupWsSupport(dbClient, TestDefaultOrganizationProvider.from(db), new DefaultGroupFinder(db.getDbClient())); | |||
this.underTestWithoutViews = new WsActionTester(new DeleteTemplateAction(dbClient, userSession, | |||
new PermissionWsSupport(dbClient, new ComponentFinder(dbClient), groupWsSupport, resourceTypes), | |||
defaultTemplatesResolver)); | |||
@@ -132,7 +133,8 @@ public class DeleteTemplateActionTest { | |||
newRequestByName(underTest, null, template); | |||
fail("NotFoundException should have been raised"); | |||
} catch (NotFoundException e) { | |||
assertThat(e).hasMessage("Permission template with name '" + template.getName() + "' is not found (case insensitive) in organization with key '" + db.getDefaultOrganization().getKey() + "'"); | |||
assertThat(e).hasMessage( | |||
"Permission template with name '" + template.getName() + "' is not found (case insensitive) in organization with key '" + db.getDefaultOrganization().getKey() + "'"); | |||
} | |||
}); | |||
} | |||
@@ -152,7 +154,8 @@ public class DeleteTemplateActionTest { | |||
newRequestByName(underTest, otherOrganization, template); | |||
fail("NotFoundException should have been raised"); | |||
} catch (NotFoundException e) { | |||
assertThat(e).hasMessage("Permission template with name '" + template.getName() + "' is not found (case insensitive) in organization with key '" + otherOrganization.getKey() + "'"); | |||
assertThat(e) | |||
.hasMessage("Permission template with name '" + template.getName() + "' is not found (case insensitive) in organization with key '" + otherOrganization.getKey() + "'"); | |||
} | |||
}); | |||
} |
@@ -32,6 +32,7 @@ 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.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.TestResponse; | |||
import org.sonar.server.ws.WsActionTester; | |||
@@ -58,6 +59,7 @@ public class AddUserActionTest { | |||
@Test | |||
public void add_user_to_group_referenced_by_its_id() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
UserDto user = db.users().insertUser(); | |||
db.organizations().addMember(db.getDefaultOrganization(), user); | |||
@@ -73,6 +75,7 @@ public class AddUserActionTest { | |||
@Test | |||
public void add_user_to_group_referenced_by_its_name() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
UserDto user = db.users().insertUser(); | |||
db.organizations().addMember(db.getDefaultOrganization(), user); | |||
@@ -89,6 +92,7 @@ public class AddUserActionTest { | |||
@Test | |||
public void add_user_to_group_referenced_by_its_name_and_organization() throws Exception { | |||
OrganizationDto org = db.organizations().insert(); | |||
db.users().insertDefaultGroup(org); | |||
GroupDto group = db.users().insertGroup(org, "a-group"); | |||
UserDto user = db.users().insertUser("user_login"); | |||
db.organizations().addMember(org, user); | |||
@@ -105,6 +109,7 @@ public class AddUserActionTest { | |||
@Test | |||
public void add_user_to_another_group() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
OrganizationDto defaultOrg = db.getDefaultOrganization(); | |||
GroupDto admins = db.users().insertGroup(defaultOrg, "admins"); | |||
GroupDto users = db.users().insertGroup(defaultOrg, "users"); | |||
@@ -123,6 +128,7 @@ public class AddUserActionTest { | |||
@Test | |||
public void do_not_fail_if_user_is_already_member_of_group() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto users = db.users().insertGroup(); | |||
UserDto user = db.users().insertUser(); | |||
db.organizations().addMember(db.getDefaultOrganization(), user); | |||
@@ -140,6 +146,7 @@ public class AddUserActionTest { | |||
@Test | |||
public void group_has_multiple_members() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto users = db.users().insertGroup(); | |||
UserDto user1 = db.users().insertUser(); | |||
db.organizations().addMember(db.getDefaultOrganization(), user1); | |||
@@ -159,6 +166,7 @@ public class AddUserActionTest { | |||
@Test | |||
public void response_status_is_no_content() throws Exception { | |||
db.users().insertDefaultGroup(db.getDefaultOrganization()); | |||
GroupDto group = db.users().insertGroup(); | |||
UserDto user = db.users().insertUser(); | |||
db.organizations().addMember(db.getDefaultOrganization(), user); | |||
@@ -270,18 +278,36 @@ public class AddUserActionTest { | |||
public void fail_to_add_user_to_default_group() throws Exception { | |||
UserDto user = db.users().insertUser(); | |||
db.organizations().addMember(db.getDefaultOrganization(), user); | |||
GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "sonar-users"); | |||
GroupDto defaultGroup = db.users().insertDefaultGroup(db.getDefaultOrganization(), "default"); | |||
loginAsAdmin(db.getDefaultOrganization()); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Default group 'sonar-users' cannot be used to perform this action"); | |||
expectedException.expectMessage("Default group 'default' cannot be used to perform this action"); | |||
newRequest() | |||
.setParam("id", Integer.toString(group.getId())) | |||
.setParam("id", Integer.toString(defaultGroup.getId())) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.execute(); | |||
} | |||
@Test | |||
public void fail_when_no_default_group() throws Exception { | |||
OrganizationDto organization = db.organizations().insert(); | |||
GroupDto group = db.users().insertGroup(organization); | |||
UserDto user = db.users().insertUser(); | |||
db.organizations().addMember(organization, user); | |||
loginAsAdmin(organization); | |||
expectedException.expect(IllegalStateException.class); | |||
expectedException.expectMessage("Default group cannot be found"); | |||
newRequest() | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.setParam(PARAM_ORGANIZATION_KEY, organization.getKey()) | |||
.setParam(PARAM_GROUP_NAME, group.getName()) | |||
.execute(); | |||
} | |||
private void executeRequest(GroupDto groupDto, UserDto userDto) throws Exception { | |||
newRequest() | |||
.setParam("id", groupDto.getId().toString()) | |||
@@ -301,8 +327,12 @@ public class AddUserActionTest { | |||
userSession.logIn().addPermission(ADMINISTER, org); | |||
} | |||
private void insertDefaultGroupOnDefaultOrganization() { | |||
db.users().insertDefaultGroup(db.getDefaultOrganization()); | |||
} | |||
private GroupWsSupport newGroupWsSupport() { | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider); | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider, new DefaultGroupFinder(db.getDbClient())); | |||
} | |||
} |
@@ -33,6 +33,7 @@ import org.sonar.server.exceptions.ServerException; | |||
import org.sonar.server.organization.DefaultOrganization; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.ws.WsTester; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -229,7 +230,6 @@ public class CreateActionTest { | |||
.execute(); | |||
} | |||
private WsTester.TestRequest newRequest() { | |||
return ws.newPostRequest("api/user_groups", "create"); | |||
} | |||
@@ -243,7 +243,7 @@ public class CreateActionTest { | |||
} | |||
private GroupWsSupport newGroupWsSupport() { | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider); | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider, new DefaultGroupFinder(db.getDbClient())); | |||
} | |||
private DefaultOrganization getDefaultOrganization() { |
@@ -37,6 +37,7 @@ import org.sonar.db.user.UserDto; | |||
import org.sonar.server.exceptions.NotFoundException; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.ws.WsTester; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -288,7 +289,7 @@ public class DeleteActionTest { | |||
} | |||
private GroupWsSupport newGroupWsSupport() { | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider); | |||
return new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider, new DefaultGroupFinder(db.getDbClient())); | |||
} | |||
} |
@@ -33,6 +33,7 @@ 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.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.TestResponse; | |||
import org.sonar.server.ws.WsActionTester; | |||
@@ -54,12 +55,14 @@ public class RemoveUserActionTest { | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private WsActionTester ws = new WsActionTester(new RemoveUserAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider))); | |||
private WsActionTester ws = new WsActionTester( | |||
new RemoveUserAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider, new DefaultGroupFinder(db.getDbClient())))); | |||
@Test | |||
public void does_nothing_if_user_is_not_in_group() throws Exception { | |||
// keep an administrator | |||
insertAnAdministratorInDefaultOrganization(); | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "admins"); | |||
UserDto user = db.users().insertUser("my-admin"); | |||
@@ -77,6 +80,7 @@ public class RemoveUserActionTest { | |||
public void remove_user_by_group_id() throws Exception { | |||
// keep an administrator | |||
insertAnAdministratorInDefaultOrganization(); | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto users = db.users().insertGroup(db.getDefaultOrganization(), "users"); | |||
UserDto user = db.users().insertUser("my-admin"); | |||
db.users().insertMember(users, user); | |||
@@ -93,6 +97,7 @@ public class RemoveUserActionTest { | |||
@Test | |||
public void remove_user_by_group_name_in_default_organization() throws Exception { | |||
insertAnAdministratorInDefaultOrganization(); | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "a_group"); | |||
UserDto user = db.users().insertUser("a_user"); | |||
db.users().insertMember(group, user); | |||
@@ -109,6 +114,7 @@ public class RemoveUserActionTest { | |||
@Test | |||
public void remove_user_by_group_name_in_specific_organization() throws Exception { | |||
OrganizationDto org = db.organizations().insert(); | |||
db.users().insertDefaultGroup(org); | |||
GroupDto group = db.users().insertGroup(org, "a_group"); | |||
UserDto user = db.users().insertUser("a_user"); | |||
db.users().insertMember(group, user); | |||
@@ -130,6 +136,7 @@ public class RemoveUserActionTest { | |||
public void remove_user_only_from_one_group() throws Exception { | |||
// keep an administrator | |||
insertAnAdministratorInDefaultOrganization(); | |||
insertDefaultGroupOnDefaultOrganization(); | |||
OrganizationDto defaultOrg = db.getDefaultOrganization(); | |||
GroupDto users = db.users().insertGroup(defaultOrg, "user"); | |||
@@ -151,6 +158,7 @@ public class RemoveUserActionTest { | |||
public void response_status_is_no_content() throws Exception { | |||
// keep an administrator | |||
insertAnAdministratorInDefaultOrganization(); | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto users = db.users().insertGroup(db.getDefaultOrganization(), "users"); | |||
UserDto user = db.users().insertUser("my-admin"); | |||
db.users().insertMember(users, user); | |||
@@ -179,6 +187,7 @@ public class RemoveUserActionTest { | |||
@Test | |||
public void fail_if_unknown_user() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "admins"); | |||
expectedException.expect(NotFoundException.class); | |||
@@ -210,6 +219,7 @@ public class RemoveUserActionTest { | |||
@Test | |||
public void fail_to_remove_the_last_administrator() throws Exception { | |||
OrganizationDto org = db.organizations().insert(); | |||
db.users().insertDefaultGroup(org); | |||
GroupDto adminGroup = db.users().insertGroup(org, "sonar-admins"); | |||
db.users().insertPermissionOnGroup(adminGroup, GlobalPermissions.SYSTEM_ADMIN); | |||
UserDto adminUser = db.users().insertUser("the-single-admin"); | |||
@@ -229,15 +239,15 @@ public class RemoveUserActionTest { | |||
public void fail_to_remove_user_from_default_group() throws Exception { | |||
OrganizationDto organization = db.organizations().insert(); | |||
UserDto user = db.users().insertUser(); | |||
GroupDto group = db.users().insertGroup(organization, "sonar-users"); | |||
db.users().insertMember(group, user); | |||
GroupDto defaultGroup = db.users().insertDefaultGroup(organization, "default"); | |||
db.users().insertMember(defaultGroup, user); | |||
loginAsAdmin(organization); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Default group 'sonar-users' cannot be used to perform this action"); | |||
expectedException.expectMessage("Default group 'default' cannot be used to perform this action"); | |||
newRequest() | |||
.setParam("id", Integer.toString(group.getId())) | |||
.setParam("id", Integer.toString(defaultGroup.getId())) | |||
.setParam(PARAM_LOGIN, user.getLogin()) | |||
.execute(); | |||
} | |||
@@ -254,7 +264,12 @@ public class RemoveUserActionTest { | |||
userSession.logIn("admin").addPermission(ADMINISTER, org); | |||
} | |||
private UserDto insertAnAdministratorInDefaultOrganization() { | |||
return db.users().insertAdminByUserPermission(db.getDefaultOrganization()); | |||
private void insertAnAdministratorInDefaultOrganization() { | |||
db.users().insertAdminByUserPermission(db.getDefaultOrganization()); | |||
} | |||
private void insertDefaultGroupOnDefaultOrganization() { | |||
db.users().insertDefaultGroup(db.getDefaultOrganization()); | |||
} | |||
} |
@@ -266,7 +266,7 @@ public class SearchActionTest { | |||
} | |||
private GroupWsSupport newGroupWsSupport() { | |||
return new GroupWsSupport(db.getDbClient(), TestDefaultOrganizationProvider.from(db)); | |||
return new GroupWsSupport(db.getDbClient(), TestDefaultOrganizationProvider.from(db), new DefaultGroupFinder(db.getDbClient())); | |||
} | |||
} |
@@ -33,6 +33,7 @@ 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.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.WsActionTester; | |||
@@ -41,8 +42,6 @@ import static org.sonar.test.JsonAssert.assertJson; | |||
public class UpdateActionTest { | |||
private static final String DEFAULT_GROUP_NAME_VALUE = "sonar-users"; | |||
@Rule | |||
public DbTester db = DbTester.create(System2.INSTANCE); | |||
@Rule | |||
@@ -51,10 +50,12 @@ public class UpdateActionTest { | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private WsActionTester ws = new WsActionTester(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, new DefaultGroupFinder(db.getDbClient())))); | |||
@Test | |||
public void update_both_name_and_description() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
UserDto user = db.users().insertUser(); | |||
db.organizations().addMember(db.getDefaultOrganization(), user); | |||
@@ -78,6 +79,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void update_only_name() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
@@ -97,6 +99,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void update_only_description() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
@@ -116,6 +119,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void return_default_field() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
@@ -136,6 +140,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void require_admin_permission_on_organization() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
userSession.logIn("not-admin"); | |||
@@ -153,6 +158,8 @@ public class UpdateActionTest { | |||
OrganizationDto org1 = db.organizations().insert(); | |||
OrganizationDto org2 = db.organizations().insert(); | |||
GroupDto group = db.users().insertGroup(org1, "group1"); | |||
db.users().insertDefaultGroup(org1); | |||
db.users().insertDefaultGroup(org2); | |||
loginAsAdmin(org2); | |||
expectedException.expect(ForbiddenException.class); | |||
@@ -166,6 +173,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void fail_if_name_is_too_short() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
@@ -180,6 +188,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void fail_if_name_is_too_long() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
@@ -194,6 +203,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void fail_if_new_name_is_anyone() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
@@ -208,6 +218,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void fail_to_update_if_name_already_exists() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
OrganizationDto defaultOrg = db.getDefaultOrganization(); | |||
GroupDto groupToBeRenamed = db.users().insertGroup(defaultOrg, "a name"); | |||
String newName = "new-name"; | |||
@@ -225,6 +236,7 @@ public class UpdateActionTest { | |||
@Test | |||
public void fail_if_description_is_too_long() throws Exception { | |||
insertDefaultGroupOnDefaultOrganization(); | |||
GroupDto group = db.users().insertGroup(); | |||
loginAsAdminOnDefaultOrganization(); | |||
@@ -252,11 +264,11 @@ public class UpdateActionTest { | |||
@Test | |||
public void fail_to_update_default_group_name() throws Exception { | |||
GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), DEFAULT_GROUP_NAME_VALUE); | |||
GroupDto group = db.users().insertDefaultGroup(db.getDefaultOrganization(), "default"); | |||
loginAsAdminOnDefaultOrganization(); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Default group 'sonar-users' cannot be used to perform this action"); | |||
expectedException.expectMessage("Default group 'default' cannot be used to perform this action"); | |||
newRequest() | |||
.setParam("id", group.getId().toString()) | |||
@@ -266,11 +278,11 @@ public class UpdateActionTest { | |||
@Test | |||
public void fail_to_update_default_group_description() throws Exception { | |||
GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), DEFAULT_GROUP_NAME_VALUE); | |||
GroupDto group = db.users().insertDefaultGroup(db.getDefaultOrganization(), "default"); | |||
loginAsAdminOnDefaultOrganization(); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Default group 'sonar-users' cannot be used to perform this action"); | |||
expectedException.expectMessage("Default group 'default' cannot be used to perform this action"); | |||
newRequest() | |||
.setParam("id", group.getId().toString()) | |||
@@ -289,4 +301,9 @@ public class UpdateActionTest { | |||
private void loginAsAdmin(OrganizationDto org) { | |||
userSession.logIn().addPermission(ADMINISTER, org); | |||
} | |||
private void insertDefaultGroupOnDefaultOrganization() { | |||
db.users().insertDefaultGroup(db.getDefaultOrganization()); | |||
} | |||
} |
@@ -33,6 +33,7 @@ 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.usergroups.DefaultGroupFinder; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.WsActionTester; | |||
@@ -51,7 +52,8 @@ public class UsersActionTest { | |||
@Rule | |||
public UserSessionRule userSession = UserSessionRule.standalone(); | |||
private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private WsActionTester ws = new WsActionTester(new UsersAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider))); | |||
private WsActionTester ws = new WsActionTester( | |||
new UsersAction(db.getDbClient(), userSession, new GroupWsSupport(db.getDbClient(), defaultOrganizationProvider, new DefaultGroupFinder(db.getDbClient())))); | |||
@Test | |||
public void fail_if_unknown_group_id() throws Exception { | |||
@@ -213,20 +215,20 @@ public class UsersActionTest { | |||
.setParam("id", group.getId().toString()) | |||
.execute() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\n" + | |||
"}"); | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\n" + | |||
"}"); | |||
assertJson(newUsersRequest() | |||
.setParam("id", group.getId().toString()) | |||
.setParam(Param.SELECTED, SelectionMode.SELECTED.value()) | |||
.execute() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\n" + | |||
"}"); | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -268,13 +270,13 @@ public class UsersActionTest { | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"p\": 1,\n" + | |||
" \"ps\": 1,\n" + | |||
" \"total\": 2,\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada\", \"name\": \"Ada Lovelace\", \"selected\": true}\n" + | |||
" ]\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()) | |||
@@ -283,13 +285,13 @@ public class UsersActionTest { | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"p\": 2,\n" + | |||
" \"ps\": 1,\n" + | |||
" \"total\": 2,\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}"); | |||
" \"p\": 2,\n" + | |||
" \"ps\": 1,\n" + | |||
" \"total\": 2,\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}"); | |||
} | |||
@Test | |||
@@ -308,50 +310,50 @@ public class UsersActionTest { | |||
.setParam(Param.SELECTED, SelectionMode.ALL.value()) | |||
.execute() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\"login\": \"ada.login\", \"name\": \"Ada Lovelace\", \"selected\": true},\n" + | |||
" {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + | |||
" ]\n" + | |||
"}\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() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\n" + | |||
" \"login\": \"ada.login\",\n" + | |||
" \"name\": \"Ada Lovelace\",\n" + | |||
" \"selected\": true\n" + | |||
" }\n" + | |||
" ]\n" + | |||
"}\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() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\n" + | |||
" \"login\": \"ada.login\",\n" + | |||
" \"name\": \"Ada Lovelace\",\n" + | |||
" \"selected\": true\n" + | |||
" }\n" + | |||
" ]\n" + | |||
"}\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() | |||
.getInput()).isSimilarTo("{\n" + | |||
" \"users\": [\n" + | |||
" {\n" + | |||
" \"login\": \"ada.login\",\n" + | |||
" \"name\": \"Ada Lovelace\",\n" + | |||
" \"selected\": true\n" + | |||
" }\n" + | |||
" ]\n" + | |||
"}\n"); | |||
" \"users\": [\n" + | |||
" {\n" + | |||
" \"login\": \"ada.login\",\n" + | |||
" \"name\": \"Ada Lovelace\",\n" + | |||
" \"selected\": true\n" + | |||
" }\n" + | |||
" ]\n" + | |||
"}\n"); | |||
} | |||
private TestRequest newUsersRequest() { |