diff --git a/functional-test/pom.xml b/functional-test/pom.xml index 5f6fe3cabb..e47721c910 100644 --- a/functional-test/pom.xml +++ b/functional-test/pom.xml @@ -12,7 +12,7 @@ functional-test - 2.26.0 + 2.39.0 false @@ -62,6 +62,7 @@ **/AggregateTestSuite.java ${project.build.directory}/zanataindex + 2552 @@ -128,6 +129,18 @@ slf4j-api + + org.subethamail + subethasmtp-wiser + 1.2 + test + + + javax.mail + mail + test + + org.hamcrest hamcrest-core diff --git a/functional-test/src/main/java/org/zanata/page/BasePage.java b/functional-test/src/main/java/org/zanata/page/BasePage.java index 4dd281d0a8..1002ba85ce 100644 --- a/functional-test/src/main/java/org/zanata/page/BasePage.java +++ b/functional-test/src/main/java/org/zanata/page/BasePage.java @@ -35,6 +35,7 @@ import org.zanata.page.administration.AdministrationPage; import org.zanata.page.groups.VersionGroupsPage; import org.zanata.page.projects.ProjectsPage; +import org.zanata.page.utility.HelpPage; import org.zanata.page.utility.HomePage; import org.zanata.util.WebElementUtil; import com.google.common.base.Optional; @@ -185,4 +186,9 @@ public void clickLinkAfterAnimation(By locator) { executor.executeScript("arguments[0].click();", getDriver() .findElement(locator)); } + + public HelpPage goToHelp() { + getDriver().findElement(By.id("help_link")).click(); + return new HelpPage(getDriver()); + } } diff --git a/functional-test/src/main/java/org/zanata/page/utility/ContactAdminFormPage.java b/functional-test/src/main/java/org/zanata/page/utility/ContactAdminFormPage.java new file mode 100644 index 0000000000..bf99b9818e --- /dev/null +++ b/functional-test/src/main/java/org/zanata/page/utility/ContactAdminFormPage.java @@ -0,0 +1,43 @@ +package org.zanata.page.utility; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.zanata.page.BasePage; +import org.zanata.util.WebElementUtil; + +/** + * @author Patrick Huang pahuang@redhat.com + */ +public class ContactAdminFormPage extends BasePage { + @FindBy(id = "contactAdminForm:subjectField:subject") + private WebElement subjectField; + + @FindBy(id = "contactAdminForm:messageField:message") + private WebElement messageField; + + @FindBy(id = "contactAdminForm:send") + private WebElement sendButton; + + public ContactAdminFormPage(WebDriver driver) { + super(driver); + } + + public ContactAdminFormPage inputSubject(String subject) { + subjectField.clear(); + subjectField.sendKeys(subject); + return new ContactAdminFormPage(getDriver()); + } + + public ContactAdminFormPage inputMessage(String message) { + WebElementUtil + .setRichTextEditorContent(getDriver(), messageField, message); + return new ContactAdminFormPage(getDriver()); + } + + public HelpPage send() { + sendButton.click(); + return new HelpPage(getDriver()); + } +} diff --git a/functional-test/src/main/java/org/zanata/page/utility/HelpPage.java b/functional-test/src/main/java/org/zanata/page/utility/HelpPage.java new file mode 100644 index 0000000000..b88c3ba688 --- /dev/null +++ b/functional-test/src/main/java/org/zanata/page/utility/HelpPage.java @@ -0,0 +1,24 @@ +package org.zanata.page.utility; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.zanata.page.BasePage; + +/** + * @author Patrick Huang + * pahuang@redhat.com + */ +public class HelpPage extends BasePage { + @FindBy(linkText = "Contact Admin") + private WebElement contactAdminLink; + + public HelpPage(WebDriver driver) { + super(driver); + } + + public ContactAdminFormPage clickContactAdmin() { + contactAdminLink.click(); + return new ContactAdminFormPage(getDriver()); + } +} diff --git a/functional-test/src/main/java/org/zanata/util/WebElementUtil.java b/functional-test/src/main/java/org/zanata/util/WebElementUtil.java index 375142511f..ddaf6e0f2d 100644 --- a/functional-test/src/main/java/org/zanata/util/WebElementUtil.java +++ b/functional-test/src/main/java/org/zanata/util/WebElementUtil.java @@ -225,6 +225,24 @@ public List apply(@Nullable WebDriver input) { }); } + /** + * This method is used to set JSF rich text editor (KCEditor) content. + * @param driver web driver + * @param richEditorWrapperField the wrapper div of the editor + * @param content content wants to set + */ + public static void setRichTextEditorContent(WebDriver driver, + WebElement richEditorWrapperField, + String content) { + // This is how we can change JSF rich text editor content. + WebElement richTextEditorFrame = + richEditorWrapperField.findElement(By.tagName("iframe")); + driver.switchTo().frame(richTextEditorFrame); + ((JavascriptExecutor) driver) + .executeScript("document.body.innerHTML='" + content + "'"); + driver.switchTo().defaultContent(); + } + private static class WebElementToInnerHTMLFunction implements Function { private final WebDriver driver; diff --git a/functional-test/src/test/java/org/zanata/feature/misc/ContactAdminTest.java b/functional-test/src/test/java/org/zanata/feature/misc/ContactAdminTest.java new file mode 100644 index 0000000000..34f3541c6e --- /dev/null +++ b/functional-test/src/test/java/org/zanata/feature/misc/ContactAdminTest.java @@ -0,0 +1,77 @@ +package org.zanata.feature.misc; + +import javax.mail.internet.MimeMultipart; + +import org.hamcrest.Matchers; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.subethamail.wiser.Wiser; +import org.subethamail.wiser.WiserMessage; +import org.zanata.feature.DetailedTest; +import org.zanata.page.utility.ContactAdminFormPage; +import org.zanata.page.utility.DashboardPage; +import org.zanata.page.utility.HelpPage; +import org.zanata.util.AddUsersRule; +import org.zanata.util.PropertiesHolder; +import org.zanata.workflow.LoginWorkFlow; +import com.google.common.base.Throwables; + +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author Patrick Huang pahuang@redhat.com + */ +@Category(DetailedTest.class) +public class ContactAdminTest { + @Rule + public AddUsersRule addUsersRule = new AddUsersRule(); + private Wiser wiser = new Wiser(); + + @Before + public void setUp() { + String port = PropertiesHolder.getProperty("smtp.port"); + wiser.setPort(Integer.parseInt(port)); + wiser.start(); + } + + @After + public void cleanUp() { + wiser.stop(); + } + + @Test + public void testContactAdmin() { + DashboardPage dashboard = + new LoginWorkFlow().signIn("translator", "translator"); + ContactAdminFormPage contactAdminFormPage = + dashboard.goToHelp().clickContactAdmin(); + + HelpPage helpPage = + contactAdminFormPage.inputSubject("hello admin") + .inputMessage("I love Zanata").send(); + + assertThat( + helpPage.getNotificationMessage(), + Matchers.equalTo("Your message has been sent to the administrator")); + assertThat(wiser.getMessages(), Matchers.hasSize(1)); + WiserMessage wiserMessage = wiser.getMessages().get(0); + assertThat(wiserMessage.getEnvelopeReceiver(), + Matchers.equalTo("admin@example.com")); + + String content = getEmailContent(wiserMessage); + assertThat(content, Matchers.containsString("I love Zanata")); + } + + private static String getEmailContent(WiserMessage wiserMessage) { + try { + return ((MimeMultipart) wiserMessage.getMimeMessage().getContent()) + .getBodyPart(0).getContent().toString(); + } catch (Exception e) { + throw Throwables.propagate(e); + } + } +} diff --git a/functional-test/src/test/resources/conf/standalone.xml b/functional-test/src/test/resources/conf/standalone.xml index 2d629a9ca1..f11eafce05 100644 --- a/functional-test/src/test/resources/conf/standalone.xml +++ b/functional-test/src/test/resources/conf/standalone.xml @@ -242,6 +242,7 @@ + #{messages['jsf.ContactAdmin']} - +

#{messages['jsf.ContactAdmin']}