From 69ecd10df6e387427c4cc2e5252dd02b73768674 Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Fri, 6 Mar 2015 13:10:13 +1000 Subject: [PATCH] Add test for setting a project language alias --- .../projectsettings/ProjectLanguagesTab.java | 27 +++++++++ .../java/org/zanata/util/LanguageList.java | 55 ++++++++++++++++--- .../project/EditProjectLanguagesTest.java | 21 +++++++ 3 files changed, 95 insertions(+), 8 deletions(-) diff --git a/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectLanguagesTab.java b/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectLanguagesTab.java index 9104703516..0e05412a34 100644 --- a/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectLanguagesTab.java +++ b/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectLanguagesTab.java @@ -168,4 +168,31 @@ public boolean apply(WebDriver driver) { return new ProjectLanguagesTab(getDriver()); } + + public ProjectLanguagesTab clickLanguageActionsDropdown(String locale) { + LanguageList.clickActionsDropdown(waitForWebElement(activeLocales), + locale); + return new ProjectLanguagesTab(getDriver()); + } + + public ProjectLanguagesTab clickAddAlias(String locale) { + LanguageList.clickAddAlias(waitForWebElement(activeLocales), locale); + return new ProjectLanguagesTab(getDriver()); + } + + public ProjectLanguagesTab enterAliasForLocale(String locale, String alias) { + LanguageList.enterAlias(waitForWebElement(activeLocales), + locale, alias); + return new ProjectLanguagesTab(getDriver()); + } + + public ProjectLanguagesTab saveLocaleAlias(String locale) { + LanguageList.setAlias(waitForWebElement(activeLocales), locale); + return new ProjectLanguagesTab(getDriver()); + } + + public String getAlias(String locale) { + return LanguageList.getAliasForLocale(waitForWebElement(activeLocales), + locale); + } } diff --git a/functional-test/src/main/java/org/zanata/util/LanguageList.java b/functional-test/src/main/java/org/zanata/util/LanguageList.java index f8b471abfb..aa28abbe0e 100644 --- a/functional-test/src/main/java/org/zanata/util/LanguageList.java +++ b/functional-test/src/main/java/org/zanata/util/LanguageList.java @@ -23,6 +23,7 @@ import com.google.common.base.Function; import com.google.common.collect.Lists; import org.openqa.selenium.By; +import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebElement; import java.util.List; @@ -36,7 +37,12 @@ public class LanguageList { private LanguageList(){} private static By localeId = By.className("js-locale-id"); + private static By localeAlias = By.className("js-locale-alias"); private static By languageActions = By.className("button--group"); + private static By dropdown = By.className("i--arrow-down"); + private static By aliasInput = By.className("form--inline__input"); + private static By setAlias = By.className("form--inline__addon"); + private static By addAliasLink = By.linkText("Add alias"); public static List getListedLocales(WebElement localeList) { return Lists.transform(getListElements(localeList), @@ -61,18 +67,51 @@ public static void toggleEnabled(WebElement localeListElement) { .findElements(By.tagName("button")).get(0).click(); } - public static boolean toggleLanguageInList(WebElement localeList, String localeId) { - boolean clickedLocale = false; + public static boolean toggleLanguageInList(WebElement localeList, + String locale) { + WebElement localeItem = getLocaleEntry(localeList, locale); + try { + LanguageList.toggleEnabled(localeItem); + } catch (NoSuchElementException nsee) { + return false; + } + return true; + } + + public static void clickActionsDropdown(WebElement list, String locale) { + getLocaleEntry(list, locale).findElement(dropdown).click(); + } + + public static void clickAddAlias(WebElement list, String locale) { + getLocaleEntry(list, locale).findElement(addAliasLink).click(); + } + + public static void enterAlias(WebElement localeList, String locale, + String alias) { + getLocaleEntry(localeList, locale).findElement(aliasInput) + .sendKeys(alias); + } + + public static void setAlias(WebElement localeList, String locale) { + getLocaleEntry(localeList, locale).findElement(setAlias).click(); + } + + public static String getAliasForLocale(WebElement list, String locale) { + return getLocaleEntry(list, locale).findElement(localeAlias) + .getText(); + } + + private static WebElement getLocaleEntry(WebElement list, String locale) { List listElements = LanguageList - .getListElements(localeList); + .getListElements(list); for (WebElement localeLi : listElements) { - if (LanguageList.getLocaleID(localeLi).equals(localeId)) { - LanguageList.toggleEnabled(localeLi); - clickedLocale = true; - break; + if (LanguageList.getLocaleID(localeLi).equals(locale)) { + return localeLi; } } - return clickedLocale; + throw new NoSuchElementException("Unable to find locale " + locale); + } + } diff --git a/functional-test/src/test/java/org/zanata/feature/project/EditProjectLanguagesTest.java b/functional-test/src/test/java/org/zanata/feature/project/EditProjectLanguagesTest.java index 4f8ca267aa..fc4f2be293 100644 --- a/functional-test/src/test/java/org/zanata/feature/project/EditProjectLanguagesTest.java +++ b/functional-test/src/test/java/org/zanata/feature/project/EditProjectLanguagesTest.java @@ -108,4 +108,25 @@ public void editProjectLanguages() throws Exception { .contains("en-US", "fr", "hi") .as("The enabled language list contains en-US, fr and hi"); } + + @Feature(summary = "The administrator can set an alias for a project " + + "language", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) + @Test + public void setLanguageAliasTest() { + ProjectLanguagesTab projectLanguagesTab = new ProjectWorkFlow() + .goToProjectByName("about fedora") + .gotoSettingsTab() + .gotoSettingsLanguagesTab() + .expectEnabledLocaleListCount(3); + projectLanguagesTab = projectLanguagesTab + .clickLanguageActionsDropdown("pl") + .clickAddAlias("pl") + .enterAliasForLocale("pl", "pl-PL") + .saveLocaleAlias("pl"); + + assertThat(projectLanguagesTab.getAlias("pl")) + .isEqualTo("pl-PL") + .as("The alias was set"); + } }