]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-21051 use UUID as resource id for /api/v2/users-management/users
authorAurelien Poscia <aurelien.poscia@sonarsource.com>
Fri, 17 Nov 2023 14:18:04 +0000 (15:18 +0100)
committersonartech <sonartech@sonarsource.com>
Mon, 20 Nov 2023 20:02:38 +0000 (20:02 +0000)
server/sonar-webserver-common/src/it/java/org/sonar/server/common/user/service/UserServiceIT.java
server/sonar-webserver-common/src/main/java/org/sonar/server/common/user/UserDeactivator.java
server/sonar-webserver-common/src/main/java/org/sonar/server/common/user/service/UserService.java
server/sonar-webserver-webapi-v2/src/main/java/org/sonar/server/v2/api/user/controller/DefaultUserController.java
server/sonar-webserver-webapi-v2/src/main/java/org/sonar/server/v2/api/user/controller/UserController.java
server/sonar-webserver-webapi-v2/src/main/java/org/sonar/server/v2/api/user/converter/UsersSearchRestResponseGenerator.java
server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/api/user/controller/DefaultUserControllerTest.java
server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/api/user/converter/UsersSearchRestResponseGeneratorTest.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/DeactivateActionIT.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/DeactivateAction.java

index 61a691e815f386d4fa0b6c529b62af393f0ac2ec..0ad92fa02f4b63824fc7c086f42836685804ce8b 100644 (file)
@@ -469,7 +469,7 @@ public class UserServiceIT {
       .setName("Ada Lovelace")
       .setScmAccounts(singletonList("al")));
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     verifyThatUserIsDeactivated(user.getLogin());
   }
@@ -483,7 +483,7 @@ public class UserServiceIT {
       .setName("Ada Lovelace")
       .setScmAccounts(singletonList("al")));
 
-    userService.deactivate(user.getLogin(), true);
+    userService.deactivate(user.getUuid(), true);
 
     verifyThatUserIsDeactivated("anonymized");
     verifyThatUserIsAnomymized("anonymized");
@@ -497,7 +497,7 @@ public class UserServiceIT {
     db.users().insertGroup();
     db.users().insertMember(group1, user);
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().groupMembershipDao().selectGroupUuidsByUserUuid(dbSession, user.getUuid())).isEmpty();
   }
@@ -510,7 +510,7 @@ public class UserServiceIT {
     db.users().insertToken(user);
     db.commit();
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(),false);
 
     assertThat(db.getDbClient().userTokenDao().selectByUser(dbSession, user)).isEmpty();
   }
@@ -525,7 +525,7 @@ public class UserServiceIT {
     db.properties().insertProperty(newUserPropertyDto(user).setEntityUuid(project.uuid()), project.getKey(),
       project.name(), project.qualifier(), user.getLogin());
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().propertiesDao().selectByQuery(PropertyQuery.builder().setUserUuid(user.getUuid()).build(), dbSession)).isEmpty();
     assertThat(db.getDbClient().propertiesDao().selectByQuery(PropertyQuery.builder().setUserUuid(user.getUuid()).setEntityUuid(project.uuid()).build(), dbSession)).isEmpty();
@@ -541,7 +541,7 @@ public class UserServiceIT {
     db.users().insertProjectPermissionOnUser(user, UserRole.USER, project);
     db.users().insertProjectPermissionOnUser(user, UserRole.CODEVIEWER, project);
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().userPermissionDao().selectGlobalPermissionsOfUser(dbSession, user.getUuid())).isEmpty();
     assertThat(db.getDbClient().userPermissionDao().selectEntityPermissionsOfUser(dbSession, user.getUuid(), project.uuid())).isEmpty();
@@ -556,7 +556,7 @@ public class UserServiceIT {
     db.permissionTemplates().addUserToTemplate(template.getUuid(), user.getUuid(), UserRole.USER, template.getName(), user.getLogin());
     db.permissionTemplates().addUserToTemplate(anotherTemplate.getUuid(), user.getUuid(), UserRole.CODEVIEWER, anotherTemplate.getName(), user.getLogin());
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, template.getUuid())).extracting(PermissionTemplateUserDto::getUserUuid)
       .isEmpty();
@@ -571,7 +571,7 @@ public class UserServiceIT {
     QProfileDto profile = db.qualityProfiles().insert();
     db.qualityProfiles().addUserPermission(profile, user);
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().qProfileEditUsersDao().exists(dbSession, profile, user)).isFalse();
   }
@@ -589,7 +589,7 @@ public class UserServiceIT {
     db.properties().insertProperty(new PropertyDto().setKey("other").setValue(user.getLogin())
       .setEntityUuid(anotherProject.uuid()), anotherProject.getKey(), anotherProject.name(), anotherProject.qualifier(), user.getLogin());
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().propertiesDao().selectByQuery(PropertyQuery.builder().setKey("sonar.issues.defaultAssigneeLogin").build(), db.getSession())).isEmpty();
     assertThat(db.getDbClient().propertiesDao().selectByQuery(PropertyQuery.builder().build(), db.getSession())).extracting(PropertyDto::getKey).containsOnly("other");
@@ -603,7 +603,7 @@ public class UserServiceIT {
     db.qualityGates().addUserPermission(qualityGate, user);
     assertThat(db.countRowsOfTable("qgate_user_permissions")).isOne();
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.countRowsOfTable("qgate_user_permissions")).isZero();
   }
@@ -617,7 +617,7 @@ public class UserServiceIT {
     UserDto anotherUser = db.users().insertUser();
     db.almPats().insert(p -> p.setUserUuid(anotherUser.getUuid()), p -> p.setAlmSettingUuid(almSettingDto.getUuid()));
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().almPatDao().selectByUserAndAlmSetting(dbSession, user.getUuid(), almSettingDto)).isEmpty();
     assertThat(db.getDbClient().almPatDao().selectByUserAndAlmSetting(dbSession, anotherUser.getUuid(), almSettingDto)).isNotNull();
@@ -632,7 +632,7 @@ public class UserServiceIT {
     UserDto anotherUser = db.users().insertUser();
     SessionTokenDto sessionToken3 = db.users().insertSessionToken(anotherUser);
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().sessionTokensDao().selectByUuid(dbSession, sessionToken1.getUuid())).isNotPresent();
     assertThat(db.getDbClient().sessionTokensDao().selectByUuid(dbSession, sessionToken2.getUuid())).isNotPresent();
@@ -652,7 +652,7 @@ public class UserServiceIT {
     UserDismissedMessageDto msg3 = db.users().insertUserDismissedMessageOnProject(anotherUser, project1, MessageType.SUGGEST_DEVELOPER_EDITION_UPGRADE);
     UserDismissedMessageDto msg4 = db.users().insertUserDismissedMessageOnProject(anotherUser, project2, MessageType.SUGGEST_DEVELOPER_EDITION_UPGRADE);
 
-    userService.deactivate(user.getLogin(), false);
+    userService.deactivate(user.getUuid(), false);
 
     assertThat(db.getDbClient().userDismissedMessagesDao().selectByUser(dbSession, user)).isEmpty();
     assertThat(db.getDbClient().userDismissedMessagesDao().selectByUser(dbSession, anotherUser))
@@ -676,7 +676,7 @@ public class UserServiceIT {
     db.users().insertGlobalPermissionOnUser(admin, GlobalPermission.ADMINISTER);
 
     assertThatThrownBy(() -> {
-      userService.deactivate(admin.getLogin(), false);
+      userService.deactivate(admin.getUuid(), false);
     })
       .isInstanceOf(BadRequestException.class)
       .hasMessage("User is last administrator, and cannot be deactivated");
@@ -688,7 +688,7 @@ public class UserServiceIT {
 
     UserDto anotherAdmin = createAdminUser();
 
-    userService.deactivate(admin.getLogin(), false);
+    userService.deactivate(admin.getUuid(), false);
 
     verifyThatUserIsDeactivated(admin.getLogin());
     verifyThatUserExists(anotherAdmin.getLogin());
@@ -701,7 +701,7 @@ public class UserServiceIT {
     db.getDbClient().scimUserDao().enableScimForUser(dbSession, user.getUuid());
     db.commit();
 
-    userService.deactivate(user.getLogin(), true);
+    userService.deactivate(user.getUuid(), true);
 
     assertThat(db.getDbClient().scimUserDao().findByUserUuid(dbSession, user.getUuid())).isEmpty();
   }
@@ -712,8 +712,8 @@ public class UserServiceIT {
     UserDto user = db.users().insertUser();
     doThrow(new IllegalStateException("User managed")).when(managedInstanceChecker).throwIfUserIsManaged(any(), eq(user.getUuid()));
 
-    String login = user.getLogin();
-    assertThatThrownBy(() -> userService.deactivate(login, false))
+    String uuid = user.getUuid();
+    assertThatThrownBy(() -> userService.deactivate(uuid, false))
       .isInstanceOf(IllegalStateException.class)
       .hasMessage("User managed");
   }
@@ -738,7 +738,7 @@ public class UserServiceIT {
 
     when(managedInstanceService.isUserManaged(any(), eq(user.getUuid()))).thenReturn(false);
 
-    UserInformation result = userService.fetchUser(user.getLogin());
+    UserInformation result = userService.fetchUser(user.getUuid());
     UserDto resultUser = result.userDto();
     Collection<String> resultGroups = result.groups();
 
@@ -764,7 +764,7 @@ public class UserServiceIT {
     updateUser.setEmail("newemail@example.com");
     updateUser.setScmAccounts(List.of("account1", "account2"));
 
-    userService.updateUser(user.getLogin(), updateUser);
+    userService.updateUser(user.getUuid(), updateUser);
 
     UserDto updatedUser = db.users().selectUserByLogin(user.getLogin()).orElseThrow();
 
index 9c5fd4d580133381ddb1e95f538b198012e13b05..92e2d51cdb109c6bd4ef69f0a56d102d0ef42ae5 100644 (file)
@@ -40,15 +40,13 @@ public class UserDeactivator {
 
   public UserDto deactivateUser(DbSession dbSession, String login) {
     UserDto user = doBeforeDeactivation(dbSession, login);
-    deactivateUser(dbSession, user);
-    return user;
+    return deactivateUser(dbSession, user);
   }
 
   public UserDto deactivateUserWithAnonymization(DbSession dbSession, String login) {
     UserDto user = doBeforeDeactivation(dbSession, login);
     anonymizeUser(dbSession, user);
-    deactivateUser(dbSession, user);
-    return user;
+    return deactivateUser(dbSession, user);
   }
 
   private UserDto doBeforeDeactivation(DbSession dbSession, String login) {
@@ -58,11 +56,6 @@ public class UserDeactivator {
     return user;
   }
 
-  private UserDto getUserOrThrow(DbSession dbSession, String login) {
-    UserDto user = dbClient.userDao().selectByLogin(dbSession, login);
-    return checkFound(user, "User '%s' doesn't exist", login);
-  }
-
   private void ensureNotLastAdministrator(DbSession dbSession, UserDto user) {
     boolean isLastAdmin = dbClient.authorizationDao().countUsersWithGlobalPermissionExcludingUser(dbSession, ADMINISTER.getKey(), user.getUuid()) == 0;
     checkRequest(!isLastAdmin, "User is last administrator, and cannot be deactivated");
@@ -89,8 +82,14 @@ public class UserDeactivator {
     dbClient.scimUserDao().deleteByUserUuid(dbSession, user.getUuid());
   }
 
-  private void deactivateUser(DbSession dbSession, UserDto user) {
+  private UserDto deactivateUser(DbSession dbSession, UserDto user) {
     dbClient.userDao().deactivateUser(dbSession, user);
     dbSession.commit();
+    return getUserOrThrow(dbSession, user.getLogin());
+  }
+
+  private UserDto getUserOrThrow(DbSession dbSession, String login) {
+    UserDto user = dbClient.userDao().selectByLogin(dbSession, login);
+    return checkFound(user, "User '%s' doesn't exist", login);
   }
 }
index 6dc3d7df6d0a2d5f9d5f5dfe04480994cdf82460..5b60eb8b1501386876f19d692e977316d40e2f2c 100644 (file)
@@ -139,35 +139,21 @@ public class UserService {
     return users.stream().map(UserDto::getUuid).collect(Collectors.toSet());
   }
 
-  public UserDto deactivate(String login, Boolean anonymize) {
+  public UserDto deactivate(String uuid, Boolean anonymize) {
     try (DbSession dbSession = dbClient.openSession(false)) {
-      UserDto userDto = findUserOrThrow(login, dbSession);
-      managedInstanceChecker.throwIfUserIsManaged(dbSession, userDto.getUuid());
+      UserDto userDto = findUserOrThrow(uuid, dbSession);
+      managedInstanceChecker.throwIfUserIsManaged(dbSession, uuid);
       UserDto deactivatedUser;
       if (Boolean.TRUE.equals(anonymize)) {
-        deactivatedUser = userDeactivator.deactivateUserWithAnonymization(dbSession, login);
+        deactivatedUser = userDeactivator.deactivateUserWithAnonymization(dbSession, userDto.getLogin());
       } else {
-        deactivatedUser = userDeactivator.deactivateUser(dbSession, login);
+        deactivatedUser = userDeactivator.deactivateUser(dbSession, userDto.getLogin());
       }
       dbSession.commit();
       return deactivatedUser;
     }
   }
 
-  private UserDto findUserOrThrow(String login, DbSession dbSession) {
-    return checkFound(dbClient.userDao().selectByLogin(dbSession, login), USER_NOT_FOUND_MESSAGE, login);
-  }
-
-  public UserInformation fetchUser(String login) {
-    try (DbSession dbSession = dbClient.openSession(false)) {
-      UserDto userDto = findUserOrThrow(login, dbSession);
-      Collection<String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, Set.of(login)).get(login);
-      int tokenCount = dbClient.userTokenDao().selectByUser(dbSession, userDto).size();
-      boolean isManaged = managedInstanceService.isUserManaged(dbSession, userDto.getUuid());
-      return toUserSearchResult(groups, tokenCount, isManaged, userDto);
-    }
-  }
-
   private UserInformation toUserSearchResult(Collection<String> groups, int tokenCount, boolean managed, UserDto userDto) {
     return new UserInformation(
       userDto,
@@ -192,21 +178,21 @@ public class UserService {
       if (Boolean.FALSE.equals(userCreateRequest.isLocal())) {
         newUserBuilder.setExternalIdentity(new ExternalIdentity(SQ_AUTHORITY, login, login));
       }
-      return registerUser(dbSession, login, newUserBuilder);
+      return registerUser(dbSession, login, newUserBuilder.build());
     }
   }
 
-  private UserInformation registerUser(DbSession dbSession, String login, NewUser.Builder newUserBuilder) {
-    UserDto user = dbClient.userDao().selectByLogin(dbSession, login);
+  private UserInformation registerUser(DbSession dbSession, String uuid, NewUser newUserBuilder) {
+    UserDto user = dbClient.userDao().selectByLogin(dbSession, newUserBuilder.login());
     if (user == null) {
-      user = userUpdater.createAndCommit(dbSession, newUserBuilder.build(), u -> {
+      user = userUpdater.createAndCommit(dbSession, newUserBuilder, u -> {
       });
     } else {
-      checkArgument(!user.isActive(), "An active user with login '%s' already exists", login);
-      user = userUpdater.reactivateAndCommit(dbSession, user, newUserBuilder.build(), u -> {
+      checkArgument(!user.isActive(), "An active user with login '%s' already exists", user.getLogin());
+      user = userUpdater.reactivateAndCommit(dbSession, user, newUserBuilder, u -> {
       });
     }
-    return fetchUser(user.getLogin());
+    return fetchUser(user.getUuid());
   }
 
   public static void validateScmAccounts(List<String> scmAccounts) {
@@ -225,13 +211,27 @@ public class UserService {
     }
   }
 
-  public UserInformation updateUser(String login, UpdateUser updateUser) {
+  public UserInformation updateUser(String uuid, UpdateUser updateUser) {
     try (DbSession dbSession = dbClient.openSession(false)) {
-      UserDto userDto = findUserOrThrow(login, dbSession);
+      UserDto userDto = findUserOrThrow(uuid, dbSession);
       userUpdater.updateAndCommit(dbSession, userDto, updateUser, u -> {
       });
-      return fetchUser(userDto.getLogin());
+      return fetchUser(userDto.getUuid());
     }
   }
 
+  public UserInformation fetchUser(String uuid) {
+    try (DbSession dbSession = dbClient.openSession(false)) {
+      UserDto userDto = findUserOrThrow(uuid, dbSession);
+      Collection<String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, Set.of(userDto.getLogin())).get(userDto.getLogin());
+      int tokenCount = dbClient.userTokenDao().selectByUser(dbSession, userDto).size();
+      boolean isManaged = managedInstanceService.isUserManaged(dbSession, uuid);
+      return toUserSearchResult(groups, tokenCount, isManaged, userDto);
+    }
+  }
+
+  private UserDto findUserOrThrow(String uuid, DbSession dbSession) {
+    return checkFound(dbClient.userDao().selectByUuid(dbSession, uuid), USER_NOT_FOUND_MESSAGE, uuid);
+  }
+
 }
index b869e40b4b7247869c5624cb7a6358e81cdcdbf9..952b97d3e6d622e05f1ebd47f8c9a6eab4ad1eaa 100644 (file)
@@ -99,22 +99,22 @@ public class DefaultUserController implements UserController {
   }
 
   @Override
-  public void deactivate(String login, Boolean anonymize) {
+  public void deactivate(String id, Boolean anonymize) {
     userSession.checkLoggedIn().checkIsSystemAdministrator();
-    checkRequest(!login.equals(userSession.getLogin()), "Self-deactivation is not possible");
-    userService.deactivate(login, anonymize);
+    checkRequest(!id.equals(userSession.getUuid()), "Self-deactivation is not possible");
+    userService.deactivate(id, anonymize);
   }
 
   @Override
-  public RestUser fetchUser(String login) {
-    return usersSearchResponseGenerator.toRestUser(userService.fetchUser(login));
+  public RestUser fetchUser(String id) {
+    return usersSearchResponseGenerator.toRestUser(userService.fetchUser(id));
   }
 
   @Override
-  public RestUser updateUser(String login, UserUpdateRestRequest updateRequest) {
+  public RestUser updateUser(String id, UserUpdateRestRequest updateRequest) {
     userSession.checkLoggedIn().checkIsSystemAdministrator();
     UpdateUser update = toUpdateUser(updateRequest);
-    UserInformation updatedUser = userService.updateUser(login, update);
+    UserInformation updatedUser = userService.updateUser(id, update);
     return usersSearchResponseGenerator.toRestUser(updatedUser);
   }
 
index 1a59a1f9c46314a613efe9209929f6272b7bc932..366cc9bb1fd026a7b456ad72633fd31748c41aa3 100644 (file)
@@ -69,14 +69,14 @@ public interface UserController {
     @Valid @ParameterObject UsersSearchRestRequest usersSearchRestRequest,
     @Valid @ParameterObject RestPage restPage);
 
-  @DeleteMapping(path = "/{login}")
+  @DeleteMapping(path = "/{id}")
   @ResponseStatus(HttpStatus.NO_CONTENT)
   @Operation(summary = "Deactivate a user", description = "Deactivates a user. Requires Administer System permission.")
   void deactivate(
-    @PathVariable("login") @Parameter(description = "The login of the user to delete.", required = true, in = ParameterIn.PATH) String login,
+    @PathVariable("id") @Parameter(description = "The ID of the user to delete.", required = true, in = ParameterIn.PATH) String id,
     @RequestParam(value = "anonymize", required = false, defaultValue = "false") @Parameter(description = "Anonymize user in addition to deactivating it.") Boolean anonymize);
 
-  @GetMapping(path = "/{login}")
+  @GetMapping(path = "/{id}")
   @ResponseStatus(HttpStatus.OK)
   @Operation(summary = "Fetch a single user", description = """
     Fetch a single user.
@@ -90,15 +90,15 @@ public interface UserController {
         'tokensCount'
       Field 'sonarqubeLastConnectionDate' is only updated every hour, so it may not be accurate, for instance when a user authenticates many times in less than one hour.
     """)
-  RestUser fetchUser(@PathVariable("login") @Parameter(description = "The login of the user to fetch.", required = true, in = ParameterIn.PATH) String login);
+  RestUser fetchUser(@PathVariable("id") @Parameter(description = "The id of the user to fetch.", required = true, in = ParameterIn.PATH) String id);
 
-  @PatchMapping(path = "/{login}", consumes = JSON_MERGE_PATCH_CONTENT_TYPE, produces = MediaType.APPLICATION_JSON_VALUE)
+  @PatchMapping(path = "/{id}", consumes = JSON_MERGE_PATCH_CONTENT_TYPE, produces = MediaType.APPLICATION_JSON_VALUE)
   @ResponseStatus(HttpStatus.OK)
   @Operation(summary = "Update a user", description = """
     Update a user.
     Allows updating user's name, email and SCM accounts.
     """)
-  RestUser updateUser(@PathVariable("login") String login, @Valid @RequestBody UserUpdateRestRequest updateRequest);
+  RestUser updateUser(@PathVariable("id") String id, @Valid @RequestBody UserUpdateRestRequest updateRequest);
 
   @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
   @ResponseStatus(HttpStatus.OK)
index f6ec6336fa50b85fdfae79754a7ed9e79ae37485..6f31cf55eec0c5372b404f3298ec71707cc48ba0 100644 (file)
@@ -60,10 +60,11 @@ public class UsersSearchRestResponseGenerator implements UsersSearchResponseGene
   public RestUser toRestUser(UserInformation userInformation) {
     UserDto userDto = userInformation.userDto();
 
+    String id = userDto.getUuid();
     String login = userDto.getLogin();
     String name = userDto.getName();
     if (!userSession.isLoggedIn()) {
-      return new RestUserForAnonymousUsers(login, login, name);
+      return new RestUserForAnonymousUsers(id, login, name);
     }
 
     String avatar = userInformation.avatar().orElse(null);
@@ -78,7 +79,7 @@ public class UsersSearchRestResponseGenerator implements UsersSearchResponseGene
       String slLastConnectionDate = toDateTime(userDto.getLastSonarlintConnectionDate());
       List<String> scmAccounts = userInformation.userDto().getSortedScmAccounts();
       return new RestUserForAdmins(
-        login,
+        id,
         login,
         name,
         email,
@@ -92,7 +93,7 @@ public class UsersSearchRestResponseGenerator implements UsersSearchResponseGene
         slLastConnectionDate,
         scmAccounts);
     }
-    return new RestUserForLoggedInUsers(login, login, name, email, active, local, externalIdentityProvider, avatar);
+    return new RestUserForLoggedInUsers(id, login, name, email, active, local, externalIdentityProvider, avatar);
   }
 
   private static String toDateTime(@Nullable Long dateTimeMs) {
index 0c8ce6ef2119dab55ac87dfc2bea02d0b6cf20a4..66415e7750586f762700a1cdba411615edd6752d 100644 (file)
@@ -270,9 +270,9 @@ public class DefaultUserControllerTest {
 
   @Test
   public void deactivate_whenUserTryingToDeactivateThemself_shouldReturnBadRequest() throws Exception {
-    userSession.logIn("userToDelete").setSystemAdministrator();
+    UserSessionRule userToDelete = userSession.logIn("userToDelete").setSystemAdministrator();
 
-    mockMvc.perform(delete(USER_ENDPOINT + "/userToDelete"))
+    mockMvc.perform(delete(USER_ENDPOINT + "/" + userToDelete.getUuid()))
       .andExpectAll(
         status().isBadRequest(),
         content().json("{\"message\":\"Self-deactivation is not possible\"}"));
@@ -450,10 +450,10 @@ public class DefaultUserControllerTest {
     userSession.logIn().setSystemAdministrator();
     UserInformation userInformation = generateUserSearchResult("1", true, true, false, 1, 2);
 
-    when(userService.updateUser(eq("userLogin"), any())).thenReturn(userInformation);
+    when(userService.updateUser(eq("userUuid"), any())).thenReturn(userInformation);
     when(responseGenerator.toRestUser(userInformation)).thenReturn(toRestUser(userInformation));
 
-    MvcResult mvcResult = mockMvc.perform(patch(USER_ENDPOINT + "/userLogin")
+    MvcResult mvcResult = mockMvc.perform(patch(USER_ENDPOINT + "/userUuid")
       .contentType(JSON_MERGE_PATCH_CONTENT_TYPE)
       .content(payload))
       .andExpect(
@@ -464,7 +464,7 @@ public class DefaultUserControllerTest {
     assertThat(responseUser).isEqualTo(toRestUser(userInformation));
 
     ArgumentCaptor<UpdateUser> updateUserCaptor = ArgumentCaptor.forClass(UpdateUser.class);
-    verify(userService).updateUser(eq("userLogin"), updateUserCaptor.capture());
+    verify(userService).updateUser(eq("userUuid"), updateUserCaptor.capture());
     return updateUserCaptor.getValue();
   }
 
index fbbaa1d11f9bab21241b6ea6711af29500a0a006..5f73fc812c4cf1c9493a58150e8e9b1b9c310468 100644 (file)
@@ -84,7 +84,7 @@ public class UsersSearchRestResponseGeneratorTest {
   private static RestUserForAdmins buildExpectedResponseForAdmin(UserInformation userInformation) {
     UserDto userDto = userInformation.userDto();
     return new RestUserForAdmins(
-      userDto.getLogin(),
+      userDto.getUuid(),
       userDto.getLogin(),
       userDto.getName(),
       userDto.getEmail(),
@@ -120,7 +120,7 @@ public class UsersSearchRestResponseGeneratorTest {
   private static RestUserForLoggedInUsers buildExpectedResponseForUser(UserInformation userInformation) {
     UserDto userDto = userInformation.userDto();
     return new RestUserForLoggedInUsers(
-      userDto.getLogin(),
+      userDto.getUuid(),
       userDto.getLogin(),
       userDto.getName(),
       userDto.getEmail(),
@@ -149,7 +149,7 @@ public class UsersSearchRestResponseGeneratorTest {
   private static RestUserForAnonymousUsers buildExpectedResponseForAnonymous(UserInformation userInformation) {
     UserDto userDto = userInformation.userDto();
     return new RestUserForAnonymousUsers(
-      userDto.getLogin(),
+      userDto.getUuid(),
       userDto.getLogin(),
       userDto.getName()
     );
index 6fc3a2815bcfc9fff7775f6fad2056586d576b5b..fe07f9de711756504b1269b426a13422eb014ca1 100644 (file)
@@ -350,7 +350,7 @@ public class DeactivateActionIT {
       deactivate("someone");
     })
       .isInstanceOf(NotFoundException.class)
-      .hasMessage("User 'someone' not found");
+      .hasMessage("User 'someone' doesn't exist");
   }
 
   @Test
index b154e0cece80e0b623de84824d2c4633d8176080..60b80b6412b3252bfff5049f7173cfa64b91eeea 100644 (file)
@@ -81,22 +81,21 @@ public class DeactivateAction implements UsersWsAction {
     String login = request.mandatoryParam(PARAM_LOGIN);
     checkRequest(!login.equals(userSession.getLogin()), "Self-deactivation is not possible");
     boolean shouldAnonymize = request.mandatoryParamAsBoolean(PARAM_ANONYMIZE);
-    UserDto deactivatedUser = userService.deactivate(login, shouldAnonymize);
-    writeResponse(response, deactivatedUser.getLogin());
+    try (DbSession dbSession = dbClient.openSession(false)) {
+      UserDto userDto = dbClient.userDao().selectByLogin(dbSession, login);
+      checkFound(userDto, "User '%s' doesn't exist", login);
+      UserDto deactivatedUser = userService.deactivate(userDto.getUuid(), shouldAnonymize);
+      writeResponse(response, deactivatedUser);
+    }
   }
 
-  private void writeResponse(Response response, String login) {
+  private void writeResponse(Response response, UserDto userDto) {
     try (DbSession dbSession = dbClient.openSession(false)) {
-      UserDto user = dbClient.userDao().selectByLogin(dbSession, login);
-      // safeguard. It exists as the check has already been done earlier
-      // when deactivating user
-      checkFound(user, "User '%s' doesn't exist", login);
-
       try (JsonWriter json = response.newJsonWriter()) {
         json.beginObject();
         json.name("user");
-        Set<String> groups = new HashSet<>(dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, singletonList(login)).get(login));
-        userWriter.write(json, user, groups, UserJsonWriter.FIELDS);
+        Set<String> groups = new HashSet<>(dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, singletonList(userDto.getLogin())).get(userDto.getLogin()));
+        userWriter.write(json, userDto, groups, UserJsonWriter.FIELDS);
         json.endObject();
       }
     }