/*
* JBoss, Home of Professional Open Source
*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.testsuite.console.page.clients;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.testsuite.console.page.AdminConsoleRealm;
import org.keycloak.testsuite.console.page.fragment.DataTable;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.ArrayList;
import java.util.List;
import static org.openqa.selenium.By.linkText;
import static org.openqa.selenium.By.tagName;
/**
*
* @author Filip Kisss
*/
public class Clients extends AdminConsoleRealm {
public static final String CREATE = "Create";
public static final String IMPORT = "Import";
public static final String EDIT = "Edit";
public static final String DELETE = "Delete";
@Override
public String getUriFragment() {
return super.getUriFragment() + "/clients";
}
@FindBy(tagName = "table")
private ClientsTable clientsTable;
public ClientsTable table() {
return clientsTable;
}
public class ClientsTable extends DataTable {
public List<ClientRepresentation> searchClients(String searchPattern) {
search(searchPattern);
return getClientsFromRows();
}
public void createClient() {
clickHeaderLink(CREATE);
}
public void importClient() {
clickHeaderLink(IMPORT);
}
public void clickClient(ClientRepresentation client) {
clickClient(client.getClientId());
}
public void clickClient(String clientId) {
body().findElement(linkText(clientId)).click();
}
public void editClient(String clientId) {
clickRowActionButton(getRowByLinkText(clientId), EDIT);
}
public void deleteClient(String clientId) {
clickRowActionButton(getRowByLinkText(clientId), DELETE);
}
public ClientRepresentation findClient(String clientId) {
List<ClientRepresentation> clients = searchClients(clientId);
if (clients.isEmpty()) {
return null;
} else {
assert 1 == clients.size();
return clients.get(0);
}
}
public List<ClientRepresentation> getClientsFromRows() {
List<ClientRepresentation> rows = new ArrayList<>();
for (WebElement row : rows()) {
ClientRepresentation client = getClientFromRow(row);
if (client != null) {
rows.add(client);
}
}
return rows;
}
public ClientRepresentation getClientFromRow(WebElement row) {
ClientRepresentation client = null;
if (row.isDisplayed()) {
client = new ClientRepresentation();
List<WebElement> tds = row.findElements(tagName("td"));
client.setClientId(tds.get(0).getText());
List<String> redirectUris = new ArrayList<>();
redirectUris.add(tds.get(2).getText()); // FIXME there can be more than 1 redirect uri
client.setRedirectUris(redirectUris);
}
return client;
}
}
}