]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8957 Move deletion of group membership from UserDao to DeactivateAction
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 18 Apr 2017 15:28:46 +0000 (17:28 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 20 Apr 2017 09:11:05 +0000 (11:11 +0200)
server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/user/UserGroupMapper.java
server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java
server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserGroupMapper.xml
server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml
server/sonar-db-dao/src/test/java/org/sonar/db/user/UserGroupDaoTest.java
server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java
server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java

index c0c5ac4ef644e42690cc5abbe46e8541e1911f03..89d66a1b4b194639b0f1a08843799f079ccce3c1 100644 (file)
@@ -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());
index a056671b5431c471c2873393d3a5b2d9582e0138..0c355253e9296080e0ff51448646a4a668ab7c6d 100644 (file)
@@ -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);
   }
index df021f0af4dd85d46a5fe3f92058540a7d7e3c45..14e1cfa34bcee422776ef77b48c11bba655772fc 100644 (file)
@@ -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);
 }
index ef4766cbc86903542c049c2bf4df592d35e88c17..e3415282c36fb92da76ceb4eee38a0d40d1323f9 100644 (file)
@@ -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);
index 5ac413f7351ecd7a1c14cb1404617cad3fb38115..3e66bc078928714fb1ef7163d23e0639501a8185 100644 (file)
@@ -30,4 +30,8 @@
     group_id in (select id from groups where organization_uuid=#{organizationUuid,jdbcType=VARCHAR})
   </delete>
 
+  <delete id="deleteByUserId" parameterType="int">
+    DELETE FROM groups_users WHERE user_id=#{userId,jdbcType=INTEGER}
+  </delete>
+
 </mapper>
index adc891b90b17ec1c2ebfe22dc7f5a63fae009499..cba738f6218bb8aa05b3b4de7894e1f4545a0d70 100644 (file)
       and u.login &lt;&gt; #{login}
   </select>
 
-  <delete id="removeUserFromGroups" parameterType="int">
-    DELETE FROM groups_users WHERE user_id=#{id}
-  </delete>
-
   <delete id="deleteUserRoles" parameterType="int">
     DELETE FROM user_roles WHERE user_id=#{id,jdbcType=INTEGER}
   </delete>
index 66ca3ab33b5e79bc463b0d11098380bc1ca93ba0..cf07cd0ec725de35fa227210f67cc58c731d68fa 100644 (file)
@@ -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());
+  }
 }
index beff5005b2ed92ac194121688616eb3d1e3d9071..dcacce8d1d38b0c079740d1c4a2204a18d25d55a 100644 (file)
@@ -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();
     }
index 1e9b845e64913e197032d7c5743f633c6698c0de..9a76ba78693768f6b43632d361e089086f3fa8ad 100644 (file)
@@ -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();