@@ -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); | |||
} |
@@ -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); | |||
} |
@@ -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; |
@@ -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> |
@@ -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) |
@@ -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"; |
@@ -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(); | |||
} |
@@ -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 |