From 187523062a1fb01ce1cf08c66cef52e9d5a36852 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Tue, 28 Apr 2015 16:40:09 +0200 Subject: [PATCH] SONAR-6466 Refactor create/update methods out of UserService into UserUpdater --- .../java/org/sonar/server/db/DbClient.java | 10 +- .../server/platform/ServerComponents.java | 2 - .../sonar/server/user/DefaultUserService.java | 23 +- .../org/sonar/server/user/UserService.java | 74 ------- .../org/sonar/server/user/UserUpdater.java | 21 +- .../sonar/server/user/ws/CreateAction.java | 18 +- .../sonar/server/user/ws/UpdateAction.java | 19 +- .../server/issue/IssueServiceMediumTest.java | 6 +- .../server/user/DefaultUserServiceTest.java | 37 ++-- .../server/user/UserServiceMediumTest.java | 198 ------------------ .../sonar/server/user/UserUpdaterTest.java | 34 ++- .../server/user/ws/CreateActionTest.java | 133 ++++++++---- .../server/user/ws/UpdateActionTest.java | 33 +-- .../org/sonar/server/user/ws/UsersWsTest.java | 7 +- 14 files changed, 228 insertions(+), 387 deletions(-) delete mode 100644 server/sonar-server/src/main/java/org/sonar/server/user/UserService.java delete mode 100644 server/sonar-server/src/test/java/org/sonar/server/user/UserServiceMediumTest.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java b/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java index 028d5d9316e..6cda0323c7e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java @@ -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; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 60a9cab58aa..4f464e21c20 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -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 diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java b/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java index 354fbd0dab0..9dfcea527a2 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java @@ -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 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 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 index e69d8c3e0d2..00000000000 --- a/server/sonar-server/src/main/java/org/sonar/server/user/UserService.java +++ /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); - } -} diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java index e90ec514fa3..5c5ebddfece 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java @@ -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 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(); + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java index ff26328774d..f98d0f20187 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java @@ -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) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java index 8a806866734..565781e35d0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java @@ -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(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java index 911581eec05..9bf9a4af552 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java @@ -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() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java index 94af4444276..142362e3dfd 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java @@ -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 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 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 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 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 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 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 index 22f9e98fb2f..00000000000 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserServiceMediumTest.java +++ /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"); - } - -} diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java index 24cd63f4b0e..76185dfce8a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterTest.java @@ -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 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 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 diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java index f9c32466256..8b2a17cb0aa 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java @@ -20,64 +20,100 @@ 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 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 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 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(); + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java index 4fb1cc8a0b7..4a6ed1ee953 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java @@ -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 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(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java index f3551635ac6..f7da72560d7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java @@ -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"); } -- 2.39.5