From 0649d566b65d2a42f14108edfe73d7473fe5e09c Mon Sep 17 00:00:00 2001 From: Wojtek Wajerowicz <115081248+wojciech-wajerowicz-sonarsource@users.noreply.github.com> Date: Mon, 8 May 2023 09:59:15 +0200 Subject: [PATCH] SONAR-19085 Add step to delete removed groups. --- .../it/java/org/sonar/db/user/ExternalGroupDaoIT.java | 10 ++++++++++ .../main/java/org/sonar/db/user/ExternalGroupDao.java | 4 ++++ .../java/org/sonar/db/user/ExternalGroupMapper.java | 4 ++++ .../org/sonar/db/user/ExternalGroupMapper.xml | 4 ++++ .../org/sonar/server/usergroups/ws/GroupService.java | 5 +++++ .../sonar/server/usergroups/ws/GroupServiceTest.java | 3 +++ 6 files changed, 30 insertions(+) diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/user/ExternalGroupDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/user/ExternalGroupDaoIT.java index 8b790881b36..baa685e0ab9 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/user/ExternalGroupDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/user/ExternalGroupDaoIT.java @@ -59,6 +59,16 @@ public class ExternalGroupDaoIT { assertThat(savedGroup).containsExactlyInAnyOrderElementsOf(expectedGroups); } + @Test + public void deleteByGroupUuid_deletesTheGroup() { + List insertedGroups = createAndInsertExternalGroupDtos("provider1", 3); + + ExternalGroupDto toRemove = insertedGroups.remove(0); + underTest.deleteByGroupUuid(dbSession, toRemove.groupUuid()); + List remainingGroups = underTest.selectByIdentityProvider(dbSession, "provider1"); + assertThat(remainingGroups).containsExactlyInAnyOrderElementsOf(insertedGroups); + } + private List createAndInsertExternalGroupDtos(String provider, int numberOfGroups) { List expectedExternalGroupDtos = new ArrayList<>(); for (int i = 1; i <= numberOfGroups; i++) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDao.java index e208eba651d..c6c95692efa 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDao.java @@ -33,6 +33,10 @@ public class ExternalGroupDao implements Dao { return mapper(dbSession).selectByIdentityProvider(identityProvider); } + public void deleteByGroupUuid(DbSession dbSession, String groupUuid) { + mapper(dbSession).deleteByGroupUuid(groupUuid); + } + private static ExternalGroupMapper mapper(DbSession session) { return session.getMapper(ExternalGroupMapper.class); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupMapper.java index 58f632c0eba..b456be15a66 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupMapper.java @@ -20,6 +20,7 @@ package org.sonar.db.user; import java.util.List; +import org.apache.ibatis.annotations.Param; public interface ExternalGroupMapper { @@ -27,4 +28,7 @@ public interface ExternalGroupMapper { List selectByIdentityProvider(String identityProvider); + void deleteByGroupUuid(@Param("groupUuid") String groupUuid); + + } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/ExternalGroupMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/ExternalGroupMapper.xml index 561a24093a6..be2db7475b4 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/ExternalGroupMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/ExternalGroupMapper.xml @@ -27,4 +27,8 @@ WHERE eg.external_identity_provider=#{identityProvider,jdbcType=VARCHAR} + + delete from external_groups where group_uuid = #{groupUuid, jdbcType=VARCHAR} + + diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/usergroups/ws/GroupService.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/usergroups/ws/GroupService.java index bf57fe9fc07..37fef76d14f 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/usergroups/ws/GroupService.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/usergroups/ws/GroupService.java @@ -59,6 +59,7 @@ public class GroupService { removeGroupFromQualityProfileEdit(dbSession, group); removeGroupFromQualityGateEdit(dbSession, group); removeGroupScimLink(dbSession, group); + removeExternalGroupMapping(dbSession, group); removeGroup(dbSession, group); } @@ -158,6 +159,10 @@ public class GroupService { dbClient.scimGroupDao().deleteByGroupUuid(dbSession, group.getUuid()); } + private void removeExternalGroupMapping(DbSession dbSession, GroupDto group) { + dbClient.externalGroupDao().deleteByGroupUuid(dbSession, group.getUuid()); + } + private void removeGroup(DbSession dbSession, GroupDto group) { dbClient.groupDao().deleteByUuid(dbSession, group.getUuid(), group.getName()); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/GroupServiceTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/GroupServiceTest.java index ce1c489f895..b9513fe3dbf 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/GroupServiceTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/GroupServiceTest.java @@ -42,6 +42,7 @@ import org.sonar.db.permission.template.PermissionTemplateDao; import org.sonar.db.qualitygate.QualityGateGroupPermissionsDao; import org.sonar.db.qualityprofile.QProfileEditGroupsDao; import org.sonar.db.scim.ScimGroupDao; +import org.sonar.db.user.ExternalGroupDao; import org.sonar.db.user.GroupDao; import org.sonar.db.user.GroupDto; import org.sonar.db.user.RoleDao; @@ -92,6 +93,7 @@ public class GroupServiceTest { when(dbClient.qProfileEditGroupsDao()).thenReturn(mock(QProfileEditGroupsDao.class)); when(dbClient.qualityGateGroupPermissionsDao()).thenReturn(mock(QualityGateGroupPermissionsDao.class)); when(dbClient.scimGroupDao()).thenReturn(mock(ScimGroupDao.class)); + when(dbClient.externalGroupDao()).thenReturn(mock(ExternalGroupDao.class)); when(dbClient.groupDao()).thenReturn(mock(GroupDao.class)); } @@ -327,6 +329,7 @@ public class GroupServiceTest { verify(dbClient.qProfileEditGroupsDao()).deleteByGroup(dbSession, groupDto); verify(dbClient.qualityGateGroupPermissionsDao()).deleteByGroup(dbSession, groupDto); verify(dbClient.scimGroupDao()).deleteByGroupUuid(dbSession, groupDto.getUuid()); + verify(dbClient.externalGroupDao()).deleteByGroupUuid(dbSession, groupDto.getUuid()); verify(dbClient.groupDao()).deleteByUuid(dbSession, groupDto.getUuid(), groupDto.getName()); } } -- 2.39.5