]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8893 WS api/organizations/remove_member do not fail when user is not a member
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 16 Mar 2017 09:27:31 +0000 (10:27 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 21 Mar 2017 12:05:50 +0000 (13:05 +0100)
server/sonar-server/src/main/java/org/sonar/server/organization/ws/RemoveMemberAction.java
server/sonar-server/src/test/java/org/sonar/server/organization/ws/RemoveMemberActionTest.java

index faa463d495ce8e9672c3e69d0efbf9cd7bc57b26..fa94f6ea922bb99cc837bb87fdde95d93b0ca159 100644 (file)
@@ -27,13 +27,10 @@ import org.sonar.api.server.ws.WebService.NewController;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.organization.OrganizationDto;
-import org.sonar.db.organization.OrganizationMemberDto;
 import org.sonar.db.permission.OrganizationPermission;
 import org.sonar.db.user.UserDto;
-import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.user.UserSession;
 
-import static java.lang.String.format;
 import static java.util.Collections.singletonList;
 import static org.sonar.api.CoreProperties.DEFAULT_ISSUE_ASSIGNEE;
 import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_LOGIN;
@@ -88,19 +85,22 @@ public class RemoveMemberAction implements OrganizationsWsAction {
 
       userSession.checkPermission(OrganizationPermission.ADMINISTER, organization);
 
-      OrganizationMemberDto organizationMember = dbClient.organizationMemberDao().select(dbSession, organizationUuid, userId)
-        .orElseThrow(() -> BadRequestException.create(format("User '%s' is not a member of organization '%s'", user.getLogin(), organization.getKey())));
-
-      dbClient.userPermissionDao().deleteOrganizationMemberPermissions(dbSession, organizationUuid, userId);
-      dbClient.permissionTemplateDao().deleteUserPermissionsByOrganization(dbSession, organizationUuid, userId);
-      dbClient.userGroupDao().deleteByOrganizationAndUser(dbSession, organizationUuid, userId);
-      dbClient.propertiesDao().deleteByOrganizationAndUser(dbSession, organizationUuid, userId);
-      dbClient.propertiesDao().deleteByOrganizationAndMatchingLogin(dbSession, organizationUuid, user.getLogin(), singletonList(DEFAULT_ISSUE_ASSIGNEE));
-
-      dbClient.organizationMemberDao().delete(dbSession, organizationMember.getOrganizationUuid(), organizationMember.getUserId());
-      dbSession.commit();
+      dbClient.organizationMemberDao().select(dbSession, organizationUuid, userId)
+        .ifPresent(om -> removeMember(dbSession, organizationUuid, user));
     }
 
     response.noContent();
   }
+
+  private void removeMember(DbSession dbSession, String organizationUuid, UserDto user) {
+    int userId = user.getId();
+    dbClient.userPermissionDao().deleteOrganizationMemberPermissions(dbSession, organizationUuid, userId);
+    dbClient.permissionTemplateDao().deleteUserPermissionsByOrganization(dbSession, organizationUuid, userId);
+    dbClient.userGroupDao().deleteByOrganizationAndUser(dbSession, organizationUuid, userId);
+    dbClient.propertiesDao().deleteByOrganizationAndUser(dbSession, organizationUuid, userId);
+    dbClient.propertiesDao().deleteByOrganizationAndMatchingLogin(dbSession, organizationUuid, user.getLogin(), singletonList(DEFAULT_ISSUE_ASSIGNEE));
+
+    dbClient.organizationMemberDao().delete(dbSession, organizationUuid, userId);
+    dbSession.commit();
+  }
 }
index a12e062fcfa6ffaba311a349ada2f7c8ad1fd9c0..9ed91f312b2d5b3c06ca7e8588fca9d6112b6ab2 100644 (file)
@@ -38,7 +38,6 @@ import org.sonar.db.property.PropertyDto;
 import org.sonar.db.property.PropertyQuery;
 import org.sonar.db.user.GroupDto;
 import org.sonar.db.user.UserDto;
-import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.tester.UserSessionRule;
@@ -236,6 +235,13 @@ public class RemoveMemberActionTest {
     assertNotAMember(organization.getUuid(), user.getId());
   }
 
+  @Test
+  public void do_not_fail_if_user_already_removed_from_organization() {
+    call(organization.getKey(), user.getLogin());
+
+    call(organization.getKey(), user.getLogin());
+  }
+
   @Test
   public void fail_if_login_does_not_exist() {
     expectedException.expect(NotFoundException.class);
@@ -266,16 +272,6 @@ public class RemoveMemberActionTest {
     call(null, user.getLogin());
   }
 
-  @Test
-  public void fail_if_user_already_removed_from_organization() {
-    call(organization.getKey(), user.getLogin());
-
-    expectedException.expect(BadRequestException.class);
-    expectedException.expectMessage("User '" + user.getLogin() + "' is not a member of organization '" + organization.getKey() + "'");
-
-    call(organization.getKey(), user.getLogin());
-  }
-
   @Test
   public void fail_if_insufficient_permissions() {
     userSession.logIn().addPermission(ADMINISTER_QUALITY_GATES, organization);