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

Commit

Permalink
add email testing infrastructure and add test
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick Huang committed Feb 10, 2014
1 parent 02bd79c commit fa21ac7
Show file tree
Hide file tree
Showing 9 changed files with 186 additions and 2 deletions.
15 changes: 14 additions & 1 deletion functional-test/pom.xml
Expand Up @@ -12,7 +12,7 @@
<name>functional-test</name>

<properties>
<selenium.version>2.26.0</selenium.version>
<selenium.version>2.39.0</selenium.version>

<!--Cargo Settings -->
<cargo.wait>false</cargo.wait>
Expand Down Expand Up @@ -62,6 +62,7 @@
<!-- this property can be used to control what test needs to be run by failsafe -->
<include.test.patterns>**/AggregateTestSuite.java</include.test.patterns>
<hibernate.search.default.indexBase>${project.build.directory}/zanataindex</hibernate.search.default.indexBase>
<smtp.port>2552</smtp.port>
</properties>

<dependencies>
Expand Down Expand Up @@ -128,6 +129,18 @@
<artifactId>slf4j-api</artifactId>
</dependency>

<dependency>
<groupId>org.subethamail</groupId>
<artifactId>subethasmtp-wiser</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
Expand Down
6 changes: 6 additions & 0 deletions functional-test/src/main/java/org/zanata/page/BasePage.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
}
}
@@ -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 <a
* href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
*/
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());
}
}
@@ -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
* <a href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
*/
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());
}
}
18 changes: 18 additions & 0 deletions functional-test/src/main/java/org/zanata/util/WebElementUtil.java
Expand Up @@ -225,6 +225,24 @@ public List<WebElement> 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<WebElement, String> {
private final WebDriver driver;
Expand Down
@@ -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 <a
* href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
*/
@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);
}
}
}
1 change: 1 addition & 0 deletions functional-test/src/test/resources/conf/standalone.xml
Expand Up @@ -242,6 +242,7 @@
<simple name="java:global/zanata/security/admin-users" value="admin" />
<simple name="java:global/zanata/email/default-from-address"
value="no-reply@zanata.org" />
<simple name="java:global/zanata/smtp/port" value="${smtp.port}" />
<simple name="java:global/zanata/files/document-storage-directory"
value="${project.build.directory}/zanata-documents" />
<lookup name="java:jboss/exported/zanata/files/document-storage-directory"
Expand Down
2 changes: 2 additions & 0 deletions functional-test/src/test/resources/setup.properties
Expand Up @@ -19,3 +19,5 @@ hibernate.connection.url=${ds.connection.url}
hibernate.connection.username=${ds.username}
hibernate.connection.password=${ds.password}
hibernate.search.default.indexBase=${hibernate.search.default.indexBase}

smtp.port=${smtp.port}
2 changes: 1 addition & 1 deletion zanata-war/src/main/webapp/help/contact_admin.xhtml
Expand Up @@ -13,7 +13,7 @@

<ui:define name="page_title">#{messages['jsf.ContactAdmin']}</ui:define>
<ui:define name="center_content">
<h:form>
<h:form id="contactAdminForm">
<s:token allowMultiplePosts="true"/>

<h1>#{messages['jsf.ContactAdmin']}</h1>
Expand Down

0 comments on commit fa21ac7

Please sign in to comment.