package org.keycloak.testsuite.console.clients;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.Before;
import org.junit.Test;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;
import org.keycloak.testsuite.console.page.clients.roles.ClientRole;
import org.keycloak.testsuite.console.page.clients.roles.ClientRoles;
import org.keycloak.testsuite.console.page.clients.roles.CreateClientRole;
import org.keycloak.testsuite.console.page.users.User;
import org.keycloak.testsuite.console.page.users.UserRoleMappingsForm;
import org.keycloak.testsuite.util.URLAssert;
import java.util.List;
import static org.junit.Assert.*;
import static org.keycloak.testsuite.auth.page.login.Login.OIDC;
import static org.keycloak.testsuite.console.clients.AbstractClientTest.createClientRep;
/**
* Created by fkiss.
*/
public class ClientRolesTest extends AbstractClientTest {
private String id;
private final String TEST_CLIENT_ROLE_NAME = "test-client-role";
@Page
private ClientRoles clientRolesPage;
@Page
private CreateClientRole createClientRolePage;
@Page
private ClientRole clientRolePage;
@Page
private User userPage; // note: cannot call navigateTo() unless user id is set
@Page
private UserRoleMappingsForm userRolesPage;
@Before
public void beforeClientRolesTest() {
ClientRepresentation newClient = createClientRep(TEST_CLIENT_ID, OIDC);
testRealmResource().clients().create(newClient).close();
id = findClientByClientId(TEST_CLIENT_ID).getId();
clientPage.setId(id);
clientRolePage.setId(id);
clientRolesPage.setId(id);
createClientRolePage.setId(id);
clientPage.navigateTo();
}
public void addNewClientRole(RoleRepresentation roleRep) {
clientRolesPage.roles().addRole();
createClientRolePage.form().setBasicAttributes(roleRep);
createClientRolePage.form().save();
assertAlertSuccess();
createClientRolePage.form().setCompositeRoles(roleRep);
// TODO add verification of notification message when KEYCLOAK-1497 gets resolved
}
@Test
public void testCRUDClientRole() {
RoleRepresentation newRole = new RoleRepresentation(TEST_CLIENT_ROLE_NAME, "description", false);
clientPage.tabs().roles();
addNewClientRole(newRole);
List<RoleRepresentation> clientRoles = testRealmResource().clients().get(id).roles().list();
assertEquals("Client roles should contain exactly 1 role.", 1, clientRoles.size());
RoleRepresentation role = clientRoles.get(0);
assertEquals(TEST_CLIENT_ROLE_NAME, role.getName());
assertEquals("description", role.getDescription());
assertFalse(role.isScopeParamRequired());
assertFalse(role.isComposite());
assertNull(role.getComposites());
//edit
clientRolesPage.navigateTo();
clientRolesPage.roles().editRole(TEST_CLIENT_ROLE_NAME);
clientRolePage.setRoleId(role.getId());
URLAssert.assertCurrentUrlEquals(clientRolePage);
//delete
clientRolePage.delete();
assertAlertSuccess();
assertTrue("Role should be deleted.", testRealmResource().clients().get(id).roles().list().isEmpty());
}
// @Test
// @Jira("KEYCLOAK-1497")
// public void testAddClientRoleToUser() {
// ClientRepresentation newClient = createClientRepresentation("test-client2", "http://example.com/*");
// RoleRepresentation newRole = new RoleRepresentation("client-role2", "");
// String testUsername = "test-user2";
// UserRepresentation newUser = new UserRepresentation();
// newUser.setUsername(testUsername);
// newUser.credential(PASSWORD, "pass");
//
// createClient(newClient);
// assertFlashMessageSuccess();
//
// client.tabs().roles();
// addClientRole(newRole);
// assertFlashMessageSuccess();
//
// clientRole.backToClientRolesViaBreadcrumb();
// assertFalse(clientRoles.table().searchRoles(newRole.getName()).isEmpty());
//
// users.navigateTo();
// createUser(newUser);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
//
// users.navigateTo();
// users.findUser(testUsername);
// users.clickUser(testUsername);
//
// user.tabs().roleMappings();
// roleMappings.selectClientRole(newClient.getClientId());
// roleMappings.addAvailableClientRole(newRole.getName());
// //flashMessage.waitUntilPresent();
// //assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// //KEYCLOAK-1497
// assertTrue(roleMappings.isAssignedClientRole(newRole.getName()));
//
// users.navigateTo();
// users.deleteUser(testUsername);
//
// clients.navigateTo();
// clients.deleteClient(newClient.getClientId());
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// assertNull(clients.findClient(newClient.getClientId()));
// }
//
// @Test
// @Jira("KEYCLOAK-1496, KEYCLOAK-1497")
// @Ignore // TODO use REST to create test data (user/roles)
// public void testAddCompositeRealmClientRoleToUser() {
// ClientRepresentation newClient = createClientRepresentation("test-client3", "http://example.com/*");
// RoleRepresentation clientCompositeRole = new RoleRepresentation("client-composite-role", "");
// String testUsername = "test-user3";
// UserRepresentation newUser = new UserRepresentation();
// newUser.setUsername(testUsername);
// newUser.credential(PASSWORD, "pass");
//
// RoleRepresentation subRole1 = new RoleRepresentation("sub-role1", "");
// RoleRepresentation subRole2 = new RoleRepresentation("sub-role2", "");
// List<RoleRepresentation> testRoles = new ArrayList<>();
// clientCompositeRole.setComposite(true);
// testRoles.add(subRole1);
// testRoles.add(subRole2);
//
// //create sub-roles
// configure().roles();
// for (RoleRepresentation role : testRoles) {
// realmRoles.addRole(role);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// configure().roles();
// assertEquals(role.getName(), realmRoles.findRole(role.getName()).getName());
// }
//
// //create client
// clients.navigateTo();
// createClient(newClient);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
//
// //add client role
// configure().roles();
// realmRoles.addRole(clientCompositeRole);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
//
// //add realm composite roles
// realmRoles.setCompositeRole(clientCompositeRole);
// roleMappings.addAvailableRole(subRole1.getName(), subRole2.getName());
// //flashMessage.waitUntilPresent();
// //assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// //KEYCLOAK-1497
//
// //create user
// users.navigateTo();
// createUser(newUser);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
//
// //add client role to user and verify
// users.navigateTo();
// users.findUser(testUsername);
// users.clickUser(testUsername);
//
// user.tabs().roleMappings();
// roleMappings.selectClientRole(newClient.getClientId());
// roleMappings.addAvailableClientRole(clientCompositeRole.getName());
// //flashMessage.waitUntilPresent();
// //assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// //KEYCLOAK-1497
// assertTrue(roleMappings.isAssignedClientRole(clientCompositeRole.getName()));
// assertTrue(roleMappings.isEffectiveRealmRolesComplete(subRole1, subRole2)); //KEYCLOAK-1496
// assertTrue(roleMappings.isEffectiveClientRolesComplete(clientCompositeRole));
//
// //delete everything
// users.navigateTo();
// users.deleteUser(testUsername);
//
// configure().roles();
// realmRoles.deleteRole(subRole1);
// configure().roles();
// realmRoles.deleteRole(subRole2);
//
// clients.navigateTo();
// clients.deleteClient(newClient.getClientId());
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// assertNull(clients.findClient(newClient.getClientId()));
// }
//
// @Test
// @Jira("KEYCLOAK-1504, KEYCLOAK-1497")
// public void testAddCompositeClientRoleToUser() {
// ClientRepresentation newClient = createClientRepresentation("test-client4", "http://example.com/*");
// RoleRepresentation clientCompositeRole = new RoleRepresentation("client-composite-role2", "");
// String testUsername = "test-user4";
// UserRepresentation newUser = new UserRepresentation();
// newUser.setUsername(testUsername);
// newUser.credential(PASSWORD, "pass");
//
// RoleRepresentation subRole1 = new RoleRepresentation("client-sub-role1", "");
// RoleRepresentation subRole2 = new RoleRepresentation("client-sub-role2", "");
// List<RoleRepresentation> testRoles = new ArrayList<>();
// clientCompositeRole.setComposite(true);
// testRoles.add(clientCompositeRole);
// testRoles.add(subRole1);
// testRoles.add(subRole2);
//
// //create client
// createClient(newClient);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
//
// //create sub-roles
// configure().roles();
// for (RoleRepresentation role : testRoles) {
// clients.navigateTo();
// clients.clickClient(newClient.getClientId());
// configure().roles();
// realmRoles.addRole(role);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// }
//
// //add client composite roles
// clients.navigateTo();
// clients.clickClient(newClient);
// configure().roles();
// realmRoles.clickRole(clientCompositeRole);
// realmRoles.setCompositeRole(clientCompositeRole);
// roleMappings.selectClientRole(newClient.getClientId());
// roleMappings.addAvailableClientRole(subRole1.getName(), subRole2.getName());
// //flashMessage.waitUntilPresent();
// //assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// //KEYCLOAK-1504, KEYCLOAK-1497
//
// //create user
// users.navigateTo();
// createUser(newUser);
// flashMessage.waitUntilPresent();
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
//
// //add client role to user and verify
// users.navigateTo();
// users.findUser(testUsername);
// users.clickUser(testUsername);
//
// user.tabs().roleMappings();
// roleMappings.selectClientRole(newClient.getClientId());
// roleMappings.addAvailableClientRole(clientCompositeRole.getName());
// assertTrue(roleMappings.isAssignedClientRole(clientCompositeRole.getName()));
// assertTrue(roleMappings.isEffectiveClientRolesComplete(clientCompositeRole, subRole1, subRole2));
//
// //delete everything
// users.navigateTo();
// users.deleteUser(testUsername);
//
// configure().roles();
// realmRoles.deleteRole(subRole1);
// configure().roles();
// realmRoles.deleteRole(subRole2);
//
// clients.navigateTo();
// clients.deleteClient(newClient.getClientId());
// assertTrue(flashMessage.getText(), flashMessage.isSuccess());
// assertNull(clients.findClient(newClient.getClientId()));
// }
}