]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6466 Refactor create/update methods out of UserService into UserUpdater
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 28 Apr 2015 14:40:09 +0000 (16:40 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Thu, 30 Apr 2015 10:31:20 +0000 (12:31 +0200)
14 files changed:
server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java
server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java
server/sonar-server/src/main/java/org/sonar/server/user/UserService.java [deleted file]
server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java
server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java
server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java
server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java
server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java
server/sonar-server/src/test/java/org/sonar/server/user/UserServiceMediumTest.java [deleted file]
server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java
server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java
server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java

index 028d5d9316e996b00cc332496e9192b17579c465..6cda0323c7e6b5d1801dcaf833a15cd112d4f5b2 100644 (file)
@@ -19,8 +19,6 @@
  */
 package org.sonar.server.db;
 
-import org.sonar.server.source.db.FileSourceDao;
-
 import org.sonar.api.ServerComponent;
 import org.sonar.core.issue.db.ActionPlanDao;
 import org.sonar.core.issue.db.IssueChangeDao;
@@ -51,8 +49,10 @@ import org.sonar.server.measure.persistence.MeasureDao;
 import org.sonar.server.measure.persistence.MetricDao;
 import org.sonar.server.qualityprofile.db.ActiveRuleDao;
 import org.sonar.server.rule.db.RuleDao;
+import org.sonar.server.source.db.FileSourceDao;
 import org.sonar.server.user.db.GroupDao;
 import org.sonar.server.user.db.UserDao;
+import org.sonar.server.user.db.UserGroupDao;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -83,6 +83,7 @@ public class DbClient implements ServerComponent {
   private final AuthorizationDao authorizationDao;
   private final UserDao userDao;
   private final GroupDao groupDao;
+  private final UserGroupDao userGroupDao;
   private final IssueDao issueDao;
   private final IssueFilterDao issueFilterDao;
   private final IssueChangeDao issueChangeDao;
@@ -120,6 +121,7 @@ public class DbClient implements ServerComponent {
     authorizationDao = getDao(map, AuthorizationDao.class);
     userDao = getDao(map, UserDao.class);
     groupDao = getDao(map, GroupDao.class);
+    userGroupDao = getDao(map, UserGroupDao.class);
     issueDao = getDao(map, IssueDao.class);
     issueFilterDao = getDao(map, IssueFilterDao.class);
     issueChangeDao = getDao(map, IssueChangeDao.class);
@@ -215,6 +217,10 @@ public class DbClient implements ServerComponent {
     return groupDao;
   }
 
+  public UserGroupDao userGroupDao() {
+    return userGroupDao;
+  }
+
   public ActionPlanDao actionPlanDao() {
     return actionPlanDao;
   }
index 60a9cab58aa4eb0ff15763832960803b6425fc40..4f464e21c20cbf992756b53acd80b932f5856019 100644 (file)
@@ -365,7 +365,6 @@ import org.sonar.server.user.GroupMembershipFinder;
 import org.sonar.server.user.GroupMembershipService;
 import org.sonar.server.user.NewUserNotifier;
 import org.sonar.server.user.SecurityRealmFactory;
-import org.sonar.server.user.UserService;
 import org.sonar.server.user.UserUpdater;
 import org.sonar.server.user.db.GroupDao;
 import org.sonar.server.user.db.UserDao;
@@ -724,7 +723,6 @@ class ServerComponents {
     pico.addSingleton(UserIndexDefinition.class);
     pico.addSingleton(UserIndexer.class);
     pico.addSingleton(UserIndex.class);
-    pico.addSingleton(UserService.class);
     pico.addSingleton(UserUpdater.class);
 
     // groups
index 354fbd0dab08175ee84ccf7e9b3f6d2b545907ad..9dfcea527a2a2f88a63c421266380d754095f2cb 100644 (file)
@@ -26,9 +26,9 @@ import org.sonar.api.user.User;
 import org.sonar.api.user.UserFinder;
 import org.sonar.api.user.UserQuery;
 import org.sonar.core.permission.GlobalPermissions;
-import org.sonar.core.user.UserDao;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.user.index.UserDoc;
+import org.sonar.server.user.index.UserIndex;
 import org.sonar.server.util.RubyUtils;
 
 import javax.annotation.CheckForNull;
@@ -38,14 +38,14 @@ import java.util.Map;
 
 public class DefaultUserService implements RubyUserService {
 
-  private final UserService userService;
+  private final UserIndex userIndex;
+  private final UserUpdater userUpdater;
   private final UserFinder finder;
-  private final UserDao dao;
 
-  public DefaultUserService(UserService userService, UserFinder finder, UserDao dao) {
-    this.userService = userService;
+  public DefaultUserService(UserIndex userIndex, UserUpdater userUpdater, UserFinder finder) {
+    this.userIndex = userIndex;
+    this.userUpdater = userUpdater;
     this.finder = finder;
-    this.dao = dao;
   }
 
   @Override
@@ -72,7 +72,7 @@ public class DefaultUserService implements RubyUserService {
 
   @CheckForNull
   public UserDoc getByLogin(String login) {
-    return userService.getNullableByLogin(login);
+    return userIndex.getNullableByLogin(login);
   }
 
   public boolean create(Map<String, Object> params) {
@@ -83,7 +83,7 @@ public class DefaultUserService implements RubyUserService {
       .setScmAccounts(RubyUtils.toStrings(params.get("scm_accounts")))
       .setPassword((String) params.get("password"))
       .setPasswordConfirmation((String) params.get("password_confirmation"));
-    return userService.create(newUser);
+    return userUpdater.create(newUser);
   }
 
   public void update(Map<String, Object> params) {
@@ -101,7 +101,7 @@ public class DefaultUserService implements RubyUserService {
       updateUser.setPassword((String) params.get("password"));
       updateUser.setPasswordConfirmation((String) params.get("password_confirmation"));
     }
-    userService.update(updateUser);
+    userUpdater.update(updateUser);
   }
 
   public void deactivate(String login) {
@@ -113,11 +113,10 @@ public class DefaultUserService implements RubyUserService {
     if (Objects.equal(userSession.login(), login)) {
       throw new BadRequestException("Self-deactivation is not possible");
     }
-    dao.deactivateUserByLogin(login);
-    userService.index();
+    userUpdater.deactivateUserByLogin(login);
   }
 
   public void index() {
-    userService.index();
+    userUpdater.index();
   }
 }
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserService.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserService.java
deleted file mode 100644 (file)
index e69d8c3..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-
-package org.sonar.server.user;
-
-import org.sonar.api.ServerComponent;
-import org.sonar.core.permission.GlobalPermissions;
-import org.sonar.server.user.index.UserDoc;
-import org.sonar.server.user.index.UserIndex;
-import org.sonar.server.user.index.UserIndexer;
-
-import javax.annotation.CheckForNull;
-
-public class UserService implements ServerComponent {
-
-  private final UserIndexer userIndexer;
-  private final UserIndex userIndex;
-  private final UserUpdater userUpdater;
-
-  public UserService(UserIndexer userIndexer, UserIndex userIndex, UserUpdater userUpdater) {
-    this.userIndexer = userIndexer;
-    this.userIndex = userIndex;
-    this.userUpdater = userUpdater;
-  }
-
-  public boolean create(NewUser newUser) {
-    checkPermission();
-    boolean result = userUpdater.create(newUser);
-    userIndexer.index();
-    return result;
-  }
-
-  public void update(UpdateUser updateUser) {
-    checkPermission();
-    userUpdater.update(updateUser);
-    userIndexer.index();
-  }
-
-  public UserDoc getByLogin(String login) {
-    return userIndex.getByLogin(login);
-  }
-
-  @CheckForNull
-  public UserDoc getNullableByLogin(String login) {
-    return userIndex.getNullableByLogin(login);
-  }
-
-  public void index() {
-    userIndexer.index();
-  }
-
-  private void checkPermission() {
-    UserSession userSession = UserSession.get();
-    userSession.checkLoggedIn();
-    userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN);
-  }
-}
index e90ec514fa3e33eaacc39c1b07107ff81040f3e8..5c5ebddfece34b83b317989ab05747804bb5c10b 100644 (file)
@@ -38,7 +38,7 @@ import org.sonar.core.user.UserGroupDto;
 import org.sonar.server.db.DbClient;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.Message;
-import org.sonar.server.user.db.UserGroupDao;
+import org.sonar.server.user.index.UserIndexer;
 import org.sonar.server.util.Validation;
 
 import javax.annotation.CheckForNull;
@@ -61,15 +61,15 @@ public class UserUpdater implements ServerComponent {
 
   private final NewUserNotifier newUserNotifier;
   private final Settings settings;
-  private final UserGroupDao userGroupDao;
   private final DbClient dbClient;
+  private final UserIndexer userIndexer;
   private final System2 system2;
 
-  public UserUpdater(NewUserNotifier newUserNotifier, Settings settings, UserGroupDao userGroupDao, DbClient dbClient, System2 system2) {
+  public UserUpdater(NewUserNotifier newUserNotifier, Settings settings, DbClient dbClient, UserIndexer userIndexer, System2 system2) {
     this.newUserNotifier = newUserNotifier;
     this.settings = settings;
-    this.userGroupDao = userGroupDao;
     this.dbClient = dbClient;
+    this.userIndexer = userIndexer;
     this.system2 = system2;
   }
 
@@ -102,6 +102,7 @@ public class UserUpdater implements ServerComponent {
       }
       dbSession.commit();
       notifyNewUser(userDto.getLogin(), userDto.getName(), newUser.email());
+      userIndexer.index();
     } finally {
       dbSession.close();
     }
@@ -116,11 +117,17 @@ public class UserUpdater implements ServerComponent {
       updateUser(dbSession, user);
       dbSession.commit();
       notifyNewUser(user.getLogin(), user.getName(), user.getEmail());
+      userIndexer.index();
     } finally {
       dbSession.close();
     }
   }
 
+  public void deactivateUserByLogin(String login) {
+    dbClient.userDao().deactivateUserByLogin(login);
+    userIndexer.index();
+  }
+
   private UserDto createNewUserDto(DbSession dbSession, NewUser newUser) {
     UserDto userDto = new UserDto();
     List<Message> messages = newArrayList();
@@ -305,7 +312,11 @@ public class UserUpdater implements ServerComponent {
       }
     })) {
       GroupDto groupDto = dbClient.groupDao().getByKey(dbSession, defaultGroup);
-      userGroupDao.insert(dbSession, new UserGroupDto().setUserId(userDto.getId()).setGroupId(groupDto.getId()));
+      dbClient.userGroupDao().insert(dbSession, new UserGroupDto().setUserId(userDto.getId()).setGroupId(groupDto.getId()));
     }
   }
+
+  public void index() {
+    userIndexer.index();
+  }
 }
index ff26328774d8abc7c07861e8f3e1330fbdec0046..f98d0f2018704e4027c9c5c5055c733985b5e172 100644 (file)
@@ -25,10 +25,12 @@ import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.api.utils.text.JsonWriter;
+import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.server.user.NewUser;
-import org.sonar.server.user.UserService;
 import org.sonar.server.user.UserSession;
+import org.sonar.server.user.UserUpdater;
 import org.sonar.server.user.index.UserDoc;
+import org.sonar.server.user.index.UserIndex;
 
 public class CreateAction implements BaseUsersWsAction {
 
@@ -39,11 +41,13 @@ public class CreateAction implements BaseUsersWsAction {
   private static final String PARAM_EMAIL = "email";
   private static final String PARAM_SCM_ACCOUNTS = "scm_accounts";
 
-  private final UserService service;
+  private final UserIndex index;
+  private final UserUpdater userUpdater;
   private final I18n i18n;
 
-  public CreateAction(UserService service, I18n i18n) {
-    this.service = service;
+  public CreateAction(UserIndex index, UserUpdater userUpdater, I18n i18n) {
+    this.index = index;
+    this.userUpdater = userUpdater;
     this.i18n = i18n;
   }
 
@@ -86,6 +90,8 @@ public class CreateAction implements BaseUsersWsAction {
 
   @Override
   public void handle(Request request, Response response) throws Exception {
+    UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN);
+
     String login = request.mandatoryParam(PARAM_LOGIN);
     NewUser newUser = NewUser.create()
       .setLogin(login)
@@ -95,12 +101,12 @@ public class CreateAction implements BaseUsersWsAction {
       .setPassword(request.mandatoryParam(PARAM_PASSWORD))
       .setPasswordConfirmation(request.mandatoryParam(PARAM_PASSWORD_CONFIRMATION));
 
-    boolean isUserReactivated = service.create(newUser);
+    boolean isUserReactivated = userUpdater.create(newUser);
     writeResponse(response, login, isUserReactivated);
   }
 
   private void writeResponse(Response response, String login, boolean isUserReactivated) {
-    UserDoc user = service.getByLogin(login);
+    UserDoc user = index.getByLogin(login);
     JsonWriter json = response.newJsonWriter().beginObject();
     writeUser(json, user);
     if (isUserReactivated) {
index 8a80686673406d1d4082d18c3cd4d34460f1191f..565781e35d01577581499a453101bd09516272b3 100644 (file)
@@ -24,9 +24,12 @@ import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.api.utils.text.JsonWriter;
+import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.server.user.UpdateUser;
-import org.sonar.server.user.UserService;
+import org.sonar.server.user.UserSession;
+import org.sonar.server.user.UserUpdater;
 import org.sonar.server.user.index.UserDoc;
+import org.sonar.server.user.index.UserIndex;
 
 public class UpdateAction implements BaseUsersWsAction {
 
@@ -37,10 +40,12 @@ public class UpdateAction implements BaseUsersWsAction {
   private static final String PARAM_EMAIL = "email";
   private static final String PARAM_SCM_ACCOUNTS = "scm_accounts";
 
-  private final UserService service;
+  private final UserIndex index;
+  private final UserUpdater userUpdater;
 
-  public UpdateAction(UserService service) {
-    this.service = service;
+  public UpdateAction(UserIndex index, UserUpdater userUpdater) {
+    this.index = index;
+    this.userUpdater = userUpdater;
   }
 
   @Override
@@ -82,6 +87,8 @@ public class UpdateAction implements BaseUsersWsAction {
 
   @Override
   public void handle(Request request, Response response) throws Exception {
+    UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN);
+
     String login = request.mandatoryParam(PARAM_LOGIN);
     UpdateUser updateUser = UpdateUser.create(login);
     if (request.hasParam(PARAM_NAME)) {
@@ -100,12 +107,12 @@ public class UpdateAction implements BaseUsersWsAction {
       updateUser.setPasswordConfirmation(request.mandatoryParam(PARAM_PASSWORD_CONFIRMATION));
     }
 
-    service.update(updateUser);
+    userUpdater.update(updateUser);
     writeResponse(response, login);
   }
 
   private void writeResponse(Response response, String login) {
-    UserDoc user = service.getByLogin(login);
+    UserDoc user = index.getByLogin(login);
     JsonWriter json = response.newJsonWriter().beginObject();
     writeUser(json, user);
     json.endObject().close();
index 911581eec0510954e1c4ce88dce5ffe3efb2f330..9bf9a4af5529fb3ccf57284081a05c17b1db58fd 100644 (file)
@@ -64,7 +64,7 @@ import org.sonar.server.source.index.SourceLineIndexer;
 import org.sonar.server.tester.ServerTester;
 import org.sonar.server.user.MockUserSession;
 import org.sonar.server.user.NewUser;
-import org.sonar.server.user.UserService;
+import org.sonar.server.user.UserUpdater;
 import org.sonar.server.user.db.GroupDao;
 
 import java.util.Arrays;
@@ -602,9 +602,7 @@ public class IssueServiceMediumTest {
   }
 
   private void newUser(String login) {
-    MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
-    tester.get(UserService.class).create(NewUser.create().setLogin(login).setName(login).setPassword("test").setPasswordConfirmation("test"));
-    MockUserSession.set();
+    tester.get(UserUpdater.class).create(NewUser.create().setLogin(login).setName(login).setPassword("test").setPasswordConfirmation("test"));
   }
 
   private void createDefaultGroup() {
index 94af4444276ff4e7757c9075c91adc47da37a52a..142362e3dfde12585a85126b487eb040faed71ee 100644 (file)
@@ -31,9 +31,9 @@ import org.mockito.runners.MockitoJUnitRunner;
 import org.sonar.api.user.UserFinder;
 import org.sonar.api.user.UserQuery;
 import org.sonar.core.permission.GlobalPermissions;
-import org.sonar.core.user.UserDao;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.ForbiddenException;
+import org.sonar.server.user.index.UserIndex;
 
 import java.util.Map;
 
@@ -42,15 +42,18 @@ import static com.google.common.collect.Maps.newHashMap;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.argThat;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 @RunWith(MockitoJUnitRunner.class)
 public class DefaultUserServiceTest {
 
-  UserService userService = mock(UserService.class);
+  UserIndex userIndex = mock(UserIndex.class);
   UserFinder finder = mock(UserFinder.class);
-  UserDao dao = mock(UserDao.class);
-  DefaultUserService service = new DefaultUserService(userService, finder, dao);
+  UserUpdater userUpdater = mock(UserUpdater.class);
+  DefaultUserService service = new DefaultUserService(userIndex, userUpdater, finder);
 
   @Rule
   public ExpectedException thrown = ExpectedException.none();
@@ -95,7 +98,7 @@ public class DefaultUserServiceTest {
       fail();
     } catch (BadRequestException e) {
       assertThat(e).hasMessage("Self-deactivation is not possible");
-      verify(dao, never()).deactivateUserByLogin("simon");
+      verify(userUpdater, never()).deactivateUserByLogin("simon");
     }
   }
 
@@ -106,7 +109,7 @@ public class DefaultUserServiceTest {
       service.deactivate("julien");
       fail();
     } catch (ForbiddenException e) {
-      verify(dao, never()).deactivateUserByLogin("simon");
+      verify(userUpdater, never()).deactivateUserByLogin("simon");
     }
   }
 
@@ -114,8 +117,7 @@ public class DefaultUserServiceTest {
   public void deactivate_user() throws Exception {
     MockUserSession.set().setLogin("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
     service.deactivate("julien");
-    verify(dao).deactivateUserByLogin("julien");
-    verify(userService).index();
+    verify(userUpdater).deactivateUserByLogin("julien");
   }
 
   @Test
@@ -126,7 +128,6 @@ public class DefaultUserServiceTest {
       fail();
     } catch (BadRequestException e) {
       assertThat(e).hasMessage("Login is missing");
-      verifyZeroInteractions(dao);
     }
   }
 
@@ -140,7 +141,7 @@ public class DefaultUserServiceTest {
     service.create(params);
 
     ArgumentCaptor<NewUser> newUserCaptor = ArgumentCaptor.forClass(NewUser.class);
-    verify(userService).create(newUserCaptor.capture());
+    verify(userUpdater).create(newUserCaptor.capture());
     assertThat(newUserCaptor.getValue().login()).isEqualTo("john");
     assertThat(newUserCaptor.getValue().name()).isEqualTo("John");
     assertThat(newUserCaptor.getValue().email()).isEqualTo("john@email.com");
@@ -160,7 +161,7 @@ public class DefaultUserServiceTest {
     service.update(params);
 
     ArgumentCaptor<UpdateUser> userCaptor = ArgumentCaptor.forClass(UpdateUser.class);
-    verify(userService).update(userCaptor.capture());
+    verify(userUpdater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().login()).isEqualTo("john");
     assertThat(userCaptor.getValue().name()).isEqualTo("John");
     assertThat(userCaptor.getValue().email()).isEqualTo("john@email.com");
@@ -177,7 +178,7 @@ public class DefaultUserServiceTest {
     service.update(params);
 
     ArgumentCaptor<UpdateUser> userCaptor = ArgumentCaptor.forClass(UpdateUser.class);
-    verify(userService).update(userCaptor.capture());
+    verify(userUpdater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isTrue();
     assertThat(userCaptor.getValue().isEmailChanged()).isFalse();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isFalse();
@@ -192,7 +193,7 @@ public class DefaultUserServiceTest {
     service.update(params);
 
     ArgumentCaptor<UpdateUser> userCaptor = ArgumentCaptor.forClass(UpdateUser.class);
-    verify(userService).update(userCaptor.capture());
+    verify(userUpdater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isFalse();
     assertThat(userCaptor.getValue().isEmailChanged()).isTrue();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isFalse();
@@ -207,7 +208,7 @@ public class DefaultUserServiceTest {
     service.update(params);
 
     ArgumentCaptor<UpdateUser> userCaptor = ArgumentCaptor.forClass(UpdateUser.class);
-    verify(userService).update(userCaptor.capture());
+    verify(userUpdater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isFalse();
     assertThat(userCaptor.getValue().isEmailChanged()).isFalse();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isTrue();
@@ -223,7 +224,7 @@ public class DefaultUserServiceTest {
     service.update(params);
 
     ArgumentCaptor<UpdateUser> userCaptor = ArgumentCaptor.forClass(UpdateUser.class);
-    verify(userService).update(userCaptor.capture());
+    verify(userUpdater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isFalse();
     assertThat(userCaptor.getValue().isEmailChanged()).isFalse();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isFalse();
@@ -233,12 +234,12 @@ public class DefaultUserServiceTest {
   @Test
   public void get_by_login() throws Exception {
     service.getByLogin("john");
-    verify(userService).getNullableByLogin("john");
+    verify(userIndex).getNullableByLogin("john");
   }
 
   @Test
   public void index() throws Exception {
     service.index();
-    verify(userService).index();
+    verify(userUpdater).index();
   }
 }
diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/UserServiceMediumTest.java
deleted file mode 100644 (file)
index 22f9e98..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-
-package org.sonar.server.user;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.sonar.api.CoreProperties;
-import org.sonar.core.permission.GlobalPermissions;
-import org.sonar.core.persistence.DbSession;
-import org.sonar.core.user.GroupDto;
-import org.sonar.core.user.UserDto;
-import org.sonar.server.db.DbClient;
-import org.sonar.server.es.EsClient;
-import org.sonar.server.exceptions.ForbiddenException;
-import org.sonar.server.tester.ServerTester;
-import org.sonar.server.user.index.UserDoc;
-import org.sonar.server.user.index.UserIndexDefinition;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class UserServiceMediumTest {
-
-  @ClassRule
-  public static ServerTester tester = new ServerTester();
-
-  EsClient esClient;
-  DbClient dbClient;
-  DbSession session;
-
-  UserService service;
-
-  @Before
-  public void setUp() throws Exception {
-    tester.clearDbAndIndexes();
-    dbClient = tester.get(DbClient.class);
-    esClient = tester.get(EsClient.class);
-    session = dbClient.openSession(false);
-    service = tester.get(UserService.class);
-  }
-
-  @After
-  public void after() {
-    session.close();
-  }
-
-  @Test
-  public void create_user() throws Exception {
-    MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
-    GroupDto userGroup = new GroupDto().setName(CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE);
-    dbClient.groupDao().insert(session, userGroup);
-    session.commit();
-
-    boolean result = service.create(NewUser.create()
-      .setLogin("user")
-      .setName("User")
-      .setEmail("user@mail.com")
-      .setPassword("password")
-      .setPasswordConfirmation("password")
-      .setScmAccounts(newArrayList("u1", "u_1")));
-
-    assertThat(result).isFalse();
-
-    UserDto userDto = dbClient.userDao().selectNullableByLogin(session, "user");
-    assertThat(userDto).isNotNull();
-    assertThat(userDto.getId()).isNotNull();
-    assertThat(userDto.getLogin()).isEqualTo("user");
-    assertThat(userDto.getName()).isEqualTo("User");
-    assertThat(userDto.getEmail()).isEqualTo("user@mail.com");
-    assertThat(userDto.getCryptedPassword()).isNotNull();
-    assertThat(userDto.getSalt()).isNotNull();
-    assertThat(userDto.getScmAccountsAsList()).containsOnly("u1", "u_1");
-    assertThat(userDto.getCreatedAt()).isNotNull();
-    assertThat(userDto.getUpdatedAt()).isNotNull();
-
-    UserDoc userDoc = service.getNullableByLogin("user");
-    assertThat(userDoc).isNotNull();
-    assertThat(userDoc.login()).isEqualTo("user");
-    assertThat(userDoc.name()).isEqualTo("User");
-    assertThat(userDoc.email()).isEqualTo("user@mail.com");
-    assertThat(userDoc.scmAccounts()).containsOnly("u1", "u_1");
-    assertThat(userDoc.createdAt()).isNotNull();
-    assertThat(userDoc.updatedAt()).isNotNull();
-  }
-
-  @Test(expected = ForbiddenException.class)
-  public void fail_to_create_user_without_sys_admin_permission() throws Exception {
-    MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.DASHBOARD_SHARING);
-
-    service.create(NewUser.create()
-      .setLogin("user")
-      .setName("User")
-      .setEmail("user@mail.com")
-      .setPassword("password")
-      .setPasswordConfirmation("password")
-      .setScmAccounts(newArrayList("u1", "u_1")));
-  }
-
-  @Test
-  public void update_user() throws Exception {
-    MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
-
-    dbClient.userDao().insert(session, new UserDto()
-      .setLogin("marius")
-      .setName("Marius")
-      .setEmail("marius@mail.com")
-      .setCryptedPassword("1234")
-      .setSalt("abcd")
-      .setCreatedAt(1000L)
-      );
-    GroupDto userGroup = new GroupDto().setName(CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE);
-    dbClient.groupDao().insert(session, userGroup);
-    session.commit();
-
-    service.update(UpdateUser.create("marius")
-      .setName("Marius2")
-      .setEmail("marius2@mail.com"));
-
-    UserDto userDto = dbClient.userDao().selectNullableByLogin(session, "marius");
-    assertThat(userDto.getName()).isEqualTo("Marius2");
-    assertThat(userDto.getEmail()).isEqualTo("marius2@mail.com");
-  }
-
-  @Test(expected = ForbiddenException.class)
-  public void fail_to_update_user_without_sys_admin_permission() throws Exception {
-    MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.DASHBOARD_SHARING);
-
-    service.update(UpdateUser.create("marius")
-      .setName("Marius2")
-      .setEmail("marius2@mail.com")
-      .setPassword("password2")
-      .setPasswordConfirmation("password2")
-      .setScmAccounts(newArrayList("ma2")));
-  }
-
-  @Test
-  public void get_nullable_by_login() throws Exception {
-    createSampleUser();
-
-    assertThat(service.getNullableByLogin("user")).isNotNull();
-  }
-
-  @Test
-  public void get_by_login() throws Exception {
-    createSampleUser();
-
-    assertThat(service.getByLogin("user")).isNotNull();
-  }
-
-  @Test
-  public void index() throws Exception {
-    UserDto userDto = new UserDto().setLogin("user").setEmail("user@mail.com").setCreatedAt(System.currentTimeMillis()).setUpdatedAt(System.currentTimeMillis());
-    dbClient.userDao().insert(session, userDto);
-    session.commit();
-    assertThat(esClient.prepareGet(UserIndexDefinition.INDEX, UserIndexDefinition.TYPE_USER, "user").get().isExists()).isFalse();
-
-    service.index();
-    assertThat(esClient.prepareGet(UserIndexDefinition.INDEX, UserIndexDefinition.TYPE_USER, "user").get().isExists()).isTrue();
-  }
-
-  private void createSampleUser() {
-    MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
-    GroupDto userGroup = new GroupDto().setName(CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE);
-    dbClient.groupDao().insert(session, userGroup);
-    session.commit();
-
-    service.create(NewUser.create()
-      .setLogin("user")
-      .setName("User")
-      .setEmail("user@mail.com")
-      .setPassword("password")
-      .setPasswordConfirmation("password")
-      .setScmAccounts(newArrayList("u1", "u_1")));
-
-    MockUserSession.set().setLogin("john");
-  }
-
-}
index 24cd63f4b0e86be31a54caaf437759d9e18c57f9..76185dfce8a4d786d2ea012d4b698c40b1d80c07 100644 (file)
@@ -21,6 +21,7 @@
 package org.sonar.server.user;
 
 import com.google.common.base.Strings;
+import org.elasticsearch.search.SearchHit;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -42,16 +43,22 @@ import org.sonar.core.user.GroupMembershipDao;
 import org.sonar.core.user.GroupMembershipQuery;
 import org.sonar.core.user.UserDto;
 import org.sonar.server.db.DbClient;
+import org.sonar.server.es.EsTester;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.Message;
 import org.sonar.server.user.db.GroupDao;
 import org.sonar.server.user.db.UserDao;
 import org.sonar.server.user.db.UserGroupDao;
+import org.sonar.server.user.index.UserIndexDefinition;
+import org.sonar.server.user.index.UserIndexer;
 import org.sonar.server.util.Validation;
 import org.sonar.test.DbTests;
 
+import java.util.List;
+
 import static com.google.common.collect.Lists.newArrayList;
 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.verify;
 import static org.mockito.Mockito.when;
@@ -63,6 +70,9 @@ public class UserUpdaterTest {
   @ClassRule
   public static DbTester db = new DbTester();
 
+  @ClassRule
+  public static EsTester es = new EsTester().addDefinitions(new UserIndexDefinition(new Settings()));
+
   @Mock
   System2 system2;
 
@@ -77,12 +87,15 @@ public class UserUpdaterTest {
   GroupDao groupDao;
   GroupMembershipFinder groupMembershipFinder;
   DbSession session;
+  UserIndexer userIndexer;
 
   UserUpdater userUpdater;
 
+
   @Before
   public void setUp() throws Exception {
     db.truncateTables();
+    es.truncateIndices();
     settings = new Settings();
     session = db.myBatis().openSession(false);
     userDao = new UserDao(db.myBatis(), system2);
@@ -91,7 +104,10 @@ public class UserUpdaterTest {
     GroupMembershipDao groupMembershipDao = new GroupMembershipDao(db.myBatis());
     groupMembershipFinder = new GroupMembershipFinder(userDao, groupMembershipDao);
 
-    userUpdater = new UserUpdater(newUserNotifier, settings, userGroupDao, new DbClient(db.database(), db.myBatis(), userDao, groupDao), system2);
+    DbClient dbClient = new DbClient(db.database(), db.myBatis(), userDao, groupDao, userGroupDao);
+    userIndexer = (UserIndexer) new UserIndexer(dbClient, es.client()).setEnabled(true);
+    userUpdater = new UserUpdater(newUserNotifier, settings, dbClient,
+      userIndexer, system2);
   }
 
   @After
@@ -125,6 +141,14 @@ public class UserUpdaterTest {
     assertThat(dto.getCreatedAt()).isEqualTo(1418215735482L);
     assertThat(dto.getUpdatedAt()).isEqualTo(1418215735482L);
     assertThat(result).isFalse();
+
+    List<SearchHit> indexUsers = es.getDocuments(UserIndexDefinition.INDEX, UserIndexDefinition.TYPE_USER);
+    assertThat(indexUsers).hasSize(1);
+    assertThat(indexUsers.get(0).getSource())
+      .contains(
+        entry("login", "user"),
+        entry("name", "User"),
+        entry("email", "user@mail.com"));
   }
 
   @Test
@@ -568,6 +592,14 @@ public class UserUpdaterTest {
     assertThat(dto.getCryptedPassword()).isNotEqualTo("650d2261c98361e2f67f90ce5c65a95e7d8ea2fg");
     assertThat(dto.getCreatedAt()).isEqualTo(1418215735482L);
     assertThat(dto.getUpdatedAt()).isEqualTo(1418215735486L);
+
+    List<SearchHit> indexUsers = es.getDocuments(UserIndexDefinition.INDEX, UserIndexDefinition.TYPE_USER);
+    assertThat(indexUsers).hasSize(1);
+    assertThat(indexUsers.get(0).getSource())
+      .contains(
+        entry("login", "marius"),
+        entry("name", "Marius2"),
+        entry("email", "marius2@mail.com"));
   }
 
   @Test
index f9c32466256144a90a1429a74e9165f8158c14e0..8b2a17cb0aab5284cb5eca6122630dd910fe5a69 100644 (file)
 
 package org.sonar.server.user.ws;
 
+import org.junit.After;
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Test;
 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.config.Settings;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.server.ws.WebService;
+import org.sonar.api.utils.System2;
+import org.sonar.core.permission.GlobalPermissions;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.DbTester;
+import org.sonar.core.user.GroupDto;
+import org.sonar.core.user.UserDto;
+import org.sonar.server.db.DbClient;
+import org.sonar.server.es.EsTester;
+import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.user.MockUserSession;
-import org.sonar.server.user.NewUser;
-import org.sonar.server.user.UserService;
+import org.sonar.server.user.NewUserNotifier;
+import org.sonar.server.user.UserUpdater;
+import org.sonar.server.user.db.GroupDao;
+import org.sonar.server.user.db.UserDao;
+import org.sonar.server.user.db.UserGroupDao;
 import org.sonar.server.user.index.UserDoc;
+import org.sonar.server.user.index.UserIndex;
+import org.sonar.server.user.index.UserIndexDefinition;
+import org.sonar.server.user.index.UserIndexer;
 import org.sonar.server.ws.WsTester;
 
 import java.util.Locale;
-import java.util.Map;
 
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Maps.newHashMap;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateActionTest {
 
+  static final Settings settings = new Settings().setProperty("sonar.defaultGroup", "sonar-users");
+
+  @ClassRule
+  public static final DbTester dbTester = new DbTester();
+
+  @ClassRule
+  public static final EsTester esTester = new EsTester().addDefinitions(new UserIndexDefinition(settings));
+
   WebService.Controller controller;
 
   WsTester tester;
 
-  @Mock
-  UserService service;
+  UserIndex index;
+
+  DbClient dbClient;
+
+  UserIndexer userIndexer;
+
+  DbSession session;
 
   @Mock
   I18n i18n;
 
-  @Captor
-  ArgumentCaptor<NewUser> newUserCaptor;
-
   @Before
   public void setUp() throws Exception {
-    tester = new WsTester(new UsersWs(new CreateAction(service, i18n)));
+    dbTester.truncateTables();
+    esTester.truncateIndices();
+
+    System2 system2 = new System2();
+    UserDao userDao = new UserDao(dbTester.myBatis(), system2);
+    UserGroupDao userGroupDao = new UserGroupDao();
+    GroupDao groupDao = new GroupDao();
+    dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), userDao, userGroupDao, groupDao);
+    session = dbClient.openSession(false);
+    groupDao.insert(session, new GroupDto().setName("sonar-users"));
+    session.commit();
+
+    userIndexer = (UserIndexer) new UserIndexer(dbClient, esTester.client()).setEnabled(true);
+    index = new UserIndex(esTester.client());
+    tester = new WsTester(new UsersWs(new CreateAction(index,
+      new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2),
+      i18n)));
     controller = tester.controller("api/users");
+
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    session.close();
   }
 
   @Test
   public void create_user() throws Exception {
-    Map<String, Object> userDocMap = newHashMap();
-    userDocMap.put("login", "john");
-    userDocMap.put("name", "John");
-    userDocMap.put("email", "john@email.com");
-    userDocMap.put("scmAccounts", newArrayList("jn"));
-    userDocMap.put("active", true);
-    userDocMap.put("createdAt", 15000L);
-    userDocMap.put("updatedAt", 15000L);
-    when(service.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
+    MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
 
     tester.newPostRequest("api/users", "create")
       .setParam("login", "john")
@@ -88,29 +124,26 @@ public class CreateActionTest {
       .setParam("password_confirmation", "1234").execute()
       .assertJson(getClass(), "create_user.json");
 
-    verify(service).create(newUserCaptor.capture());
-    assertThat(newUserCaptor.getValue().login()).isEqualTo("john");
-    assertThat(newUserCaptor.getValue().name()).isEqualTo("John");
-    assertThat(newUserCaptor.getValue().email()).isEqualTo("john@email.com");
-    assertThat(newUserCaptor.getValue().scmAccounts()).containsOnly("jn");
-    assertThat(newUserCaptor.getValue().password()).isEqualTo("1234");
-    assertThat(newUserCaptor.getValue().passwordConfirmation()).isEqualTo("1234");
+    UserDoc user = index.getByLogin("john");
+    assertThat(user.login()).isEqualTo("john");
+    assertThat(user.name()).isEqualTo("John");
+    assertThat(user.email()).isEqualTo("john@email.com");
+    assertThat(user.scmAccounts()).containsOnly("jn");
   }
 
   @Test
   public void reactivate_user() throws Exception {
-    Map<String, Object> userDocMap = newHashMap();
-    userDocMap.put("login", "john");
-    userDocMap.put("name", "John");
-    userDocMap.put("email", "john@email.com");
-    userDocMap.put("scmAccounts", newArrayList("jn"));
-    userDocMap.put("active", true);
-    userDocMap.put("createdAt", 15000L);
-    userDocMap.put("updatedAt", 15000L);
-    when(service.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
-    when(service.create(any(NewUser.class))).thenReturn(true);
-
-    MockUserSession.set().setLogin("julien").setLocale(Locale.FRENCH);
+    MockUserSession.set().setLogin("admin").setLocale(Locale.FRENCH).setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
+
+    dbClient.userDao().insert(session, new UserDto()
+      .setEmail("john@email.com")
+      .setLogin("john")
+      .setName("John")
+      .setActive(true));
+    session.commit();
+    dbClient.userDao().deactivateUserByLogin("john");
+    userIndexer.index();
+
     when(i18n.message(Locale.FRENCH, "user.reactivated", "user.reactivated", "john")).thenReturn("The user 'john' has been reactivated.");
 
     tester.newPostRequest("api/users", "create")
@@ -121,6 +154,20 @@ public class CreateActionTest {
       .setParam("password", "1234")
       .setParam("password_confirmation", "1234").execute()
       .assertJson(getClass(), "reactivate_user.json");
+
+    assertThat(index.getByLogin("john").active()).isTrue();
   }
 
+  @Test(expected = ForbiddenException.class)
+  public void fail_on_missing_permission() throws Exception {
+    MockUserSession.set().setLogin("not_admin");
+
+    tester.newPostRequest("api/users", "create")
+      .setParam("login", "john")
+      .setParam("name", "John")
+      .setParam("email", "john@email.com")
+      .setParam("scm_accounts", "jn")
+      .setParam("password", "1234")
+      .setParam("password_confirmation", "1234").execute();
+  }
 }
index 4fb1cc8a0b7e05ec04e8cfc3bb2c6f318bd70de3..4a6ed1ee9538889153c0775076a4ce7f71b9768f 100644 (file)
@@ -28,9 +28,12 @@ import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.sonar.api.server.ws.WebService;
+import org.sonar.core.permission.GlobalPermissions;
+import org.sonar.server.user.MockUserSession;
 import org.sonar.server.user.UpdateUser;
-import org.sonar.server.user.UserService;
+import org.sonar.server.user.UserUpdater;
 import org.sonar.server.user.index.UserDoc;
+import org.sonar.server.user.index.UserIndex;
 import org.sonar.server.ws.WsTester;
 
 import java.util.Map;
@@ -49,15 +52,19 @@ public class UpdateActionTest {
   WsTester tester;
 
   @Mock
-  UserService service;
+  UserIndex index;
+
+  @Mock
+  UserUpdater updater;
 
   @Captor
   ArgumentCaptor<UpdateUser> userCaptor;
 
   @Before
   public void setUp() throws Exception {
-    tester = new WsTester(new UsersWs(new UpdateAction(service)));
+    tester = new WsTester(new UsersWs(new UpdateAction(index, updater)));
     controller = tester.controller("api/users");
+    MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
   }
 
   @Test
@@ -70,7 +77,7 @@ public class UpdateActionTest {
     userDocMap.put("active", true);
     userDocMap.put("createdAt", 15000L);
     userDocMap.put("updatedAt", 15000L);
-    when(service.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
+    when(index.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
 
     tester.newPostRequest("api/users", "update")
       .setParam("login", "john")
@@ -82,7 +89,7 @@ public class UpdateActionTest {
       .execute()
       .assertJson(getClass(), "update_user.json");
 
-    verify(service).update(userCaptor.capture());
+    verify(updater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().login()).isEqualTo("john");
     assertThat(userCaptor.getValue().name()).isEqualTo("John");
     assertThat(userCaptor.getValue().email()).isEqualTo("john@email.com");
@@ -101,14 +108,14 @@ public class UpdateActionTest {
     userDocMap.put("active", true);
     userDocMap.put("createdAt", 15000L);
     userDocMap.put("updatedAt", 15000L);
-    when(service.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
+    when(index.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
 
     tester.newPostRequest("api/users", "update")
       .setParam("login", "john")
       .setParam("name", "John")
       .execute();
 
-    verify(service).update(userCaptor.capture());
+    verify(updater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isTrue();
     assertThat(userCaptor.getValue().isEmailChanged()).isFalse();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isFalse();
@@ -126,14 +133,14 @@ public class UpdateActionTest {
     userDocMap.put("active", true);
     userDocMap.put("createdAt", 15000L);
     userDocMap.put("updatedAt", 15000L);
-    when(service.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
+    when(index.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
 
     tester.newPostRequest("api/users", "update")
       .setParam("login", "john")
       .setParam("email", "john@email.com")
       .execute();
 
-    verify(service).update(userCaptor.capture());
+    verify(updater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isFalse();
     assertThat(userCaptor.getValue().isEmailChanged()).isTrue();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isFalse();
@@ -151,14 +158,14 @@ public class UpdateActionTest {
     userDocMap.put("active", true);
     userDocMap.put("createdAt", 15000L);
     userDocMap.put("updatedAt", 15000L);
-    when(service.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
+    when(index.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
 
     tester.newPostRequest("api/users", "update")
       .setParam("login", "john")
       .setParam("scm_accounts", "jn")
       .execute();
 
-    verify(service).update(userCaptor.capture());
+    verify(updater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isFalse();
     assertThat(userCaptor.getValue().isEmailChanged()).isFalse();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isTrue();
@@ -176,7 +183,7 @@ public class UpdateActionTest {
     userDocMap.put("active", true);
     userDocMap.put("createdAt", 15000L);
     userDocMap.put("updatedAt", 15000L);
-    when(service.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
+    when(index.getByLogin("john")).thenReturn(new UserDoc(userDocMap));
 
     tester.newPostRequest("api/users", "update")
       .setParam("login", "john")
@@ -184,7 +191,7 @@ public class UpdateActionTest {
       .setParam("password_confirmation", "1234")
       .execute();
 
-    verify(service).update(userCaptor.capture());
+    verify(updater).update(userCaptor.capture());
     assertThat(userCaptor.getValue().isNameChanged()).isFalse();
     assertThat(userCaptor.getValue().isEmailChanged()).isFalse();
     assertThat(userCaptor.getValue().isScmAccountsChanged()).isFalse();
index f3551635ac6cc54f7c11a4ab8e586e918cf2da63..f7da72560d7b66cf0c1ead77e3eff0b640225cc8 100644 (file)
@@ -25,7 +25,8 @@ import org.junit.Test;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.server.ws.RailsHandler;
 import org.sonar.api.server.ws.WebService;
-import org.sonar.server.user.UserService;
+import org.sonar.server.user.UserUpdater;
+import org.sonar.server.user.index.UserIndex;
 import org.sonar.server.ws.WsTester;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -38,8 +39,8 @@ public class UsersWsTest {
   @Before
   public void setUp() throws Exception {
     WsTester tester = new WsTester(new UsersWs(
-      new CreateAction(mock(UserService.class), mock(I18n.class)),
-      new UpdateAction(mock(UserService.class)),
+      new CreateAction(mock(UserIndex.class), mock(UserUpdater.class), mock(I18n.class)),
+      new UpdateAction(mock(UserIndex.class), mock(UserUpdater.class)),
       new CurrentUserAction()));
     controller = tester.controller("api/users");
   }