Bug 5230: add api test for creating and updating transitive roles

This commit is contained in:
Thomas Wiese committed 2020-04-17 14:52:02 +02:00
1 parent 134471442b
commit eea27f82bd
4 files changed
+50 -5

No files matched your search

@@ -21,24 +21,33 @@ public class RoleApi {
private static final String KEY_ROLE_NAME = "roleName";
private static final String KEY_PERMISSIONS = "permissions";
private static final String KEY_ID = "roleId";
private static final String KEY_TRANSITIVE = "transitive";
public Role getRole(ApiContext ctx, UUID roleId) {
return new Role(ctx.get(ROLE_URL + roleId.toString()));
}
public Role createRole(ApiContext ctx, String roleName) {
return createRole(ctx, roleName, /* transitive */ true);
}
public Role createRole(ApiContext ctx, String roleName, boolean transitive) {
final Map<String, String> formParams = new HashMap<>();
formParams.put(KEY_ROLE_NAME, roleName);
return new Role(ctx.post(ROLE_URL, new HashMap<>(), formParams));
final Map<String, String> queryParams = new HashMap<>();
queryParams.put(KEY_TRANSITIVE, Boolean.toString(transitive));
return new Role(ctx.post(ROLE_URL, queryParams, formParams));
}
public void deleteRole(ApiContext ctx, UUID roleId) {
ctx.delete(ROLE_URL + roleId.toString());
}
public String updateRole(ApiContext ctx, UUID roleId, Iterable<String> permissionStrings, String roleName) {
public String updateRole(ApiContext ctx, UUID roleId, Iterable<String> permissionStrings, String roleName,
boolean transitive) {
final JSONObject json = new JSONObject();
json.put(KEY_ROLE_NAME, roleName);
json.put(KEY_TRANSITIVE, transitive);
final JSONArray permissionArray = new JSONArray();
for (String permission : permissionStrings) {
permissionArray.add(permission);
@@ -61,6 +70,10 @@ public class RoleApi {
return UUID.fromString(get(KEY_ID));
}
public boolean isTransitive() {
return get(KEY_TRANSITIVE);
}
public Iterable<String> getPermissions() {
JSONArray array = get(KEY_PERMISSIONS);
Collection<String> col = new ArrayList<>();
@@ -3,6 +3,7 @@ package com.sap.sailing.selenium.api.test;
import static com.sap.sailing.selenium.api.core.ApiContext.SECURITY_CONTEXT;
import static com.sap.sailing.selenium.api.core.ApiContext.createAdminApiContext;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -90,7 +91,8 @@ public class RoleApiTest extends AbstractSeleniumTest {
permissions.add("BOAT:READ");
final String updatedRoleName = roleCreated.getName() + "_changed";
final String roleUpdate = roleApi.updateRole(adminCtx, roleCreated.getId(), permissions, updatedRoleName);
final String roleUpdate = roleApi.updateRole(adminCtx, roleCreated.getId(), permissions, updatedRoleName,
roleCreated.isTransitive());
assertNull("Empty string expected.", roleUpdate);
@@ -107,4 +109,30 @@ public class RoleApiTest extends AbstractSeleniumTest {
roleApi.deleteRole(adminCtx, roleCreated.getId());
}
@Test
public void testUpdateRoleTransitive() {
final ApiContext adminCtx = createAdminApiContext(getContextRoot(), SECURITY_CONTEXT);
final String testRoleName1 = "test role transitive_1";
final Role roleCreated1 = roleApi.createRole(adminCtx, testRoleName1);
assertTrue("role1 should be transitive by default", roleCreated1.isTransitive());
final String testRoleName2 = "test role transitive_2";
final Role roleCreated2 = roleApi.createRole(adminCtx, testRoleName2, /* transitive */ true);
assertTrue("role2 should be transitive by parameter", roleCreated2.isTransitive());
final String testRoleName3 = "test role transitive_3";
final Role roleCreated3 = roleApi.createRole(adminCtx, testRoleName3, /* transitive */ false);
assertFalse("role3 should be not transitive by parameter", roleCreated3.isTransitive());
assertNull("updateRole shouldn't return something", roleApi.updateRole(adminCtx, roleCreated1.getId(),
roleCreated1.getPermissions(), roleCreated1.getName(), false));
final Role roleUpdated1 = roleApi.getRole(adminCtx, roleCreated1.getId());
assertFalse("role1 should be non-transitive after update", roleUpdated1.isTransitive());
assertNull("updateRole shouldn't return something", roleApi.updateRole(adminCtx, roleCreated3.getId(),
roleCreated3.getPermissions(), roleCreated3.getName(), true));
final Role roleUpdated3 = roleApi.getRole(adminCtx, roleCreated3.getId());
assertTrue("role3 should be transitive after update", roleUpdated3.isTransitive());
}
}
@@ -92,7 +92,7 @@ public class UserGroupApiTest extends AbstractSeleniumTest {
// add new role to group with admin user
final Role createdRole = roleApi.createRole(adminCtx, "My-Epic-Role");
roleApi.updateRole(adminCtx, createdRole.getId(), Arrays.asList("*"), createdRole.getName());
roleApi.updateRole(adminCtx, createdRole.getId(), Arrays.asList("*"), createdRole.getName(), createdRole.isTransitive());
userGroupApi.addRoleToGroup(adminCtx, userGroupCreated.getGroupId(), createdRole.getId(), false);
try {
@@ -43,7 +43,7 @@ public class RoleResource extends AbstractSecurityResource {
@POST
@Produces("application/json;charset=UTF-8")
public Response createRole(@FormParam(KEY_ROLE_NAME) String roleName,
@QueryParam("KEY_TRANSITIVE") @DefaultValue("true") boolean transitive) {
@QueryParam(KEY_TRANSITIVE) @DefaultValue("true") boolean transitive) {
final String roleDefinitionIdAsString = UUID.randomUUID().toString();
final RoleDefinition role = getService().setOwnershipWithoutCheckPermissionForObjectCreationAndRevertOnError(
SecuredSecurityTypes.ROLE_DEFINITION, new TypeRelativeObjectIdentifier(roleDefinitionIdAsString),
@@ -142,6 +142,10 @@ public class RoleResource extends AbstractSecurityResource {
if (roleName != null) {
roleDefinition.setName(roleName);
}
final Boolean transitive = (Boolean) body.get(KEY_TRANSITIVE);
if (transitive != null) {
roleDefinition.setTransitive(transitive);
}
getService().updateRoleDefinition(roleDefinition);
resp = Response.ok().build();
}