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

Commit

Permalink
rhbz1120457 - change test to test email notification
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick Huang committed Dec 3, 2014
1 parent 0c29bca commit 12ea662
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 8 deletions.
Expand Up @@ -22,6 +22,8 @@

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
Expand All @@ -31,8 +33,11 @@
import org.zanata.util.TableRow;
import org.zanata.util.WebElementUtil;

import java.io.Serializable;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
* @author Patrick Huang <a
Expand All @@ -54,7 +59,9 @@ public class ManageLanguageTeamMemberPage extends BasePage {

public static final int USERNAME_COLUMN = 0;
public static final int SEARCH_RESULT_PERSON_COLUMN = 0;
public static final int ISTRANSLATOR_COLUMN = 2;
public static final int IS_TRANSLATOR_COLUMN = 2;
public static final int IS_REVIEWER_COLUMN = 3;
public static final int IS_COORDINATOR_COLUMN = 4;

public ManageLanguageTeamMemberPage(WebDriver driver) {
super(driver);
Expand Down Expand Up @@ -100,7 +107,7 @@ public ManageLanguageTeamMemberPage clickAddTeamMember() {
}

public ManageLanguageTeamMemberPage searchPersonAndAddToTeam(
final String personName) {
final String personName, TeamPermission... permissions) {
log.info("Enter username search {}", personName);
// Wait for the search field under the add user panel
waitForWebElement(waitForElementExists(addUserPanel), addUserSearchInput)
Expand All @@ -114,11 +121,18 @@ public ManageLanguageTeamMemberPage searchPersonAndAddToTeam(
final String personUsername = firstRow.getCellContents()
.get(SEARCH_RESULT_PERSON_COLUMN);
log.info("Username to be added: {}", personUsername);
log.info("Set checked as translator");
Checkbox.of(firstRow.getCells()
.get(ISTRANSLATOR_COLUMN)
.findElement(By.tagName("input")))
.check();
// if permissions is empty, default add as translator
Set<TeamPermission> permissionToAdd = Sets.newHashSet(permissions);
permissionToAdd.add(TeamPermission.Translator);

for (TeamPermission permission : permissionToAdd) {
log.info("Set checked as {}", permission.name());
Checkbox.of(tryGetFirstRowInSearchPersonResult(personName)
.getCells()
.get(permission.columnIndex)
.findElement(By.tagName("input")))
.check();
}
log.info("Click Add Selected");
waitForWebElement(addSelectedButton).click();
log.info("Click Close");
Expand Down Expand Up @@ -163,4 +177,14 @@ public boolean apply(WebDriver driver) {
}
});
}

public static enum TeamPermission {
Translator(IS_TRANSLATOR_COLUMN), Reviewer(IS_REVIEWER_COLUMN), Coordinator(IS_COORDINATOR_COLUMN);
private final int columnIndex;

TeamPermission(int columnIndex) {
this.columnIndex = columnIndex;
}

}
}
Expand Up @@ -20,17 +20,22 @@
*/
package org.zanata.feature.language;

import java.util.concurrent.TimeUnit;

import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.subethamail.wiser.WiserMessage;
import org.zanata.feature.Feature;
import org.zanata.feature.testharness.ZanataTestCase;
import org.zanata.feature.testharness.TestPlan.DetailedTest;
import org.zanata.page.administration.ManageLanguageTeamMemberPage;
import org.zanata.util.HasEmailRule;
import org.zanata.util.SampleProjectRule;
import org.zanata.workflow.LoginWorkFlow;

import static org.assertj.core.api.Assertions.assertThat;
import static org.zanata.util.HasEmailRule.getEmailContent;

/**
* @author Damian Jansen
Expand All @@ -42,6 +47,9 @@ public class JoinLanguageTeamTest extends ZanataTestCase {
@Rule
public SampleProjectRule sampleProjectRule = new SampleProjectRule();

@Rule
public HasEmailRule hasEmailRule = new HasEmailRule();

@Feature(summary = "The administrator can add a member to a language team",
tcmsTestPlanIds = 5316, tcmsTestCaseIds = 181703)
@Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION)
Expand All @@ -52,10 +60,19 @@ public void translatorJoinsLanguageTeam() throws Exception {
.goToManageLanguagePage()
.manageTeamMembersFor("pl")
.clickAddTeamMember()
.searchPersonAndAddToTeam("translator");
.searchPersonAndAddToTeam("translator",
ManageLanguageTeamMemberPage.TeamPermission.Translator,
ManageLanguageTeamMemberPage.TeamPermission.Reviewer);

assertThat(manageTeamMemberPage.getMemberUsernames())
.contains("translator")
.as("Translator is a listed member of the pl team");
assertThat(hasEmailRule.emailsArrivedWithinTimeout(1, 5,
TimeUnit.SECONDS))
.isTrue();
WiserMessage emailMessage = hasEmailRule.getMessages().get(0);
assertThat(getEmailContent(emailMessage))
.contains(
"Administrator(admin@example.com) has changed your permission");
}
}
53 changes: 53 additions & 0 deletions functional-test/src/test/java/org/zanata/util/HasEmailRule.java
Expand Up @@ -21,6 +21,9 @@
package org.zanata.util;

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import javax.mail.internet.MimeMultipart;

Expand All @@ -30,11 +33,14 @@
import org.subethamail.wiser.Wiser;
import org.subethamail.wiser.WiserMessage;
import com.google.common.base.Throwables;
import com.google.common.util.concurrent.Uninterruptibles;
import lombok.extern.slf4j.Slf4j;

/**
* @author Patrick Huang
* <a href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
*/
@Slf4j
public class HasEmailRule implements TestRule {
private final Wiser wiser = new Wiser();

Expand Down Expand Up @@ -63,6 +69,53 @@ public List<WiserMessage> getMessages() {
return wiser.getMessages();
}

/**
* Email may arrive a little bit late therefore this method can be used to
* poll and wait until timeout.
*
* @param expectedEmailNum
* expected arriving email numbers
* @param timeoutDuration
* timeout duration
* @param timeoutUnit
* timeout time unit
* @return true if the expected number of emails has arrived or false if it
* fails within the timeout period
*/
public boolean emailsArrivedWithinTimeout(final int expectedEmailNum,
final long timeoutDuration, final TimeUnit timeoutUnit) {
final CountDownLatch countDownLatch = new CountDownLatch(1);

// poll every half second
final int sleepFor = 500;
final TimeUnit sleepUnit = TimeUnit.MILLISECONDS;
final long sleepTime = sleepUnit.convert(sleepFor, sleepUnit);
final long timeoutTime = sleepUnit.convert(timeoutDuration, timeoutUnit);
Runnable runnable = new Runnable() {

@Override
public void run() {
long slept = 0;
while (wiser.getMessages().size() < expectedEmailNum
&& slept < timeoutTime) {

log.debug("current arrived email:{}", wiser.getMessages()
.size());
Uninterruptibles.sleepUninterruptibly(sleepFor, sleepUnit);
slept += sleepTime;
}
countDownLatch.countDown();
}
};
Executors.newFixedThreadPool(1).submit(runnable);
try {
return countDownLatch.await(timeoutDuration, timeoutUnit);
} catch (InterruptedException e) {
log.warn("interrupted", e);
return wiser.getMessages().size() == expectedEmailNum;
}
}

public static String getEmailContent(WiserMessage wiserMessage) {
try {
return ((MimeMultipart) wiserMessage.getMimeMessage().getContent())
Expand Down

0 comments on commit 12ea662

Please sign in to comment.