package org.keycloak.testsuite.console.realm;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.auth.page.AuthRealm;
import org.keycloak.testsuite.console.page.fragment.Dropdown;
import org.keycloak.testsuite.console.page.realm.ThemeSettings;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import static org.junit.Assert.*;
import static org.keycloak.testsuite.util.URLAssert.*;
/**
* @author Vaclav Muzikar <vmuzikar@redhat.com>
*/
public class InternationalizationTest extends AbstractRealmTest {
private static final String THEME_NAME = "internat-test";
private static final String LOCALE_CS_NAME = "Čeština";
private static final String LABEL_CS_PASSWORD = "Heslo";
private static final String LABEL_CS_REALM_SETTINGS = "Nastavení Realmu";
private static final String LABEL_CS_EDIT_ACCOUNT = "Upravit účet";
@Page
private ThemeSettings themeSettingsPage;
@FindBy(id = "kc-locale-dropdown")
private Dropdown localeDropdown;
@Before
public void beforeInternationalizationTest() {
RealmRepresentation realmRepresentation = testRealmResource().toRepresentation();
realmRepresentation.setAccountTheme(THEME_NAME);
realmRepresentation.setAdminTheme(THEME_NAME);
realmRepresentation.setEmailTheme(THEME_NAME);
realmRepresentation.setLoginTheme(THEME_NAME);
testRealmResource().update(realmRepresentation);
realmSettingsPage.navigateTo();
tabs().themes();
themeSettingsPage.setInternatEnabled(true);
themeSettingsPage.saveTheme();
assertAlertSuccess();
realmSettingsPage.setAdminRealm(AuthRealm.TEST);
deleteAllCookiesForTestRealm();
deleteAllCookiesForMasterRealm();
}
@After
public void afterInternationalizationTest() {
testContext.setAdminLoggedIn(false);
}
/**
* Change locale before login
*/
@Test
public void loginInternationalization() {
testRealmAdminConsolePage.navigateTo();
localeDropdown.selectByText(LOCALE_CS_NAME);
assertLocale(".//label[@for='password']", LABEL_CS_PASSWORD);
loginToTestRealmConsoleAs(testUser);
assertConsoleLocale(LABEL_CS_REALM_SETTINGS);
testRealmAccountPage.navigateTo();
assertAccountLocale(LABEL_CS_EDIT_ACCOUNT);
}
/**
* Change locale on the Account page
*/
@Test
public void accountInternationalization() {
testRealmAccountPage.navigateTo();
loginPage.form().login(testUser);
localeDropdown.selectByText(LOCALE_CS_NAME);
testRealmAccountPage.navigateTo();
assertAccountLocale(LABEL_CS_EDIT_ACCOUNT);
deleteAllCookiesForTestRealm();
loginToTestRealmConsoleAs(testUser);
assertConsoleLocale(LABEL_CS_REALM_SETTINGS);
}
private void assertConsoleLocale(String expected) {
assertCurrentUrlEquals(realmSettingsPage);
assertLocale(".//div[@class='nav-category'][1]/ul/li[1]//a", expected); // Realm Settings
}
private void assertAccountLocale(String expected) {
assertCurrentUrlEquals(testRealmAccountPage);
assertLocale(".//div[contains(@class,'content-area')]/div[@class='row']/div/h2", expected); // Edit Account
}
private void assertLocale(String xpathSelector, String expected) {
WebElement element = driver.findElement(By.xpath(xpathSelector));
assertLocale(element, expected);
}
private void assertLocale(WebElement element, String expected) {
assertEquals(expected, element.getText());
}
}