Browse Source

SONAR-8957 Move deletion of orgniaztion membership from UserDao to DeactivateAction

tags/6.4-RC1
Julien Lancelot 7 years ago
parent
commit
48d7625b9e

+ 4
- 0
server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java View File

@@ -58,6 +58,10 @@ public class OrganizationMemberDao implements Dao {
mapper(dbSession).deleteByOrganization(organizationMemberUuid);
}

public void deleteByUserId(DbSession dbSession, int userId) {
mapper(dbSession).deleteByUserId(userId);
}

public Set<String> selectOrganizationUuidsByUser(DbSession dbSession, int userId) {
return mapper(dbSession).selectOrganizationUuidsByUser(userId);
}

+ 2
- 0
server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java View File

@@ -43,4 +43,6 @@ public interface OrganizationMemberMapper {
void delete(@Param("organizationUuid") String organizationUuid, @Param("userId") Integer userId);

void deleteByOrganization(@Param("organizationUuid") String organizationUuid);

void deleteByUserId(@Param("userId") int userId);
}

+ 0
- 1
server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java View File

@@ -117,7 +117,6 @@ public class UserDao implements Dao {
return false;
}

mapper.deleteOrganisationMembership(dto.getId());
mapper.deactivateUser(dto.getId(), system2.now());
dbSession.commit();
return true;

+ 5
- 0
server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml View File

@@ -77,4 +77,9 @@
where
organization_uuid = #{organizationUuid, jdbcType=VARCHAR}
</delete>

<delete id="deleteByUserId" parameterType="int">
DELETE FROM organization_members WHERE user_id=#{userId,jdbcType=BIGINT}
</delete>

</mapper>

+ 14
- 0
server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationMemberDaoTest.java View File

@@ -183,6 +183,20 @@ public class OrganizationMemberDaoTest {
assertThat(underTest.select(dbSession, "O2", 512)).isPresent();
}

@Test
public void delete_by_user_id() {
underTest.insert(dbSession, create("O1", 512));
underTest.insert(dbSession, create("O1", 513));
underTest.insert(dbSession, create("O2", 512));

underTest.deleteByUserId(dbSession, 512);
db.commit();

assertThat(db.select("select organization_uuid as \"organizationUuid\", user_id as \"userId\" from organization_members"))
.extracting((row) -> row.get("organizationUuid"), (row) -> row.get("userId"))
.containsOnly(tuple("O1", 513L));
}

private OrganizationMemberDto create(String organizationUuid, Integer userId) {
return new OrganizationMemberDto()
.setOrganizationUuid(organizationUuid)

+ 0
- 15
server/sonar-db-dao/src/test/java/org/sonar/db/user/UserDaoTest.java View File

@@ -33,7 +33,6 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.RowNotFoundException;
import org.sonar.db.organization.OrganizationDto;

import static java.util.Arrays.asList;
import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
@@ -413,20 +412,6 @@ public class UserDaoTest {
assertThat(dbClient.groupMembershipDao().countGroups(session, builder().organizationUuid(db.getDefaultOrganization().getUuid()).membership(IN).build(), user.getId())).isZero();
}

@Test
public void deactivate_user_also_remove_all_his_organization_membership() throws Exception {
OrganizationDto organization1 = db.organizations().insert();
OrganizationDto organization2 = db.organizations().insert();
UserDto user = newActiveUser();
db.organizations().addMember(organization1, user);
db.organizations().addMember(organization2, user);

underTest.deactivateUserByLogin(session, user.getLogin());

assertThat(dbClient.organizationMemberDao().select(db.getSession(), organization1.getUuid(), user.getId())).isNotPresent();
assertThat(dbClient.organizationMemberDao().select(db.getSession(), organization2.getUuid(), user.getId())).isNotPresent();
}

@Test
public void deactivate_missing_user() {
String login = "does_not_exist";

+ 1
- 0
server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java View File

@@ -98,6 +98,7 @@ public class DeactivateAction implements UsersWsAction {
dbClient.propertiesDao().deleteByQuery(dbSession, PropertyQuery.builder().setUserId(user.getId()).build());
dbClient.userPermissionDao().deleteByUserId(dbSession, user.getId());
dbClient.propertiesDao().deleteByKeyAndValue(dbSession, DEFAULT_ISSUE_ASSIGNEE, user.getLogin());
dbClient.organizationMemberDao().deleteByUserId(dbSession, user.getId());
dbClient.userDao().deactivateUserByLogin(dbSession, login);
dbSession.commit();
}

+ 7
- 8
server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java View File

@@ -180,18 +180,17 @@ public class DeactivateActionTest {

@Test
public void deactivate_user_deletes_his_organization_membership() {
UserDto user = insertUser(newUserDto()
.setLogin("ada.lovelace")
.setEmail("ada.lovelace@noteg.com")
.setName("Ada Lovelace")
.setScmAccounts(singletonList("al")));
OrganizationDto organizationDto = db.organizations().insert();
db.organizations().addMember(organizationDto, user);
logInAsSystemAdministrator();
UserDto user = insertUser(newUserDto());
OrganizationDto organization = db.organizations().insert();
db.organizations().addMember(organization, user);
OrganizationDto anotherOrganization = db.organizations().insert();
db.organizations().addMember(anotherOrganization, user);

deactivate(user.getLogin()).getInput();

assertThat(dbClient.organizationMemberDao().select(db.getSession(), organizationDto.getUuid(), user.getId())).isNotPresent();
assertThat(dbClient.organizationMemberDao().select(db.getSession(), organization.getUuid(), user.getId())).isNotPresent();
assertThat(dbClient.organizationMemberDao().select(db.getSession(), anotherOrganization.getUuid(), user.getId())).isNotPresent();
}

@Test

Loading…
Cancel
Save