@SafeVarargs public final UserDto insertUser(Consumer<UserDto>... populators) { UserDto dto = newUserDto().setActive(true); stream(populators).forEach(p -> p.accept(dto)); return insertUser(dto); }
@SafeVarargs public final UserDto insertDisabledUser(Consumer<UserDto>... populators) { UserDto dto = newDisabledUser(); stream(populators).forEach(p -> p.accept(dto)); return insertUser(dto); }
private void createLocalUser() { db.users().insertUser(newLocalUser("john", "John", "john@email.com")); } }
@Test public void update_only_login_of_external_account() { UserDto user = db.users().insertUser(newExternalUser(DEFAULT_LOGIN, "Marius", "marius@lesbronzes.fr")); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser() .setLogin("new_login"), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN)).isNull(); UserDto userReloaded = dbClient.userDao().selectByUuid(session, user.getUuid()); assertThat(userReloaded.getLogin()).isEqualTo("new_login"); // Following fields has not changed assertThat(userReloaded.isLocal()).isFalse(); assertThat(userReloaded.getExternalLogin()).isEqualTo(user.getExternalLogin()); assertThat(userReloaded.getExternalId()).isEqualTo(user.getExternalId()); assertThat(userReloaded.getName()).isEqualTo(user.getName()); assertThat(userReloaded.getEmail()).isEqualTo(user.getEmail()); assertThat(userReloaded.getScmAccountsAsList()).containsAll(user.getScmAccountsAsList()); assertThat(userReloaded.getSalt()).isEqualTo(user.getSalt()); assertThat(userReloaded.getCryptedPassword()).isEqualTo(user.getCryptedPassword()); }
@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; }
@Test public void update_user_external_identity_when_user_was_not_local() { UserDto user = db.users().insertUser(newExternalUser(DEFAULT_LOGIN, "Marius", "marius@email.com")); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser() .setName("Marius2") .setEmail("marius2@email.com") .setExternalIdentity(new ExternalIdentity("github", "john", "ABCD")), u -> { }); UserDto dto = dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN); assertThat(dto.getExternalId()).isEqualTo("ABCD"); assertThat(dto.getExternalLogin()).isEqualTo("john"); assertThat(dto.getExternalIdentityProvider()).isEqualTo("github"); assertThat(dto.getUpdatedAt()).isGreaterThan(user.getCreatedAt()); }
@Test public void create_is_case_insensitive() { assertThat(underTest.create(newUserDto("john", "John", "john@doo.com"))).isEqualTo(underTest.create(newUserDto("john", "John", "John@Doo.com"))); }
@Test public void not_associate_default_group_when_updating_user() { UserDto user = db.users().insertUser(newLocalUser(DEFAULT_LOGIN, "Marius", "marius@email.com")); GroupDto defaultGroup = createDefaultGroup(); // Existing user, he has no group, and should not be associated to the default one underTest.updateAndCommit(session, user, new UpdateUser() .setName("Marius2") .setEmail("marius2@mail.com") .setPassword("password2") .setScmAccounts(asList("ma2")), u -> { }); Multimap<String, String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(session, asList(DEFAULT_LOGIN)); assertThat(groups.get(DEFAULT_LOGIN).stream().anyMatch(g -> g.equals(defaultGroup.getName()))).isFalse(); }
@Test public void does_not_update_user_when_no_change_and_scm_account_reordered() { UserDto user = newExternalUser(DEFAULT_LOGIN, "Marius", "marius@email.com") .setScmAccounts(asList("ma1", "ma2")); db.users().insertUser(user); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser() .setName(user.getName()) .setEmail(user.getEmail()) .setScmAccounts(asList("ma2", "ma1")) .setExternalIdentity(new ExternalIdentity(user.getExternalIdentityProvider(), user.getExternalLogin(), user.getExternalId())), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN).getUpdatedAt()).isEqualTo(user.getUpdatedAt()); }
@Test public void countRootUsersButLogin_returns_count_of_all_active_roots_when_there_specified_login_does_not_exist() { insertRootUser(newUserDto()); insertNonRootUser(newUserDto()); insertRootUser(newUserDto()); insertRootUser(newUserDto()); insertInactiveRootUser(newUserDto()); insertInactiveRootUser(newUserDto()); session.commit(); assertThat(underTest.countRootUsersButLogin(session, "bla")).isEqualTo(3); }
@Test public void not_associate_default_group_when_updating_user_if_already_existing() { UserDto user = db.users().insertUser(newLocalUser(DEFAULT_LOGIN, "Marius", "marius@email.com")); GroupDto defaultGroup = createDefaultGroup(); db.users().insertMember(defaultGroup, user); // User is already associate to the default group Multimap<String, String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(session, asList(DEFAULT_LOGIN)); assertThat(groups.get(DEFAULT_LOGIN).stream().anyMatch(g -> g.equals(defaultGroup.getName()))).as("Current user groups : %s", groups.get(defaultGroup.getName())).isTrue(); underTest.updateAndCommit(session, user, new UpdateUser() .setName("Marius2") .setEmail("marius2@mail.com") .setPassword("password2") .setScmAccounts(asList("ma2")), u -> { }); // Nothing as changed groups = dbClient.groupMembershipDao().selectGroupsByLogins(session, asList(DEFAULT_LOGIN)); assertThat(groups.get(DEFAULT_LOGIN).stream().anyMatch(g -> g.equals(defaultGroup.getName()))).isTrue(); }
@Test public void fail_to_update_password_on_external_auth() { userSessionRule.logIn().setSystemAdministrator(); db.users().insertUser(newExternalUser("john", "John", "john@email.com")); expectedException.expect(BadRequestException.class); tester.newRequest() .setParam("login", "john") .setParam("password", "Valar Morghulis") .execute(); }
@Test public void create() { String avatar = underTest.create(newUserDto("john", "John", "john@doo.com")); assertThat(avatar).isEqualTo("9297bfb538f650da6143b604e82a355d"); }
@Test public void update_only_scm_accounts() { UserDto user = db.users().insertUser(newLocalUser(DEFAULT_LOGIN, "Marius", "marius@lesbronzes.fr") .setScmAccounts(asList("ma", "marius33")) .setSalt("salt") .setCryptedPassword("crypted password")); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser() .setScmAccounts(asList("ma2")), u -> { }); UserDto dto = dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN); assertThat(dto.getScmAccountsAsList()).containsOnly("ma2"); // Following fields has not changed assertThat(dto.getName()).isEqualTo("Marius"); assertThat(dto.getEmail()).isEqualTo("marius@lesbronzes.fr"); assertThat(dto.getSalt()).isEqualTo("salt"); assertThat(dto.getCryptedPassword()).isEqualTo("crypted password"); }
@Test public void does_not_update_user_when_no_change() { UserDto user = newExternalUser(DEFAULT_LOGIN, "Marius", "marius@email.com") .setScmAccounts(asList("ma1", "ma2")); db.users().insertUser(user); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser() .setName(user.getName()) .setEmail(user.getEmail()) .setScmAccounts(user.getScmAccountsAsList()) .setExternalIdentity(new ExternalIdentity(user.getExternalIdentityProvider(), user.getExternalLogin(), user.getExternalId())), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN).getUpdatedAt()).isEqualTo(user.getUpdatedAt()); }
@Test public void countRootUsersButLogin_returns_count_of_all_active_roots_when_specified_login_is_inactive_root() { insertRootUser(newUserDto()); insertNonRootUser(newUserDto()); insertRootUser(newUserDto()); insertRootUser(newUserDto()); String inactiveRootLogin = insertInactiveRootUser(newUserDto()).getLogin(); insertInactiveRootUser(newUserDto()); session.commit(); assertThat(underTest.countRootUsersButLogin(session, inactiveRootLogin)).isEqualTo(3); }
@Test public void update_only_login_of_local_account() { UserDto user = db.users().insertUser(newLocalUser(DEFAULT_LOGIN, "Marius", "marius@lesbronzes.fr")); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser() .setLogin("new_login"), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN)).isNull(); UserDto userReloaded = dbClient.userDao().selectByUuid(session, user.getUuid()); assertThat(userReloaded.getLogin()).isEqualTo("new_login"); assertThat(userReloaded.getExternalIdentityProvider()).isEqualTo("sonarqube"); assertThat(userReloaded.getExternalLogin()).isEqualTo("new_login"); assertThat(userReloaded.getExternalId()).isEqualTo("new_login"); // Following fields has not changed assertThat(userReloaded.isLocal()).isTrue(); assertThat(userReloaded.getName()).isEqualTo(user.getName()); assertThat(userReloaded.getEmail()).isEqualTo(user.getEmail()); assertThat(userReloaded.getScmAccountsAsList()).containsAll(user.getScmAccountsAsList()); assertThat(userReloaded.getSalt()).isEqualTo(user.getSalt()); assertThat(userReloaded.getCryptedPassword()).isEqualTo(user.getCryptedPassword()); }
@Test public void update_only_external_identity_provider() { UserDto user = db.users().insertUser(newExternalUser(DEFAULT_LOGIN, "Marius", "marius@email.com") .setExternalId("ABCD") .setExternalLogin("john") .setExternalIdentityProvider("github")); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser().setExternalIdentity(new ExternalIdentity("bitbucket", "john", "ABCD")), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN)) .extracting(UserDto::getExternalLogin, UserDto::getExternalIdentityProvider) .containsOnly("john", "bitbucket"); }
@Test public void countRootUsersButLogin_returns_count_of_all_active_roots_when_specified_login_is_not_root() { insertRootUser(newUserDto()); String login = insertNonRootUser(newUserDto()).getLogin(); insertRootUser(newUserDto()); insertRootUser(newUserDto()); insertInactiveRootUser(newUserDto()); insertInactiveRootUser(newUserDto()); session.commit(); assertThat(underTest.countRootUsersButLogin(session, login)).isEqualTo(3); }
@Test public void update_only_user_name() { UserDto user = db.users().insertUser(newLocalUser(DEFAULT_LOGIN, "Marius", "marius@lesbronzes.fr") .setScmAccounts(asList("ma", "marius33")) .setSalt("salt") .setCryptedPassword("crypted password")); createDefaultGroup(); underTest.updateAndCommit(session, user, new UpdateUser() .setName("Marius2"), u -> { }); UserDto dto = dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN); assertThat(dto.getName()).isEqualTo("Marius2"); // Following fields has not changed assertThat(dto.getEmail()).isEqualTo("marius@lesbronzes.fr"); assertThat(dto.getScmAccountsAsList()).containsOnly("ma", "marius33"); assertThat(dto.getSalt()).isEqualTo("salt"); assertThat(dto.getCryptedPassword()).isEqualTo("crypted password"); }