Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Fix language tests
Browse files Browse the repository at this point in the history
Significant changes to language add/remove behaviour in projects.
Moves the test page behaviour to a utility class, as it is shared in
project and version settings.
  • Loading branch information
djansen-redhat committed Mar 5, 2015
1 parent bcb2e36 commit c2d1a43
Show file tree
Hide file tree
Showing 7 changed files with 173 additions and 162 deletions.
Expand Up @@ -20,18 +20,14 @@
*/
package org.zanata.page.projects.projectsettings;

import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.zanata.page.projects.ProjectBasePage;
import org.zanata.util.WebElementUtil;
import org.zanata.util.LanguageList;

import javax.annotation.Nullable;
import java.util.List;

/**
Expand All @@ -43,8 +39,10 @@
@Slf4j
public class ProjectLanguagesTab extends ProjectBasePage {

private By addNewLanguageField = By.id("languageAutocomplete-autocomplete__input");
private By settingsLanguagesForm = By.id("settings-languages-form");
private By activeLocales = By.id("active-locales-list");
private By inactiveLocales = By.id("available-locales-list");
private By disabledLocalesFilter = By.id(
"settings-languages-form:available-locales-filter-input");

public ProjectLanguagesTab(WebDriver driver) {
super(driver);
Expand All @@ -57,13 +55,7 @@ public ProjectLanguagesTab(WebDriver driver) {
*/
public List<String> getEnabledLocaleList() {
log.info("Query enabled locales");
return Lists.transform(getEnabledLocaleListElement(),
new Function<WebElement, String>() {
@Override
public String apply(WebElement li) {
return li.getText();
}
});
return LanguageList.getListedLocales(waitForWebElement(activeLocales));
}

public ProjectLanguagesTab expectEnabledLocaleListCount(final int count) {
Expand All @@ -76,20 +68,37 @@ public boolean apply(WebDriver input) {
return new ProjectLanguagesTab(getDriver());
}

private List<WebElement> getEnabledLocaleListElement() {
return waitForWebElement(settingsLanguagesForm)
.findElement(By.className("list--slat"))
.findElements(By.className("reveal--list-item"));
/**
* Get a list of disabled locales in this project
*
* @return String list of language/locale names
*/
public List<String> getDisabledLocaleList() {
log.info("Query enabled locales");
return LanguageList.getListedLocales(waitForWebElement(inactiveLocales));
}

public ProjectLanguagesTab expectDisabledLocaleListCount(final int count) {
waitForAMoment().until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver input) {
return getDisabledLocaleList().size() == count;
}
});
return new ProjectLanguagesTab(getDriver());
}

private List<WebElement> getDisabledLocaleListElement() {
return waitForWebElement(inactiveLocales)
.findElements(By.className("reveal"));
}

public ProjectLanguagesTab waitForLocaleListVisible() {
log.info("Wait for locale list visible");
waitForAMoment().until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
return driver.findElement(settingsLanguagesForm)
.findElement(By.className("list--slat"))
.isDisplayed();
return waitForWebElement(activeLocales).isDisplayed();
}
});
return new ProjectLanguagesTab(getDriver());
Expand All @@ -102,46 +111,31 @@ public boolean apply(WebDriver driver) {
*/
public ProjectLanguagesTab enterSearchLanguage(String languageQuery) {
log.info("Enter language search {}", languageQuery);
WebElementUtil.searchAutocomplete(getDriver(), "languageAutocomplete",
languageQuery);
waitForWebElement(disabledLocalesFilter).sendKeys(languageQuery);
return new ProjectLanguagesTab(getDriver());
}

/**
* Add a language to the languages list.
* Assumes that the search string has already been entered.
*
* @param localeId language to select
* @param searchLocaleId language to select
* @return new language settings, anticipating the language has been added.
*/
public ProjectLanguagesTab addLanguage(final String localeId) {
log.info("Click Add language on {}", localeId);
waitForAMoment().until(new Predicate<WebDriver>() {
public ProjectLanguagesTab addLanguage(final String searchLocaleId) {
log.info("Click Enable on {}", searchLocaleId);
String message = "can not find locale - " + searchLocaleId;
waitForAMoment().withMessage(message).until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
List<WebElement> searchResults =
WebElementUtil.getSearchAutocompleteResults(
getDriver(),
"settings-languages-form",
"languageAutocomplete");

boolean clickedLocale = false;
for (WebElement searchResult : searchResults) {
if (searchResult.getText().contains(localeId)) {
searchResult.click();
clickedLocale = true;
break;
}
}
return clickedLocale;
return LanguageList.toggleLanguageInList(
getDriver().findElement(inactiveLocales),
searchLocaleId);
}
});


refreshPageUntil(this, new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
return getEnabledLocaleList().contains(localeId);
return getEnabledLocaleList().contains(searchLocaleId);
}
});

Expand All @@ -151,29 +145,24 @@ public boolean apply(WebDriver driver) {
/**
* Click the removal link for a language.
*
* @param localeId language to remove
* @param searchLocaleId language to remove
* @return new language settings tab
*/
public ProjectLanguagesTab removeLocale(final String localeId) {
log.info("Click Remove on {}", localeId);
boolean removedLocale = false;
for (WebElement localeLi : getEnabledLocaleListElement()) {
String displayedLocaleId =
localeLi.findElement(By.xpath(".//span")).getText()
.replace("[", "").replace("]", "");
if (displayedLocaleId.equals(localeId)) {
localeLi.findElement(By.tagName("a")).click();
removedLocale = true;
break;
public ProjectLanguagesTab removeLocale(final String searchLocaleId) {
log.info("Click Disable on {}", searchLocaleId);
String message = "can not find locale - " + searchLocaleId;
waitForAMoment().withMessage(message).until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
return LanguageList.toggleLanguageInList(
getDriver().findElement(activeLocales),
searchLocaleId);
}
}
Preconditions.checkState(removedLocale, "can not remove locale: %s",
localeId);

});
refreshPageUntil(this, new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
return !getEnabledLocaleList().contains(localeId);
return !getEnabledLocaleList().contains(searchLocaleId);
}
});

Expand Down
Expand Up @@ -21,15 +21,12 @@
package org.zanata.page.projectversion.versionsettings;

import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.zanata.page.projectversion.VersionBasePage;
import org.zanata.util.WebElementUtil;
import org.zanata.util.LanguageList;

import java.util.List;

Expand All @@ -42,26 +39,15 @@
@Slf4j
public class VersionLanguagesTab extends VersionBasePage {

private By addNewLanguageField = By.id("languageAutocomplete-autocomplete__input");
private By languagesSettingForm = By.id("settings-languages-form");
private By activeLocales = By.id("active-locales-list");
private By inactiveLocales = By.id("available-locales-list");
private By disabledLocalesFilter = By.id("settings-languages-form:available-locales-filter-input");

public VersionLanguagesTab(WebDriver driver) {
super(driver);
}

/**
* Click the inherit project settings languages checkbox
*
* @return new language settings tab
*/
public VersionLanguagesTab clickInheritCheckbox() {
log.info("Click Inherit check box");
waitForWebElement(waitForWebElement(languagesSettingForm),
By.className("form__checkbox"))
.click();
return new VersionLanguagesTab(getDriver());
}

public VersionLanguagesTab waitForLocaleListVisible() {
log.info("Wait for locale list visible");
waitForAMoment().until(new Function<WebDriver, Boolean>() {
Expand All @@ -82,18 +68,7 @@ public Boolean apply(WebDriver driver) {
*/
public List<String> getEnabledLocaleList() {
log.info("Query enabled locales list");
return Lists.transform(getEnabledLocaleListElement(),
new Function<WebElement, String>() {
@Override
public String apply(WebElement li) {
return li.getText();
}
});
}

private List<WebElement> getEnabledLocaleListElement() {
return waitForWebElement(languagesSettingForm)
.findElements(By.xpath(".//ul/li[@class='reveal--list-item']"));
return LanguageList.getListedLocales(waitForWebElement(activeLocales));
}

public VersionLanguagesTab waitForLanguagesContains(String language) {
Expand All @@ -102,12 +77,6 @@ public VersionLanguagesTab waitForLanguagesContains(String language) {
return new VersionLanguagesTab(getDriver());
}

public VersionLanguagesTab waitForLanguagesNotContains(String language) {
log.info("Wait for languages does not contain {}", language);
waitForLanguageEntryExpected(language, false);
return new VersionLanguagesTab(getDriver());
}

private void waitForLanguageEntryExpected(final String language,
final boolean exists) {
waitForAMoment().until(new Function<WebDriver, Boolean>() {
Expand All @@ -119,27 +88,21 @@ public Boolean apply(WebDriver driver) {
}

public VersionLanguagesTab enterSearchLanguage(String localeQuery) {
log.info("Enter search language {}", localeQuery);
WebElementUtil.searchAutocomplete(getDriver(), "languageAutocomplete",
localeQuery);
log.info("Enter language search {}", localeQuery);
waitForWebElement(disabledLocalesFilter).sendKeys(localeQuery);
return new VersionLanguagesTab(getDriver());
}

public VersionLanguagesTab removeLocale(final String localeId) {
log.info("Click Remove on {}", localeId);
boolean removedLocale = false;
for (WebElement localeLi : getEnabledLocaleListElement()) {
String displayedLocaleId =
localeLi.findElement(By.xpath(".//span")).getText()
.replace("[", "").replace("]", "");
if (displayedLocaleId.equals(localeId)) {
localeLi.findElement(By.tagName("a")).click();
removedLocale = true;
break;
log.info("Click Disable on {}", localeId);
String message = "can not find locale - " + localeId;
waitForAMoment().withMessage(message).until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
return LanguageList.toggleLanguageInList(
getDriver().findElement(activeLocales), localeId);
}
}
Preconditions.checkState(removedLocale, "can not remove locale: %s",
localeId);
});

refreshPageUntil(this, new Predicate<WebDriver>() {
@Override
Expand All @@ -152,24 +115,13 @@ public boolean apply(WebDriver driver) {
}

public VersionLanguagesTab addLocale(final String localeId) {
log.info("Click to add {}", localeId);
log.info("Click Enable on {}", localeId);
String message = "can not find locale - " + localeId;
waitForAMoment().withMessage(message).until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
List<WebElement> searchResults =
WebElementUtil.getSearchAutocompleteResults(driver,
"settings-languages-form",
"languageAutocomplete");

for (WebElement searchResult : searchResults) {
if (searchResult.getText().contains(localeId)) {
slightPause();
searchResult.click();
return true;
}
}
return false;
return LanguageList.toggleLanguageInList(
getDriver().findElement(inactiveLocales), localeId);
}
});

Expand Down

0 comments on commit c2d1a43

Please sign in to comment.