From: Aurelien <100427063+aurelien-poscia-sonarsource@users.noreply.github.com> Date: Mon, 6 Mar 2023 13:11:19 +0000 (+0100) Subject: SONAR-18525 delete group, even if some local users are left inside X-Git-Tag: 10.0.0.68432~108 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2d7926d0aa30da8acf6db9e94e584136ab481653;p=sonarqube.git SONAR-18525 delete group, even if some local users are left inside SONAR-18525 delete group, even if some local users are left inside --- diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserGroupDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserGroupDaoIT.java index dcca1343114..79e5f6b45e8 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserGroupDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserGroupDaoIT.java @@ -19,7 +19,6 @@ */ package org.sonar.db.user; -import java.util.List; import java.util.Set; import org.junit.Rule; import org.junit.Test; @@ -119,46 +118,4 @@ public class UserGroupDaoIT { assertThat(dbTester.getDbClient().groupMembershipDao().selectGroupUuidsByUserUuid(dbTester.getSession(), user2.getUuid())).containsOnly(group1.getUuid(), group2.getUuid()); } - @Test - public void deleteFromGroupByUserUuids_shouldOnlyRemoveSpecificUsersFromOneGroup() { - GroupDto group1 = dbTester.users().insertGroup(); - GroupDto group2 = dbTester.users().insertGroup(); - - UserDto user1 = dbTester.users().insertUser(); - UserDto user2 = dbTester.users().insertUser(); - UserDto user3 = dbTester.users().insertUser(); - - dbTester.users().insertMembers(group1, user1, user2, user3); - dbTester.users().insertMembers(group2, user1, user2, user3); - - underTest.deleteFromGroupByUserUuids(dbSession, group1, Set.of(user1, user2)); - - assertThat(dbTester.getDbClient().groupMembershipDao().selectGroupUuidsByUserUuid(dbTester.getSession(), user1.getUuid())).containsOnly(group2.getUuid()); - assertThat(dbTester.getDbClient().groupMembershipDao().selectGroupUuidsByUserUuid(dbTester.getSession(), user2.getUuid())).containsOnly(group2.getUuid()); - assertThat(dbTester.getDbClient().groupMembershipDao().selectGroupUuidsByUserUuid(dbTester.getSession(), user3.getUuid())).containsAll(List.of(group1.getUuid(), group2.getUuid())); - } - - @Test - public void selectAllScimUsersByGroupUuid_shouldOnlySelectScimUsersFromOneSpecificGroup() { - GroupDto scimGroup = dbTester.users().insertGroup(); - dbTester.users().insertScimGroup(scimGroup); - GroupDto nonScimGroup = dbTester.users().insertGroup(); - - UserDto scimUser1 = dbTester.users().insertUser(); - dbTester.users().insertScimUser(scimUser1); - UserDto scimUser2 = dbTester.users().insertUser(); - dbTester.users().insertScimUser(scimUser2); - UserDto scimUser3 = dbTester.users().insertUser(); - dbTester.users().insertScimUser(scimUser3); - UserDto nonScimUser = dbTester.users().insertUser(); - - dbTester.users().insertMembers(scimGroup, scimUser1, scimUser2, nonScimUser); - dbTester.users().insertMembers(nonScimGroup, scimUser3, nonScimUser); - - Set scimUserDtos = underTest.selectScimMembersByGroupUuid(dbSession, scimGroup); - assertThat(scimUserDtos.stream().map(UserDto::getUuid).toList()).containsOnly(scimUser1.getUuid(), scimUser2.getUuid()); - - Set nonScimUserDtos = underTest.selectScimMembersByGroupUuid(dbSession, nonScimGroup); - assertThat(nonScimUserDtos.stream().map(UserDto::getUuid).toList()).containsOnly(scimUser3.getUuid()); - } } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupDao.java index 520a695c310..68ca217b4ea 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupDao.java @@ -66,20 +66,6 @@ public class UserGroupDao implements Dao { } } - public void deleteFromGroupByUserUuids(DbSession dbSession, GroupDto groupDto, Set userDtos) { - int deletedRows = mapper(dbSession).deleteFromGroupByUserUuids(groupDto.getUuid(), userDtos.stream() - .map(UserDto::getUuid) - .toList()); - - if (deletedRows > 0) { - userDtos.forEach(userDto -> auditPersister.deleteUserFromGroup(dbSession, new UserGroupNewValue(userDto))); - } - } - - public Set selectScimMembersByGroupUuid(DbSession dbSession, GroupDto groupDto) { - return mapper(dbSession).selectScimMembersByGroupUuid(groupDto.getUuid()); - } - private static UserGroupMapper mapper(DbSession session) { return session.getMapper(UserGroupMapper.class); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupMapper.java index 190db7fa5cb..ed89e480477 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupMapper.java @@ -19,7 +19,6 @@ */ package org.sonar.db.user; -import java.util.List; import java.util.Set; import org.apache.ibatis.annotations.Param; @@ -35,7 +34,4 @@ public interface UserGroupMapper { int deleteByUserUuid(@Param("userUuid") String userUuid); - int deleteFromGroupByUserUuids(@Param("groupUuid") String groupUuid, @Param("userUuids") List userUuids); - - Set selectScimMembersByGroupUuid(@Param("groupUuid") String groupUuid); } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserGroupMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserGroupMapper.xml index 30a0c99e314..8151f29ea83 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserGroupMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserGroupMapper.xml @@ -3,29 +3,6 @@ - - u.uuid as uuid, - u.login as login, - u.name as name, - u.email as email, - u.active as "active", - u.scm_accounts as "scmAccounts", - u.salt as "salt", - u.crypted_password as "cryptedPassword", - u.hash_method as "hashMethod", - u.external_id as "externalId", - u.external_login as "externalLogin", - u.external_identity_provider as "externalIdentityProvider", - u.user_local as "local", - u.reset_password as "resetPassword", - u.homepage_type as "homepageType", - u.homepage_parameter as "homepageParameter", - u.last_connection_date as "lastConnectionDate", - u.last_sonarlint_connection as "lastSonarlintConnectionDate", - u.created_at as "createdAt", - u.updated_at as "updatedAt" - - insert into groups_users ( user_uuid, @@ -42,15 +19,6 @@ where gu.group_uuid=#{groupUuid,jdbcType=VARCHAR} - - delete from groups_users where user_uuid = #{userUuid,jdbcType=VARCHAR} and @@ -66,15 +34,4 @@ DELETE FROM groups_users WHERE user_uuid=#{userUuid,jdbcType=VARCHAR} - - delete - from - groups_users - where - group_uuid = #{groupUuid, jdbcType=VARCHAR} - and user_uuid in - - #{uuid, 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 d1369a20291..2f726464559 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 @@ -19,7 +19,6 @@ */ package org.sonar.server.usergroups.ws; -import java.util.Set; import javax.annotation.Nullable; import org.sonar.api.security.DefaultGroups; import org.sonar.api.server.ServerSide; @@ -29,7 +28,6 @@ import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.permission.GlobalPermission; import org.sonar.db.user.GroupDto; -import org.sonar.db.user.UserDto; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.NotFoundException; @@ -168,8 +166,4 @@ public class GroupService { dbClient.groupDao().deleteByUuid(dbSession, group.getUuid(), group.getName()); } - public void deleteScimMembersByGroup(DbSession dbSession, GroupDto groupDto) { - Set scimUsers = dbClient.userGroupDao().selectScimMembersByGroupUuid(dbSession, groupDto); - dbClient.userGroupDao().deleteFromGroupByUserUuids(dbSession, groupDto, scimUsers); - } } 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 0efaf7178ad..f35b424a697 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 @@ -23,7 +23,6 @@ import com.tngtech.java.junit.dataprovider.DataProvider; import com.tngtech.java.junit.dataprovider.DataProviderRunner; import com.tngtech.java.junit.dataprovider.UseDataProvider; import java.util.Optional; -import java.util.Set; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -46,7 +45,6 @@ import org.sonar.db.scim.ScimGroupDao; import org.sonar.db.user.GroupDao; import org.sonar.db.user.GroupDto; import org.sonar.db.user.RoleDao; -import org.sonar.db.user.UserDto; import org.sonar.db.user.UserGroupDao; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.NotFoundException; @@ -87,6 +85,17 @@ public class GroupServiceTest { mockNeededDaos(); } + private void mockNeededDaos() { + when(dbClient.authorizationDao()).thenReturn(mock(AuthorizationDao.class)); + when(dbClient.roleDao()).thenReturn(mock(RoleDao.class)); + when(dbClient.permissionTemplateDao()).thenReturn(mock(PermissionTemplateDao.class)); + when(dbClient.userGroupDao()).thenReturn(mock(UserGroupDao.class)); + when(dbClient.qProfileEditGroupsDao()).thenReturn(mock(QProfileEditGroupsDao.class)); + when(dbClient.qualityGateGroupPermissionsDao()).thenReturn(mock(QualityGateGroupPermissionsDao.class)); + when(dbClient.scimGroupDao()).thenReturn(mock(ScimGroupDao.class)); + when(dbClient.groupDao()).thenReturn(mock(GroupDao.class)); + } + @Test public void findGroupDtoOrThrow_whenGroupExists_returnsIt() { GroupDto groupDto = mockGroupDto(); @@ -152,19 +161,6 @@ public class GroupServiceTest { verifyNoGroupDelete(dbSession, groupDto); } - @Test - public void deleteAllScimUsersByGroup_() { - GroupDto groupDto = mockGroupDto(); - Set userDtos = Set.of(new UserDto(), new UserDto()); - - when(dbClient.userGroupDao().selectScimMembersByGroupUuid(dbSession, groupDto)) - .thenReturn(userDtos); - - groupService.deleteScimMembersByGroup(dbSession, groupDto); - - verify(dbClient.userGroupDao()).deleteFromGroupByUserUuids(dbSession, groupDto, userDtos); - } - @Test public void updateGroup_updatesGroupNameAndDescription() { GroupDto group = mockGroupDto(); @@ -303,17 +299,6 @@ public class GroupServiceTest { }; } - private void mockNeededDaos() { - when(dbClient.authorizationDao()).thenReturn(mock(AuthorizationDao.class)); - when(dbClient.roleDao()).thenReturn(mock(RoleDao.class)); - when(dbClient.permissionTemplateDao()).thenReturn(mock(PermissionTemplateDao.class)); - when(dbClient.userGroupDao()).thenReturn(mock(UserGroupDao.class)); - when(dbClient.qProfileEditGroupsDao()).thenReturn(mock(QProfileEditGroupsDao.class)); - when(dbClient.qualityGateGroupPermissionsDao()).thenReturn(mock(QualityGateGroupPermissionsDao.class)); - when(dbClient.scimGroupDao()).thenReturn(mock(ScimGroupDao.class)); - when(dbClient.groupDao()).thenReturn(mock(GroupDao.class)); - } - private static GroupDto mockGroupDto() { GroupDto groupDto = mock(GroupDto.class); when(groupDto.getName()).thenReturn(GROUP_NAME);