package it.com.atlassian.labs.speakeasy; import com.atlassian.pageobjects.Page; import com.atlassian.pageobjects.binder.WaitUntil; import com.atlassian.pageobjects.elements.ElementBy; import com.atlassian.pageobjects.elements.PageElement; import com.atlassian.webdriver.AtlassianWebDriver; import org.apache.commons.lang.StringUtils; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import javax.inject.Inject; import java.util.List; import java.util.Set; import static com.atlassian.pageobjects.elements.query.Poller.waitUntilTrue; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Sets.newHashSet; /** * */ public class AdminPage implements Page { @Inject private AtlassianWebDriver driver; @ElementBy(id = "sp-edit") private PageElement editButton; public String getUrl() { return "/plugins/servlet/speakeasy/admin"; } @WaitUntil public void init() { waitUntilTrue(editButton.timed().isPresent()); } public EditView edit() { editButton.click(); driver.waitUntilElementIsVisible(By.id("sp-ADMINS_ENABLE-edit")); return new EditView(); } public Set<String> getAccessGroups() { return newHashSet(driver.findElement(By.id("sp-access-groups-view")).getText().split("\\s*,\\s*")); } public Set<String> getAuthorGroups() { return newHashSet(driver.findElement(By.id("sp-author-groups-view")).getText().split("\\s*,\\s*")); } public List<String> search(String q) { //driver.findElement(By.id("sp-search-tab")).click(); WebElement searchField = driver.findElement(By.id("sp-search-field")); searchField.sendKeys(q); final WebElement submitButton = driver.findElement(By.id("sp-search-submit")); submitButton.click(); driver.waitUntilElementIsNotLocatedAt(By.tagName("img"), submitButton); List<String> keys = newArrayList(); for (WebElement e : driver.findElement(By.id("sp-search-results")).findElements(By.className("sp-result-key"))) { keys.add(e.getText()); } return keys; } public class EditView { public EditView allowAdmins(boolean val) { toggle(By.id("sp-ADMINS_ENABLE-edit"), val); return this; } public AdminPage save() { driver.findElement(By.id("sp-save")).click(); driver.waitUntilElementIsVisible(By.id("sp-edit")); return AdminPage.this; } public EditView setAuthorGroups(Set<String> groups) { final WebElement textarea = driver.findElement(By.id("sp-author-groups-edit")); textarea.clear(); textarea.sendKeys(StringUtils.join(groups, "\n")); return this; } public EditView setAccessGroups(Set<String> groups) { final WebElement textarea = driver.findElement(By.id("sp-access-groups-edit")); textarea.clear(); textarea.sendKeys(StringUtils.join(groups, "\n")); return this; } private void toggle(By locator, boolean val) { WebElement cb = driver.findElement(locator); if ((cb.isSelected() && !val) || (!cb.isSelected() && val)) { cb.click(); } } } }