package org.keycloak.testsuite.console.roles; import org.jboss.arquillian.graphene.page.Page; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.keycloak.representations.idm.RoleRepresentation; import org.keycloak.testsuite.console.page.roles.CreateRole; import org.keycloak.testsuite.console.page.roles.RealmRoles; import org.keycloak.testsuite.console.page.roles.Role; import org.keycloak.testsuite.util.Timer; import static org.junit.Assert.*; import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlEquals; import static org.keycloak.testsuite.util.WaitUtils.pause; /** * * @author Petr Mensik * @author tkyjovsk */ public class RealmRolesTest extends AbstractRolesTest { @Page private RealmRoles realmRolesPage; @Page private CreateRole createRolePage; @Page private Role rolePage; private RoleRepresentation testRole; @Before public void beforeTestAddNewRole() { testRole = new RoleRepresentation("test_role", "role description", false); realmRolesPage.navigateTo(); } public void addRole(RoleRepresentation roleRep) { assertCurrentUrlEquals(realmRolesPage); realmRolesPage.table().addRole(); assertCurrentUrlEquals(createRolePage); createRolePage.form().setBasicAttributes(roleRep); createRolePage.form().save(); assertAlertSuccess(); createRolePage.form().setCompositeRoles(roleRep); // TODO add verification of notification message when KEYCLOAK-1497 gets resolved } public void updateRole(RoleRepresentation roleRep) { assertCurrentUrlEquals(realmRolesPage); realmRolesPage.table().editRole(roleRep.getName()); // assertCurrentUrl(role); // can't do this, role id needed as uri param rolePage.form().setBasicAttributes(roleRep); rolePage.form().save(); assertAlertSuccess(); rolePage.form().setCompositeRoles(roleRep); } public void assertBasicRoleAttributesEqual(RoleRepresentation r1, RoleRepresentation r2) { assertEquals(r1.getName(), r2.getName()); assertEquals(r1.getDescription(), r2.getDescription()); assertEquals(r1.isComposite(), r2.isComposite()); } @Test @Ignore public void crudRole() { addRole(testRole); configure().roles(); RoleRepresentation foundRole = realmRolesPage.table().findRole(testRole.getName()); // search & get role from table assertBasicRoleAttributesEqual(testRole, foundRole); realmRolesPage.table().editRole(testRole.getName()); foundRole = rolePage.form().getBasicAttributes(); assertBasicRoleAttributesEqual(testRole, foundRole); testRole.setDescription("updated role description"); rolePage.form().setDescription(testRole.getDescription()); rolePage.form().save(); assertAlertSuccess(); configure().roles(); foundRole = realmRolesPage.table().findRole(testRole.getName()); // search & get role from table assertBasicRoleAttributesEqual(testRole, foundRole); // delete from table realmRolesPage.table().deleteRole(testRole.getName()); modalDialog.cancel(); assertTrue(realmRolesPage.table().containsRole(testRole.getName())); realmRolesPage.table().deleteRole(testRole.getName()); modalDialog.confirmDeletion(); pause(250); assertFalse(realmRolesPage.table().containsRole(testRole.getName())); // add again addRole(testRole); // delete from page rolePage.form().delete(); modalDialog.confirmDeletion(); assertCurrentUrlEquals(realmRolesPage); } @Test @Ignore public void testAddRoleWithLongName() { String name = "hjewr89y1894yh98(*&*&$jhjkashd)*(&y8934h*&@#hjkahsdj"; addRole(new RoleRepresentation(name, "", false)); assertNotNull(realmRolesPage.table().findRole(name)); } @Test public void testAddExistingRole() { addRole(testRole); configure().roles(); realmRolesPage.table().addRole(); createRolePage.form().setBasicAttributes(testRole); createRolePage.form().save(); assertAlertDanger(); } public void createTestRoles(String namePrefix, int count) { Timer.DEFAULT.reset(); for (int i = 0; i < count; i++) { String roleName = String.format("%s%02d", namePrefix, i); RoleRepresentation rr = new RoleRepresentation(roleName, "", false); testRealmResource().roles().create(rr); } Timer.DEFAULT.reset("create " + count + " roles"); } // @Test public void rolesPagination() { createTestRoles("test_role_", 100); realmRolesPage.navigateTo(); pause(100000); } // @Test // public void addAndRemoveUserAndAssignRole() { // roleMappings.form().addAvailableRole("create-realm"); // assertFlashMessageSuccess(); // // roleMappings.form().removeAssignedRole("create-realm"); // assertFlashMessageSuccess(); // // users.navigateTo(); // users.table().deleteUser(testUsername); // } // @Test // this should be moved to users tests // public void testRoleIsAvailableForUsers() { // RoleRepresentation role = new RoleRepresentation("User role", ""); // roles.addRole(role); // flashMessage.waitUntilPresent(); // assertTrue(flashMessage.getText(), flashMessage.isSuccess()); // users.navigateTo(); // users.viewAllUsers(); // users.clickUser("admin"); // user.tabs().roleMappings(); // Select rolesSelect = new Select(driver.findElement(id("available"))); // assertEquals("User role should be present in admin role mapping", // role.getName(), rolesSelect.getOptions().get(0).getText()); // roles.navigateTo(); // roles.deleteRole(role); // } // // @Ignore//KEYCLOAK-1497 // @Test // public void testAddCompositeRole() { // UserRepresentation testUserRep = new UserRepresentation(); // testUserRep.setUsername("usercomposite"); // // RoleRepresentation compositeRole = new RoleRepresentation("compositeRole", ""); // RoleRepresentation subRole1 = new RoleRepresentation("subRole1", ""); // RoleRepresentation subRole2 = new RoleRepresentation("subRole2", ""); // List<RoleRepresentation> testRoles = new ArrayList<>(); // compositeRole.setComposite(true); // testRoles.add(compositeRole); // testRoles.add(subRole1); // testRoles.add(subRole2); // // //create roles and user // for (RoleRepresentation role : testRoles) { // roles.addRole(role); // flashMessage.waitUntilPresent(); // assertTrue(flashMessage.getText(), flashMessage.isSuccess()); // roles.navigateTo(); // assertEquals(role.getName(), roles.findRole(role.getName()).getName()); // } // users.navigateTo(); // createUser(testUserRep); // flashMessage.waitUntilPresent(); // assertTrue(flashMessage.getText(), flashMessage.isSuccess()); // // //adding subroles to composite role // roles.navigateTo(); // roles.findRole(compositeRole.getName()); // roles.clickRole(compositeRole); // roles.setCompositeRole(compositeRole); // roleMappings.addAvailableRole(subRole1.getName(), subRole2.getName()); // //flashMessage.waitUntilPresent(); // //assertTrue(flashMessage.getText(), flashMessage.isSuccess()); KEYCLOAK-1497 // // //check if subroles work as expected // users.navigateTo(); // users.findUser(testUserRep.getUsername()); // users.clickUser(testUserRep.getUsername()); // user.tabs().roleMappings(); // roleMappings.addAvailableRole(compositeRole.getName()); // assertTrue(roleMappings.isEffectiveRealmRolesComplete(compositeRole, subRole1, subRole2)); // // //delete everything // roles.navigateTo(); // roles.deleteRole(compositeRole); // roles.navigateTo(); // roles.deleteRole(subRole1); // roles.navigateTo(); // roles.deleteRole(subRole2); // try { // Thread.sleep(2000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // users.navigateTo(); // users.deleteUser(testUserRep.getUsername()); // } // }