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