@Test public void does_not_authenticate_from_user_token_when_token_does_not_match_active_user() { UserDto user = db.users().insertDisabledUser(); when(userTokenAuthentication.authenticate("token")).thenReturn(Optional.of(user.getUuid())); when(request.getHeader("Authorization")).thenReturn("Basic " + toBase64("token:")); expectedException.expect(authenticationException().from(Source.local(Method.BASIC_TOKEN)).withoutLogin().andNoPublicMessage()); try { underTest.authenticate(request); } finally { verifyZeroInteractions(authenticationEvent); } }
@Test public void notification_contains_user_login_when_user_is_removed() { UserDto user = db.users().insertDisabledUser(); Notification notification = new IssueChangeNotification() .setChangeAuthor(user) .setProject("Struts", "org.apache:struts", null, null); EmailMessage message = underTest.format(notification); assertThat(message.getFrom()).isEqualTo(user.getLogin()); }
@Test public void reactivate_user_not_having_password() { UserDto user = db.users().insertDisabledUser(u -> u.setSalt(null).setCryptedPassword(null)); createDefaultGroup(); UserDto dto = underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); assertThat(dto.isActive()).isTrue(); assertThat(dto.getName()).isEqualTo(user.getName()); assertThat(dto.getScmAccounts()).isNull(); assertThat(dto.getSalt()).isNull(); assertThat(dto.getCryptedPassword()).isNull(); assertThat(dto.getCreatedAt()).isEqualTo(user.getCreatedAt()); assertThat(dto.getUpdatedAt()).isGreaterThan(user.getCreatedAt()); }
@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 reactivate_user_with_external_provider() { UserDto user = db.users().insertDisabledUser(u -> u.setLocal(true)); createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .setExternalIdentity(new ExternalIdentity("github", "john", "ABCD")) .build(), u -> { }); session.commit(); UserDto dto = dbClient.userDao().selectByUuid(session, user.getUuid()); assertThat(dto.isLocal()).isFalse(); assertThat(dto.getExternalId()).isEqualTo("ABCD"); assertThat(dto.getExternalLogin()).isEqualTo("john"); assertThat(dto.getExternalIdentityProvider()).isEqualTo("github"); }
@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 reactivate_user_with_local_provider() { UserDto user = db.users().insertDisabledUser(u -> u.setLocal(false) .setExternalId("ABCD") .setExternalLogin("john") .setExternalIdentityProvider("github")); createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); session.commit(); UserDto dto = dbClient.userDao().selectByUuid(session, user.getUuid()); assertThat(dto.isLocal()).isTrue(); assertThat(dto.getExternalId()).isEqualTo(user.getLogin()); assertThat(dto.getExternalLogin()).isEqualTo(user.getLogin()); assertThat(dto.getExternalIdentityProvider()).isEqualTo("sonarqube"); }
@Test public void reactivate_user_using_same_external_info_but_was_local() { UserDto user = db.users().insertDisabledUser(u -> u.setLocal(true) .setExternalId("ABCD") .setExternalLogin("john") .setExternalIdentityProvider("github")); createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .setExternalIdentity(new ExternalIdentity("github", "john", "ABCD")) .build(), u -> { }); session.commit(); UserDto dto = dbClient.userDao().selectByUuid(session, user.getUuid()); assertThat(dto.isLocal()).isFalse(); assertThat(dto.getExternalId()).isEqualTo("ABCD"); assertThat(dto.getExternalLogin()).isEqualTo("john"); assertThat(dto.getExternalIdentityProvider()).isEqualTo("github"); }
@Test public void associate_default_groups_when_reactivating_user_and_organizations_are_disabled() { UserDto userDto = db.users().insertDisabledUser(); db.organizations().insertForUuid("org1"); GroupDto groupDto = db.users().insertGroup(GroupTesting.newGroupDto().setName("sonar-devs").setOrganizationUuid("org1")); db.users().insertMember(groupDto, userDto); GroupDto defaultGroup = createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), userDto, NewUser.builder() .setLogin(userDto.getLogin()) .setName(userDto.getName()) .build(), u -> { }); session.commit(); Multimap<String, String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(session, singletonList(userDto.getLogin())); assertThat(groups.get(userDto.getLogin()).stream().anyMatch(g -> g.equals(defaultGroup.getName()))).isTrue(); }
@Test public void fail_with_NFE_when_login_does_not_match_active_user() { userSession.logIn().setSystemAdministrator(); UserDto user = db.users().insertDisabledUser(); expectedException.expect(NotFoundException.class); expectedException.expectMessage(format("User '%s' doesn't exist", user.getLogin())); ws.newRequest() .setParam("login", user.getLogin()) .setParam("newLogin", "new_login") .execute(); }
@Test public void does_not_associate_default_groups_when_reactivating_user_and_organizations_are_enabled() { organizationFlags.setEnabled(true); UserDto userDto = db.users().insertDisabledUser(); db.organizations().insertForUuid("org1"); GroupDto groupDto = db.users().insertGroup(GroupTesting.newGroupDto().setName("sonar-devs").setOrganizationUuid("org1")); db.users().insertMember(groupDto, userDto); GroupDto defaultGroup = createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), userDto, NewUser.builder() .setLogin(userDto.getLogin()) .setName(userDto.getName()) .build(), u -> { }); session.commit(); Multimap<String, String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(session, singletonList(userDto.getLogin())); assertThat(groups.get(userDto.getLogin()).stream().anyMatch(g -> g.equals(defaultGroup.getName()))).isFalse(); }
@Test public void reactivate_onboarded_user_if_onboarding_setting_is_set_to_true() { settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), true); UserDto user = db.users().insertDisabledUser(u -> u.setOnboarded(true)); createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, user.getLogin()).isOnboarded()).isFalse(); }
@Test public void reactivate_not_onboarded_user_if_onboarding_setting_is_set_to_false() { settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), false); UserDto user = db.users().insertDisabledUser(u -> u.setOnboarded(false)); createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, user.getLogin()).isOnboarded()).isTrue(); }
@Test public void does_not_add_user_as_member_of_default_organization_when_reactivating_user_and_organizations_are_enabled() { organizationFlags.setEnabled(true); UserDto user = db.users().insertDisabledUser(); createDefaultGroup(); UserDto dto = underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder().setLogin(user.getLogin()).setName(user.getName()).build(), u -> { }); assertThat(dbClient.organizationMemberDao().select(db.getSession(), defaultOrganizationProvider.get().getUuid(), dto.getId())).isNotPresent(); }
@Test public void add_user_as_member_of_default_organization_when_reactivating_user_and_organizations_are_disabled() { UserDto user = db.users().insertDisabledUser(); createDefaultGroup(); UserDto dto = underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder().setLogin(user.getLogin()).setName(user.getName()).build(), u -> { }); assertThat(dbClient.organizationMemberDao().select(db.getSession(), defaultOrganizationProvider.get().getUuid(), dto.getId())).isPresent(); }
@Test public void return_note_login() { OrganizationDto organization = db.organizations().insert(); UserDto user1 = db.users().insertUser(); RuleDefinitionDto rule1 = db.rules().insert(); db.rules().insertOrUpdateMetadata(rule1, user1, organization); UserDto disableUser = db.users().insertDisabledUser(); RuleDefinitionDto rule2 = db.rules().insert(); db.rules().insertOrUpdateMetadata(rule2, disableUser, organization); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "noteLogin") .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()) .extracting(Rule::getKey, Rule::getNoteLogin) .containsExactlyInAnyOrder( tuple(rule1.getKey().toString(), user1.getLogin()), tuple(rule2.getKey().toString(), disableUser.getLogin())); }