Browse Source

SONAR-21244 Allow deletion of local groups when instance is managed.

tags/10.4.0.87286
Wojtek Wajerowicz 5 months ago
parent
commit
5efcc863cf

+ 4
- 0
server/sonar-webserver-common/src/main/java/org/sonar/server/common/management/ManagedInstanceChecker.java View File

@@ -49,6 +49,10 @@ public class ManagedInstanceChecker {
BadRequestException.checkRequest(!managedInstanceService.isUserManaged(dbSession, userUuid), INSTANCE_EXCEPTION_MESSAGE);
}

public void throwIfGroupIsManaged(DbSession dbSession, String groupUuid) {
BadRequestException.checkRequest(!managedInstanceService.isGroupManaged(dbSession, groupUuid), INSTANCE_EXCEPTION_MESSAGE);
}

public void throwIfUserAndProjectAreManaged(DbSession dbSession, String userUuid, String projectUuid) {
boolean isUserManaged = managedInstanceService.isUserManaged(dbSession, userUuid);
boolean isProjectManaged = managedProjectService.isProjectManaged(dbSession, projectUuid);

+ 17
- 0
server/sonar-webserver-common/src/test/java/com/sonar/server/common/management/ManagedInstanceCheckerTest.java View File

@@ -103,6 +103,23 @@ public class ManagedInstanceCheckerTest {
assertThatNoException().isThrownBy(() -> managedInstanceChecker.throwIfUserIsManaged(dbSession, userDto.getUuid()));
}

@Test
public void throwIfGroupIsManaged_whenGroupIsManaged_shouldThrow() {
GroupDto groupDto = mockManagedGroup();

String groupUuid = groupDto.getUuid();
assertThatThrownBy(() -> managedInstanceChecker.throwIfGroupIsManaged(dbSession, groupUuid))
.isInstanceOf(BadRequestException.class)
.hasMessage(INSTANCE_EXCEPTION_MESSAGE);
}

@Test
public void throwIfGroupIsManaged_whenGroupIsNotManaged_shouldNotThrow() {
GroupDto groupDto = mockNotManagedGroup();

assertThatNoException().isThrownBy(() -> managedInstanceChecker.throwIfGroupIsManaged(dbSession, groupDto.getUuid()));
}

@Test
public void throwIfUserAndProjectAreManaged_whenUserAndProjectAreManaged_shouldThrow() {
ProjectDto projectDto = mockManagedProject();

+ 6
- 1
server/sonar-webserver-webapi-v2/src/main/java/org/sonar/server/v2/api/group/controller/DefaultGroupController.java View File

@@ -80,8 +80,8 @@ public class DefaultGroupController implements GroupController {

@Override
public void deleteGroup(String id) {
throwIfNotAllowedToModifyGroups();
try (DbSession session = dbClient.openSession(false)) {
throwIfNotAllowedToDeleteGroup(id, session);
GroupInformation group = findGroupInformationOrThrow(id, session);
groupService.delete(session, group.groupDto());
session.commit();
@@ -108,6 +108,11 @@ public class DefaultGroupController implements GroupController {
.orElseThrow(() -> new NotFoundException(String.format(GROUP_NOT_FOUND_MESSAGE, id)));
}

private void throwIfNotAllowedToDeleteGroup(String id, DbSession session) {
userSession.checkIsSystemAdministrator();
managedInstanceChecker.throwIfGroupIsManaged(session, id);
}

@Override
public GroupRestResponse create(GroupCreateRestRequest request) {
throwIfNotAllowedToModifyGroups();

+ 2
- 2
server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/api/group/controller/DefaultGroupControllerTest.java View File

@@ -174,9 +174,9 @@ public class DefaultGroupControllerTest {
}

@Test
public void deleteGroup_whenInstanceIsManaged_shouldReturnException() throws Exception {
public void deleteGroup_whenInstanceAndGroupAreManaged_shouldReturnException() throws Exception {
userSession.logIn().setSystemAdministrator();
doThrow(BadRequestException.create("the instance is managed")).when(managedInstanceChecker).throwIfInstanceIsManaged();
doThrow(BadRequestException.create("the instance is managed")).when(managedInstanceChecker).throwIfGroupIsManaged(any(), eq(GROUP_UUID));
mockMvc.perform(
delete(GROUPS_ENDPOINT + "/" + GROUP_UUID))
.andExpectAll(

Loading…
Cancel
Save