From 4e2c056473e32a273ec9cb6af293cfa1dde8d27c Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 11 Dec 2014 18:02:52 +0100 Subject: [PATCH] SONAR-5924 When deactivating a user, the UPDATED_AT column is not updated --- .../server/user/GroupMembershipServiceTest.java | 7 ++++--- .../main/java/org/sonar/core/user/UserDao.java | 7 +++++-- .../java/org/sonar/core/user/UserMapper.java | 2 +- .../resources/org/sonar/core/user/UserMapper.xml | 2 +- .../core/permission/PermissionFacadeTest.java | 2 +- .../resource/DefaultResourcePermissionsTest.java | 2 +- .../java/org/sonar/core/user/UserDaoTest.java | 16 +++++++++++++++- .../user/UserDaoTest/deactivate_user-result.xml | 2 +- 8 files changed, 29 insertions(+), 11 deletions(-) diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/GroupMembershipServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/GroupMembershipServiceTest.java index a893c258d13..b185ad413ed 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/GroupMembershipServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/GroupMembershipServiceTest.java @@ -23,6 +23,7 @@ package org.sonar.server.user; import com.google.common.collect.ImmutableMap; import org.junit.Before; import org.junit.Test; +import org.sonar.api.utils.System2; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.user.GroupMembership; import org.sonar.core.user.GroupMembershipDao; @@ -44,7 +45,7 @@ public class GroupMembershipServiceTest extends AbstractDaoTestCase { @Before public void before() throws Exception { GroupMembershipDao membershipDao = new GroupMembershipDao(getMyBatis()); - UserDao userDao = new UserDao(getMyBatis()); + UserDao userDao = new UserDao(getMyBatis(), System2.INSTANCE); GroupMembershipFinder finder = new GroupMembershipFinder(userDao, membershipDao); service = new GroupMembershipService(finder); } @@ -110,7 +111,7 @@ public class GroupMembershipServiceTest extends AbstractDaoTestCase { "selected", "all", "page", 1, "pageSize", 2 - )); + )); List result = queryResult.groups(); assertThat(result).hasSize(2); assertThat(queryResult.hasMoreResults()).isTrue(); @@ -125,7 +126,7 @@ public class GroupMembershipServiceTest extends AbstractDaoTestCase { "selected", "all", "page", 3, "pageSize", 1 - )); + )); List result = queryResult.groups(); assertThat(result).hasSize(1); assertThat(queryResult.hasMoreResults()).isFalse(); diff --git a/sonar-core/src/main/java/org/sonar/core/user/UserDao.java b/sonar-core/src/main/java/org/sonar/core/user/UserDao.java index ef50b7cdd0a..0f0ab61adb1 100644 --- a/sonar-core/src/main/java/org/sonar/core/user/UserDao.java +++ b/sonar-core/src/main/java/org/sonar/core/user/UserDao.java @@ -24,6 +24,7 @@ import org.apache.ibatis.session.SqlSession; import org.sonar.api.BatchComponent; import org.sonar.api.ServerComponent; import org.sonar.api.user.UserQuery; +import org.sonar.api.utils.System2; import org.sonar.core.persistence.DaoComponent; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; @@ -38,9 +39,11 @@ import java.util.List; public class UserDao implements BatchComponent, ServerComponent, DaoComponent { private final MyBatis mybatis; + private final System2 system2; - public UserDao(MyBatis mybatis) { + public UserDao(MyBatis mybatis, System2 system2) { this.mybatis = mybatis; + this.system2 = system2; } public UserDto getUser(long userId) { @@ -136,7 +139,7 @@ public class UserDao implements BatchComponent, ServerComponent, DaoComponent { mapper.deleteUserMeasureFilterFavourites(dto.getId()); mapper.deleteUserProperties(dto.getId()); mapper.deleteUserRoles(dto.getId()); - mapper.deactivateUser(dto.getId()); + mapper.deactivateUser(dto.getId(), system2.now()); session.commit(); return true; diff --git a/sonar-core/src/main/java/org/sonar/core/user/UserMapper.java b/sonar-core/src/main/java/org/sonar/core/user/UserMapper.java index 6e49630a361..4e18104c46d 100644 --- a/sonar-core/src/main/java/org/sonar/core/user/UserMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/user/UserMapper.java @@ -64,6 +64,6 @@ public interface UserMapper { void deleteUserRoles(long userId); - void deactivateUser(long userId); + void deactivateUser(@Param("id") long userId, @Param("now") long now); } diff --git a/sonar-core/src/main/resources/org/sonar/core/user/UserMapper.xml b/sonar-core/src/main/resources/org/sonar/core/user/UserMapper.xml index 0a272daa876..69a559d0002 100644 --- a/sonar-core/src/main/resources/org/sonar/core/user/UserMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/user/UserMapper.xml @@ -98,7 +98,7 @@ - UPDATE users SET active=${_false} WHERE id=#{id} + UPDATE users SET active=${_false}, updated_at=#{now} WHERE id=#{id} diff --git a/sonar-core/src/test/java/org/sonar/core/permission/PermissionFacadeTest.java b/sonar-core/src/test/java/org/sonar/core/permission/PermissionFacadeTest.java index 2f6a064e360..1a6472b6017 100644 --- a/sonar-core/src/test/java/org/sonar/core/permission/PermissionFacadeTest.java +++ b/sonar-core/src/test/java/org/sonar/core/permission/PermissionFacadeTest.java @@ -56,7 +56,7 @@ public class PermissionFacadeTest extends AbstractDaoTestCase { session = getMyBatis().openSession(false); RoleDao roleDao = new RoleDao(); - UserDao userDao = new UserDao(getMyBatis()); + UserDao userDao = new UserDao(getMyBatis(), system2); permissionTemplateDao = new PermissionTemplateDao(getMyBatis(), System2.INSTANCE); Settings settings = new Settings(); resourceDao = new ResourceDao(getMyBatis(), system2); diff --git a/sonar-core/src/test/java/org/sonar/core/resource/DefaultResourcePermissionsTest.java b/sonar-core/src/test/java/org/sonar/core/resource/DefaultResourcePermissionsTest.java index 87eb8adff35..a3795070864 100644 --- a/sonar-core/src/test/java/org/sonar/core/resource/DefaultResourcePermissionsTest.java +++ b/sonar-core/src/test/java/org/sonar/core/resource/DefaultResourcePermissionsTest.java @@ -56,7 +56,7 @@ public class DefaultResourcePermissionsTest extends AbstractDaoTestCase { session = getMyBatis().openSession(false); project = new Project("project").setId(PROJECT_ID.intValue()); settings = new Settings(); - permissionFacade = new PermissionFacade(new RoleDao(), new UserDao(getMyBatis()), new ResourceDao(getMyBatis(), System2.INSTANCE), + permissionFacade = new PermissionFacade(new RoleDao(), new UserDao(getMyBatis(), System2.INSTANCE), new ResourceDao(getMyBatis(), System2.INSTANCE), new PermissionTemplateDao(getMyBatis(), System2.INSTANCE), settings); permissions = new DefaultResourcePermissions(getMyBatis(), permissionFacade); } diff --git a/sonar-core/src/test/java/org/sonar/core/user/UserDaoTest.java b/sonar-core/src/test/java/org/sonar/core/user/UserDaoTest.java index 0781d960195..f0def854ee1 100644 --- a/sonar-core/src/test/java/org/sonar/core/user/UserDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/user/UserDaoTest.java @@ -24,6 +24,7 @@ import org.junit.Before; import org.junit.Test; import org.sonar.api.user.UserQuery; import org.sonar.api.utils.DateUtils; +import org.sonar.api.utils.System2; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.DbSession; @@ -33,17 +34,22 @@ import java.util.Collections; import java.util.List; import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class UserDaoTest extends AbstractDaoTestCase { UserDao dao; + System2 system2; + DbSession session; @Before public void setUp() { session = getMyBatis().openSession(false); - dao = new UserDao(getMyBatis()); + system2 = mock(System2.class); + dao = new UserDao(getMyBatis(), system2); } @After @@ -191,10 +197,18 @@ public class UserDaoTest extends AbstractDaoTestCase { public void deactivate_user() { setupData("deactivate_user"); + when(system2.now()).thenReturn(1500000000000L); + String login = "marius"; boolean deactivated = dao.deactivateUserByLogin(login); assertThat(deactivated).isTrue(); + assertThat(dao.selectActiveUserByLogin(login)).isNull(); + + UserDto userDto = dao.getUser(100); + assertThat(userDto.isActive()).isFalse(); + assertThat(userDto.getUpdatedAt()).isEqualTo(1500000000000L); + checkTables("deactivate_user", "dashboards", "active_dashboards", "groups_users", "issue_filters", "issue_filter_favourites", "measure_filters", "measure_filter_favourites", diff --git a/sonar-core/src/test/resources/org/sonar/core/user/UserDaoTest/deactivate_user-result.xml b/sonar-core/src/test/resources/org/sonar/core/user/UserDaoTest/deactivate_user-result.xml index 0de00c6c004..1ae33d01ee8 100644 --- a/sonar-core/src/test/resources/org/sonar/core/user/UserDaoTest/deactivate_user-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/user/UserDaoTest/deactivate_user-result.xml @@ -1,6 +1,6 @@ - +