package org.sonar.server.user.ws;
import com.google.common.base.Function;
+import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.MyBatis;
import org.sonar.server.db.DbClient;
import org.sonar.server.es.SearchOptions;
import org.sonar.server.es.SearchResult;
List<String> fields = request.paramAsStrings(Param.FIELDS);
SearchResult<UserDoc> result = userIndex.search(request.param(Param.TEXT_QUERY), options);
- Multimap<String, String> groupsByLogin = Multimaps.forMap(Maps.<String, String>newHashMap());
- DbSession session = dbClient.openSession(false);
+ Multimap<String, String> groupsByLogin = ArrayListMultimap.create();
+ DbSession dbSession = dbClient.openSession(false);
try {
Collection<String> logins = Collections2.transform(result.getDocs(), new Function<UserDoc, String>() {
@Override
return input.login();
}
});
- groupsByLogin = dbClient.groupMembershipDao().selectGroupsByLogins(session, logins);
+ groupsByLogin = dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, logins);
} finally {
- session.close();
+ MyBatis.closeQuietly(dbSession);
}
JsonWriter json = response.newJsonWriter().beginObject();
writeIfNeeded(json, user.name(), FIELD_NAME, fields);
writeIfNeeded(json, user.email(), FIELD_EMAIL, fields);
writeGroupsIfNeeded(json, groupsByLogin.get(user.login()), fields);
- if (fieldIsWanted(FIELD_SCM_ACCOUNTS, fields)) {
- json.name(FIELD_SCM_ACCOUNTS)
- .beginArray()
- .values(user.scmAccounts())
- .endArray();
- }
+ writeScmAccountsIfNeeded(json, fields, user);
json.endObject();
}
json.endArray();
}
}
+ private void writeScmAccountsIfNeeded(JsonWriter json, List<String> fields, UserDoc user) {
+ if (fieldIsWanted(FIELD_SCM_ACCOUNTS, fields)) {
+ json.name(FIELD_SCM_ACCOUNTS)
+ .beginArray()
+ .values(user.scmAccounts())
+ .endArray();
+ }
+ }
+
private boolean fieldIsWanted(String field, @Nullable List<String> fields) {
return fields == null || fields.isEmpty() || fields.contains(field);
}
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.platform.NewUserHandler;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.data.MapEntry.entry;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@Category(DbTests.class)
-@RunWith(MockitoJUnitRunner.class)
public class UserUpdaterTest {
@ClassRule
@ClassRule
public static EsTester es = new EsTester().addDefinitions(new UserIndexDefinition(new Settings()));
- @Mock
- System2 system2;
+ System2 system2 = mock(System2.class);
- @Mock
- NewUserNotifier newUserNotifier;
+ NewUserNotifier newUserNotifier = mock(NewUserNotifier.class);
- @Mock
- SecurityRealmFactory realmFactory;
+ SecurityRealmFactory realmFactory = mock(SecurityRealmFactory.class);
- @Captor
- ArgumentCaptor<NewUserHandler.Context> newUserHandler;
+ ArgumentCaptor<NewUserHandler.Context> newUserHandler = ArgumentCaptor.forClass(NewUserHandler.Context.class);
Settings settings;
UserDao userDao;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.api.config.Settings;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-@RunWith(MockitoJUnitRunner.class)
public class ChangePasswordActionTest {
static final Settings settings = new Settings().setProperty("sonar.defaultGroup", "sonar-users");
@ClassRule
public static final EsTester esTester = new EsTester().addDefinitions(new UserIndexDefinition(settings));
+
@Rule
public UserSessionRule userSessionRule = UserSessionRule.standalone().login("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
DbSession session;
- @Mock
- SecurityRealmFactory realmFactory;
+ SecurityRealmFactory realmFactory = mock(SecurityRealmFactory.class);
@Before
public void setUp() {
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.junit.experimental.categories.Category;
import org.sonar.api.config.Settings;
import org.sonar.api.i18n.I18n;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.user.index.UserIndexDefinition;
import org.sonar.server.user.index.UserIndexer;
import org.sonar.server.ws.WsTester;
+import org.sonar.test.DbTests;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-@RunWith(MockitoJUnitRunner.class)
+@Category(DbTests.class)
public class CreateActionTest {
static final Settings settings = new Settings().setProperty("sonar.defaultGroup", "sonar-users");
@ClassRule
public static final EsTester esTester = new EsTester().addDefinitions(new UserIndexDefinition(settings));
+
@Rule
public UserSessionRule userSessionRule = UserSessionRule.standalone();
DbSession session;
- @Mock
- I18n i18n;
+ I18n i18n = mock(I18n.class);
@Before
public void setUp() {
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.junit.experimental.categories.Category;
import org.sonar.api.config.Settings;
import org.sonar.api.i18n.I18n;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.user.index.UserIndexDefinition;
import org.sonar.server.user.index.UserIndexer;
import org.sonar.server.ws.WsTester;
+import org.sonar.test.DbTests;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
-@RunWith(MockitoJUnitRunner.class)
+@Category(DbTests.class)
public class DeactivateActionTest {
static final Settings settings = new Settings();
DbSession session;
- @Mock
- I18n i18n;
+ I18n i18n = mock(I18n.class);
@Before
public void setUp() {
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
import org.sonar.api.config.Settings;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.server.user.index.UserIndex;
import org.sonar.server.user.index.UserIndexDefinition;
import org.sonar.server.ws.WsTester;
+import org.sonar.test.DbTests;
import static org.assertj.core.api.Assertions.assertThat;
+@Category(DbTests.class)
public class SearchActionTest {
@ClassRule
import org.sonar.core.persistence.DaoUtils;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
-import org.sonar.core.util.NonNullInputFunction;
public class GroupMembershipDao implements DaoComponent {
public Multimap<String, String> selectGroupsByLogins(final DbSession session, Collection<String> logins) {
final Multimap<String, String> result = ArrayListMultimap.create();
- DaoUtils.executeLargeInputs(logins, new NonNullInputFunction<List<String>, List<LoginGroup>>() {
+ DaoUtils.executeLargeInputs(logins, new Function<List<String>, List<LoginGroup>>() {
@Override
- protected List<LoginGroup> doApply(List<String> input) {
+ public List<LoginGroup> apply(@Nonnull List<String> input) {
List<LoginGroup> groupMemberships = mapper(session).selectGroupsByLogins(input);
for (LoginGroup membership : groupMemberships) {
result.put(membership.login(), membership.groupName());