mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-16 10:48:47 +00:00
bug6239: fix roles rows removal bug
This commit is contained in:
+10
-3
@@ -33,6 +33,8 @@ public class UserGroupRoleDefinitionPanelPO extends PageArea {
|
||||
private static final String TABLE_ROLE_NAME_COLUMN = "Role Name";
|
||||
@FindBy(how = BySeleniumId.class, using = "AddGroupUserButton")
|
||||
private WebElement addRoleButton;
|
||||
@FindBy(how = BySeleniumId.class, using = "RemoveRoleButton")
|
||||
private WebElement removeRoleButton;
|
||||
@FindBy(how = BySeleniumId.class, using = "RoleSuggestion")
|
||||
private WebElement roleNameInput;
|
||||
@FindBy(how = BySeleniumId.class, using = "GroupRoleDefinitionDTOTable")
|
||||
@@ -85,9 +87,14 @@ public class UserGroupRoleDefinitionPanelPO extends PageArea {
|
||||
}
|
||||
|
||||
public void removeRole(String name) {
|
||||
final RoleEntryPO findRole = findRole(name);
|
||||
findRole.deleteRole();
|
||||
waitForAlertContainingMessageAndAccept("Do you really want to remove role");
|
||||
final RoleEntryPO role = findRole(name);
|
||||
role.select();
|
||||
removeRoleButton.click();
|
||||
waitForAlertContainingMessageAndAccept("The following element(s) will be removed");
|
||||
}
|
||||
|
||||
public void removeRoleViaActionButton(String name) {
|
||||
findRole(name).deleteRole();
|
||||
}
|
||||
|
||||
public void removeRoleAndExpectPermissionError(String name) {
|
||||
|
||||
+13
@@ -87,6 +87,19 @@ public class TestUserGroupCreation extends AbstractSeleniumTest {
|
||||
|
||||
@SeleniumTestCase
|
||||
public void testRoleRemoval() {
|
||||
final UserGroupManagementPanelPO userGroupManagementPanel = goToUserGroupDefinitionsPanel();
|
||||
createGroup(userGroupManagementPanel);
|
||||
userGroupManagementPanel.selectGroup(TEST_GROUP_NAME);
|
||||
final UserGroupRoleDefinitionPanelPO userRolesPO = userGroupManagementPanel.getUserGroupRoles();
|
||||
createRole(userRolesPO);
|
||||
userGroupManagementPanel.selectGroup(TEST_GROUP_NAME);
|
||||
userRolesPO.removeRoleViaActionButton(TEST_ROLE);
|
||||
userGroupManagementPanel.selectGroup(TEST_GROUP_NAME);
|
||||
assertNull(userRolesPO.findRole(TEST_ROLE));
|
||||
}
|
||||
|
||||
@SeleniumTestCase
|
||||
public void testRoleRemovalViaGlobalRemoveButton() {
|
||||
final UserGroupManagementPanelPO userGroupManagementPanel = goToUserGroupDefinitionsPanel();
|
||||
createGroup(userGroupManagementPanel);
|
||||
userGroupManagementPanel.selectGroup(TEST_GROUP_NAME);
|
||||
|
||||
+2
-7
@@ -1,6 +1,5 @@
|
||||
package com.sap.sse.gwt.client.celltable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
@@ -142,12 +141,8 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModelWithSe
|
||||
// Deselect items that are no longer present in newObjects (e.g. because they were deleted).
|
||||
// newObjects comes from getAllListDataProvider() (the unfiltered list), so absence here means
|
||||
// true deletion, not just a filter hiding the item.
|
||||
// Snapshot first to avoid ConcurrentModificationException while calling super.setSelected below.
|
||||
final List<T> selectedSnapshot = new ArrayList<>();
|
||||
for (final T s : getSelectedElements()) {
|
||||
selectedSnapshot.add(s);
|
||||
}
|
||||
for (final T selected : selectedSnapshot) {
|
||||
// getSelectedElements() already returns a snapshot copy, so no additional copy is needed here.
|
||||
for (final T selected : getSelectedElements()) {
|
||||
boolean foundInNew = false;
|
||||
for (final T candidate : newObjects) {
|
||||
if (comp != null ? comp.representSameEntity(selected, candidate) : selected.equals(candidate)) {
|
||||
|
||||
+23
-21
@@ -20,8 +20,10 @@ import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.CellTableWithCheckboxResources;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.TableWrapper;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
import com.sap.sse.security.shared.dto.StrippedRoleDefinitionDTO;
|
||||
@@ -124,33 +126,33 @@ public class GroupRoleDefinitionPanel extends Composite
|
||||
});
|
||||
addButton.ensureDebugId("AddGroupUserButton");
|
||||
// Removing a role from a group is semantically an UPDATE to the UserGroup, not a per-role DELETE.
|
||||
buttonPanel.addCountingActionWithParentPermission(stringMessages.removeRole(),
|
||||
final Button removeButton = buttonPanel.addCountingActionWithParentPermission(stringMessages.removeRole(),
|
||||
roleDefinitionTableWrapper.getSelectionModel(),
|
||||
() -> (SecuredDTO) TableWrapper.getSingleSelectedObjectOrNull(userGroupSelectionModel), UPDATE, () -> {
|
||||
final Pair<StrippedRoleDefinitionDTO, Boolean> selectedRole = TableWrapper.getSingleSelectedObjectOrNull(roleDefinitionTableWrapper.getSelectionModel());
|
||||
if (selectedRole == null) {
|
||||
Window.alert(stringMessages.youHaveToSelectAUserGroup());
|
||||
} else if (Window.confirm(stringMessages.doYouReallyWantToRemoveRole(selectedRole.getA().getName()))) {
|
||||
UserGroupDTO selectedObject = TableWrapper.getSingleSelectedObjectOrNull(userGroupSelectionModel);
|
||||
if (selectedObject != null) {
|
||||
userManagementService.removeRoleDefinitionFromUserGroup(selectedObject.getId().toString(),
|
||||
selectedRole.getA().getId().toString(), new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotDeleteRole(selectedRole.getA().getName()));
|
||||
}
|
||||
final UserGroupDTO selectedObject = TableWrapper.getSingleSelectedObjectOrNull(userGroupSelectionModel);
|
||||
if (selectedObject != null) {
|
||||
final RefreshableMultiSelectionModel<Pair<StrippedRoleDefinitionDTO, Boolean>> rolesSelectionModel = roleDefinitionTableWrapper.getSelectionModel();
|
||||
final String roleNames = Util.joinStrings("\n", Util.mapToArrayList(rolesSelectionModel.getSelectedElements(), pair -> pair.getA().getName()));
|
||||
if (Window.confirm(stringMessages.doYouReallyWantToRemoveSelectedElements(roleNames))) {
|
||||
for (final Pair<StrippedRoleDefinitionDTO, Boolean> selectedRole : rolesSelectionModel.getSelectedElements()) {
|
||||
userManagementService.removeRoleDefinitionFromUserGroup(selectedObject.getId().toString(),
|
||||
selectedRole.getA().getId().toString(), new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotDeleteRole(selectedRole.getA().getName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
selectedObject.remove(selectedRole.getA());
|
||||
updateUserGroups();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Window.alert(stringMessages.pleaseSelect());
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
selectedObject.remove(selectedRole.getA());
|
||||
updateUserGroups();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
removeButton.ensureDebugId("RemoveRoleButton");
|
||||
buttonPanel.insertWidgetAtPosition(suggestRole, 0);
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
+3
-6
@@ -3,7 +3,6 @@ package com.sap.sse.security.ui.client.component.usergroup.users;
|
||||
import static com.sap.sse.security.shared.HasPermissions.DefaultActions.UPDATE;
|
||||
import static com.sap.sse.security.shared.impl.SecuredSecurityTypes.USER_GROUP;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -23,6 +22,7 @@ import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.CellTableWithCheckboxResources;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.TableWrapper;
|
||||
import com.sap.sse.security.shared.dto.StrippedUserDTO;
|
||||
import com.sap.sse.security.shared.dto.UserGroupDTO;
|
||||
@@ -106,11 +106,8 @@ public class UserGroupDetailPanel extends Composite
|
||||
final Set<UserGroupDTO> selectedUserGroups = userGroupSelectionModel.getSelectedSet();
|
||||
if (selectedUserGroups != null && selectedUserGroups.size() == 1) {
|
||||
final UserGroupDTO selectedUserGroup = selectedUserGroups.iterator().next();
|
||||
final List<StrippedUserDTO> users = new ArrayList<>(tenantUsersTable.getSelectionModel().getSelectedSet());
|
||||
if (selectedUserGroups == null || selectedUserGroups.isEmpty()) {
|
||||
Window.alert(stringMessages.youHaveToSelectAUserGroup());
|
||||
return;
|
||||
}
|
||||
final RefreshableMultiSelectionModel<StrippedUserDTO> usersSelectionModel = tenantUsersTable.getSelectionModel();
|
||||
final List<StrippedUserDTO> users = Util.asList(usersSelectionModel.getSelectedElements());
|
||||
for (StrippedUserDTO user : users) {
|
||||
final String username = user.getName();
|
||||
userManagementService.removeUserFromUserGroup(selectedUserGroup.getId().toString(), username,
|
||||
|
||||
Reference in New Issue
Block a user