private List<CurrentWsResponse.Setting> loadUserSettings(DbSession dbSession, UserDto user) { return dbClient.userPropertiesDao().selectByUser(dbSession, user) .stream() .map(dto -> CurrentWsResponse.Setting.newBuilder() .setKey(dto.getKey()) .setValue(dto.getValue()) .build()) .collect(MoreCollectors.toList()); }
private void setNotificationsReadDate(DbSession dbSession, UserDto user) { dbClient.userPropertiesDao().insertOrUpdate(dbSession, new UserPropertyDto() .setUserUuid(user.getUuid()) .setKey(NOTIFICATIONS_READ_DATE) .setValue(Long.toString(system2.now()))); } }
public void deleteByUser(DbSession session, UserDto user) { mapper(session).deleteByUserUuid(user.getUuid()); }
@Test public void delete_by_user() { UserDto user = db.users().insertUser(); db.users().insertUserSetting(user); db.users().insertUserSetting(user); UserDto anotherUser = db.users().insertUser(); db.users().insertUserSetting(anotherUser); underTest.deleteByUser(db.getSession(), user); assertThat(underTest.selectByUser(db.getSession(), user)).isEmpty(); assertThat(underTest.selectByUser(db.getSession(), anotherUser)).hasSize(1); } }
@Override public void handle(Request request, Response response) throws Exception { userSession.checkLoggedIn().checkIsSystemAdministrator(); String login = request.mandatoryParam(PARAM_LOGIN); checkRequest(!login.equals(userSession.getLogin()), "Self-deactivation is not possible"); try (DbSession dbSession = dbClient.openSession(false)) { UserDto user = dbClient.userDao().selectByLogin(dbSession, login); checkFound(user, "User '%s' doesn't exist", login); ensureNotLastAdministrator(dbSession, user); Integer userId = user.getId(); dbClient.userTokenDao().deleteByUser(dbSession, user); dbClient.propertiesDao().deleteByKeyAndValue(dbSession, DEFAULT_ISSUE_ASSIGNEE, user.getLogin()); dbClient.propertiesDao().deleteByQuery(dbSession, PropertyQuery.builder().setUserId(userId).build()); dbClient.userGroupDao().deleteByUserId(dbSession, userId); dbClient.userPermissionDao().deleteByUserId(dbSession, userId); dbClient.permissionTemplateDao().deleteUserPermissionsByUserId(dbSession, userId); dbClient.qProfileEditUsersDao().deleteByUser(dbSession, user); dbClient.organizationMemberDao().deleteByUserId(dbSession, userId); dbClient.userPropertiesDao().deleteByUser(dbSession, user); dbClient.userDao().deactivateUser(dbSession, user); userIndexer.commitAndIndex(dbSession, user); } writeResponse(response, login); }
@Test public void deactivate_user_deletes_his_user_settings() { logInAsSystemAdministrator(); UserDto user = db.users().insertUser(); db.users().insertUserSetting(user); db.users().insertUserSetting(user); UserDto anotherUser = db.users().insertUser(); db.users().insertUserSetting(anotherUser); deactivate(user.getLogin()); assertThat(db.getDbClient().userPropertiesDao().selectByUser(dbSession, user)).isEmpty(); assertThat(db.getDbClient().userPropertiesDao().selectByUser(dbSession, anotherUser)).hasSize(1); }
@SafeVarargs public final UserPropertyDto insertUserSetting(UserDto user, Consumer<UserPropertyDto>... populators) { UserPropertyDto dto = newUserSettingDto(user); stream(populators).forEach(p -> p.accept(dto)); dbClient.userPropertiesDao().insertOrUpdate(db.getSession(), dto); db.commit(); return dto; }
public List<UserPropertyDto> selectByUser(DbSession session, UserDto user) { return mapper(session).selectByUserUuid(user.getUuid()); }
@Test public void does_not_set_notifications_readDate_setting_when_creating_user_when_not_on_and_organization_disabled() { createDefaultGroup(); UserDto user = underTest.createAndCommit(db.getSession(), NewUser.builder() .setLogin("userLogin") .setName("UserName") .build(), u -> { }); assertThat(dbClient.userPropertiesDao().selectByUser(session, user)).isEmpty(); }
private void setUserSetting(String key, String value) { try (DbSession dbSession = dbClient.openSession(false)) { dbClient.userPropertiesDao().insertOrUpdate(dbSession, new UserPropertyDto() .setUserUuid(requireNonNull(userSession.getUuid(), "Authenticated user uuid cannot be null")) .setKey(key) .setValue(value)); dbSession.commit(); } }
@Test public void set_notifications_readDate_setting_when_creating_user_and_organization_enabled() { long now = system2.now(); organizationFlags.setEnabled(true); createDefaultGroup(); UserDto user = underTest.createAndCommit(db.getSession(), NewUser.builder() .setLogin("userLogin") .setName("UserName") .build(), u -> { }); UserPropertyDto notificationReadDateSetting = dbClient.userPropertiesDao().selectByUser(session, user).get(0); assertThat(notificationReadDateSetting.getKey()).isEqualTo("notifications.readDate"); assertThat(Long.parseLong(notificationReadDateSetting.getValue())).isGreaterThanOrEqualTo(now); }
@Test public void insert() { UserDto user = db.users().insertUser(); UserPropertyDto userSetting = underTest.insertOrUpdate(db.getSession(), new UserPropertyDto() .setUserUuid(user.getUuid()) .setKey("a_key") .setValue("a_value")); Map<String, Object> map = db.selectFirst(db.getSession(), "select uuid as \"uuid\",\n" + " user_uuid as \"userUuid\",\n" + " kee as \"key\",\n" + " text_value as \"value\"," + " created_at as \"createdAt\",\n" + " updated_at as \"updatedAt\"" + " from user_properties"); assertThat(map).contains( entry("uuid", userSetting.getUuid()), entry("userUuid", user.getUuid()), entry("key", "a_key"), entry("value", "a_value"), entry("createdAt", NOW), entry("updatedAt", NOW)); }
@Test public void set_notifications_readDate_setting_when_reactivating_user_on_sonar_cloud() { long now = system2.now(); organizationFlags.setEnabled(true); createDefaultGroup(); UserDto user = db.users().insertDisabledUser(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); UserPropertyDto notificationReadDateSetting = dbClient.userPropertiesDao().selectByUser(session, user).get(0); assertThat(notificationReadDateSetting.getKey()).isEqualTo("notifications.readDate"); assertThat(Long.parseLong(notificationReadDateSetting.getValue())).isGreaterThanOrEqualTo(now); }
@Test public void does_not_set_notifications_readDate_setting_when_reactivating_user_when_not_on_sonar_cloud() { createDefaultGroup(); UserDto user = db.users().insertDisabledUser(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); assertThat(dbClient.userPropertiesDao().selectByUser(session, user)).isEmpty(); }
@Test public void set_new_setting() { UserDto user = db.users().insertUser(); userSession.logIn(user); ws.newRequest() .setParam("key", "notifications.optOut") .setParam("value", "true") .execute(); assertThat(db.getDbClient().userPropertiesDao().selectByUser(db.getSession(), user)) .extracting(UserPropertyDto::getKey, UserPropertyDto::getValue) .containsExactlyInAnyOrder(tuple("notifications.optOut", "true")); }
@Test public void select_by_user() { UserDto user = db.users().insertUser(); UserPropertyDto userSetting1 = db.users().insertUserSetting(user); UserPropertyDto userSetting2 = db.users().insertUserSetting(user); UserDto anotherUser = db.users().insertUser(); UserPropertyDto userSetting3 = db.users().insertUserSetting(anotherUser); List<UserPropertyDto> results = underTest.selectByUser(db.getSession(), user); assertThat(results) .extracting(UserPropertyDto::getUuid) .containsExactlyInAnyOrder(userSetting1.getUuid(), userSetting2.getUuid()) .doesNotContain(userSetting3.getUuid()); }
@Test public void update_existing_setting() { UserDto user = db.users().insertUser(); db.users().insertUserSetting(user, userSetting -> userSetting .setKey("notifications.optOut") .setValue("false")); userSession.logIn(user); ws.newRequest() .setParam("key", "notifications.optOut") .setParam("value", "true") .execute(); assertThat(db.getDbClient().userPropertiesDao().selectByUser(db.getSession(), user)) .extracting(UserPropertyDto::getKey, UserPropertyDto::getValue) .containsExactlyInAnyOrder(tuple("notifications.optOut", "true")); }
@Test public void keep_existing_setting_when_setting_new_one() { UserDto user = db.users().insertUser(); db.users().insertUserSetting(user, userSetting -> userSetting .setKey("notifications.readDate") .setValue("1234")); userSession.logIn(user); ws.newRequest() .setParam("key", "notifications.optOut") .setParam("value", "true") .execute(); assertThat(db.getDbClient().userPropertiesDao().selectByUser(db.getSession(), user)) .extracting(UserPropertyDto::getKey, UserPropertyDto::getValue) .containsExactlyInAnyOrder( tuple("notifications.readDate", "1234"), tuple("notifications.optOut", "true")); }