Selaa lähdekoodia

SONAR-9022 Use default group id from DB when checking default group usage in GroupWsSupport

tags/6.4-RC1
Julien Lancelot 7 vuotta sitten
vanhempi
commit
b7b5715807
15 muutettua tiedostoa jossa 166 lisäystä ja 97 poistoa
  1. 0
    7
      server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationDbTester.java
  2. 4
    0
      server/sonar-db-dao/src/test/java/org/sonar/db/user/UserDbTester.java
  3. 5
    5
      server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/AddUserAction.java
  4. 7
    4
      server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/GroupWsSupport.java
  5. 1
    1
      server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/RemoveUserAction.java
  6. 1
    1
      server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UpdateAction.java
  7. 3
    2
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/BasePermissionWsTest.java
  8. 6
    3
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/DeleteTemplateActionTest.java
  9. 34
    4
      server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/AddUserActionTest.java
  10. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/CreateActionTest.java
  11. 2
    1
      server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java
  12. 22
    7
      server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/RemoveUserActionTest.java
  13. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/SearchActionTest.java
  14. 24
    7
      server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UpdateActionTest.java
  15. 54
    52
      server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java

+ 0
- 7
server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationDbTester.java Näytä tiedosto

@@ -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()));

+ 4
- 0
server/sonar-db-dao/src/test/java/org/sonar/db/user/UserDbTester.java Näytä tiedosto

@@ -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);

+ 5
- 5
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/AddUserAction.java Näytä tiedosto

@@ -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();
}

+ 7
- 4
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/GroupWsSupport.java Näytä tiedosto

@@ -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) {

+ 1
- 1
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/RemoveUserAction.java Näytä tiedosto

@@ -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);

+ 1
- 1
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UpdateAction.java Näytä tiedosto

@@ -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);

+ 3
- 2
server/sonar-server/src/test/java/org/sonar/server/permission/ws/BasePermissionWsTest.java Näytä tiedosto

@@ -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() {

+ 6
- 3
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/DeleteTemplateActionTest.java Näytä tiedosto

@@ -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() + "'");
}
});
}

+ 34
- 4
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/AddUserActionTest.java Näytä tiedosto

@@ -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()));
}

}

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/CreateActionTest.java Näytä tiedosto

@@ -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() {

+ 2
- 1
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java Näytä tiedosto

@@ -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()));
}

}

+ 22
- 7
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/RemoveUserActionTest.java Näytä tiedosto

@@ -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());
}

}

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/SearchActionTest.java Näytä tiedosto

@@ -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()));
}

}

+ 24
- 7
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UpdateActionTest.java Näytä tiedosto

@@ -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());
}

}

+ 54
- 52
server/sonar-server/src/test/java/org/sonar/server/usergroups/ws/UsersActionTest.java Näytä tiedosto

@@ -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() {

Loading…
Peruuta
Tallenna