From c44b0d4946cc5b09b3e54a8405ae02a7fdb491d7 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Tue, 18 Apr 2017 17:28:46 +0200 Subject: [PATCH] SONAR-8957 Move deletion of group membership from UserDao to DeactivateAction --- .../main/java/org/sonar/db/user/UserDao.java | 1 - .../java/org/sonar/db/user/UserGroupDao.java | 4 ++++ .../org/sonar/db/user/UserGroupMapper.java | 2 ++ .../java/org/sonar/db/user/UserMapper.java | 2 -- .../org/sonar/db/user/UserGroupMapper.xml | 4 ++++ .../org/sonar/db/user/UserMapper.xml | 4 ---- .../org/sonar/db/user/UserGroupDaoTest.java | 19 ++++++++++++++++++- .../server/user/ws/DeactivateAction.java | 1 + .../server/user/ws/DeactivateActionTest.java | 14 ++++++++++++++ 9 files changed, 43 insertions(+), 8 deletions(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java index c0c5ac4ef64..89d66a1b4b1 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java @@ -119,7 +119,6 @@ public class UserDao implements Dao { return false; } - mapper.removeUserFromGroups(dto.getId()); mapper.deleteUserProperties(dto.getId()); mapper.deleteUserRoles(dto.getId()); mapper.deletePropertiesMatchingLogin(singletonList(DEFAULT_ISSUE_ASSIGNEE), dto.getLogin()); 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 a056671b543..0c355253e92 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 @@ -41,6 +41,10 @@ public class UserGroupDao implements Dao { mapper(dbSession).deleteByOrganizationAndUser(organizationUuid, userId); } + public void deleteByUserId(DbSession dbSession, int userId) { + mapper(dbSession).deleteByUserId(userId); + } + 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 df021f0af4d..14e1cfa34bc 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 @@ -30,4 +30,6 @@ public interface UserGroupMapper { void deleteByGroupId(@Param("groupId") int groupId); void deleteByOrganizationAndUser(@Param("organizationUuid") String organizationUuid, @Param("userId") int userId); + + void deleteByUserId(@Param("userId") int userId); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java index ef4766cbc86..e3415282c36 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java @@ -64,8 +64,6 @@ public interface UserMapper { void setRoot(@Param("login") String login, @Param("root") boolean root, @Param("now") long now); - void removeUserFromGroups(int userId); - void deleteUserProperties(int userId); void deleteUserRoles(int userId); 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 5ac413f7351..3e66bc07892 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 @@ -30,4 +30,8 @@ group_id in (select id from groups where organization_uuid=#{organizationUuid,jdbcType=VARCHAR}) + + DELETE FROM groups_users WHERE user_id=#{userId,jdbcType=INTEGER} + + diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml index adc891b90b1..cba738f6218 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml @@ -115,10 +115,6 @@ and u.login <> #{login} - - DELETE FROM groups_users WHERE user_id=#{id} - - DELETE FROM user_roles WHERE user_id=#{id,jdbcType=INTEGER} diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserGroupDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserGroupDaoTest.java index 66ca3ab33b5..cf07cd0ec72 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserGroupDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserGroupDaoTest.java @@ -68,7 +68,6 @@ public class UserGroupDaoTest { assertThat(dbTester.getDbClient().groupMembershipDao().selectGroupIdsByUserId(dbTester.getSession(), user2.getId())).containsOnly(group2.getId()); } - @Test public void delete_organization_member() { OrganizationDto organization = dbTester.organizations().insert(); @@ -87,4 +86,22 @@ public class UserGroupDaoTest { assertThat(dbClient.groupMembershipDao().selectGroupIdsByUserId(dbSession, anotherUser.getId())) .containsOnly(group.getId(), anotherGroup.getId()); } + + @Test + public void delete_by_user() throws Exception { + UserDto user1 = dbTester.users().insertUser(); + UserDto user2 = dbTester.users().insertUser(); + GroupDto group1 = dbTester.users().insertGroup(); + GroupDto group2 = dbTester.users().insertGroup(); + dbTester.users().insertMember(group1, user1); + dbTester.users().insertMember(group1, user2); + dbTester.users().insertMember(group2, user1); + dbTester.users().insertMember(group2, user2); + + underTest.deleteByUserId(dbTester.getSession(), user1.getId()); + dbTester.getSession().commit(); + + assertThat(dbTester.getDbClient().groupMembershipDao().selectGroupIdsByUserId(dbTester.getSession(), user1.getId())).isEmpty(); + assertThat(dbTester.getDbClient().groupMembershipDao().selectGroupIdsByUserId(dbTester.getSession(), user2.getId())).containsOnly(group1.getId(), group2.getId()); + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java index beff5005b2e..dcacce8d1d3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java @@ -92,6 +92,7 @@ public class DeactivateAction implements UsersWsAction { ensureNotLastAdministrator(dbSession, user); dbClient.userTokenDao().deleteByLogin(dbSession, login); + dbClient.userGroupDao().deleteByUserId(dbSession, user.getId()); dbClient.userDao().deactivateUserByLogin(dbSession, login); dbSession.commit(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java index 1e9b845e649..9a76ba78693 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java @@ -32,6 +32,7 @@ import org.sonar.db.DbTester; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.property.PropertyDto; import org.sonar.db.property.PropertyQuery; +import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.BadRequestException; @@ -97,6 +98,19 @@ public class DeactivateActionTest { assertThat(index.getNullableByLogin(user.getLogin()).active()).isFalse(); } + @Test + public void deactivate_user_deletes_his_group_membership() { + logInAsSystemAdministrator(); + UserDto user = insertUser(newUserDto()); + GroupDto group1 = db.users().insertGroup(); + db.users().insertGroup(); + db.users().insertMember(group1, user); + + deactivate(user.getLogin()).getInput(); + + assertThat(db.getDbClient().groupMembershipDao().selectGroupIdsByUserId(dbSession, user.getId())).isEmpty(); + } + @Test public void deactivate_user_deletes_his_tokens() { logInAsSystemAdministrator(); -- 2.39.5