diff --git a/functional-test/src/main/java/org/zanata/page/administration/ManageLanguageTeamMemberPage.java b/functional-test/src/main/java/org/zanata/page/administration/ManageLanguageTeamMemberPage.java
index ecb115c50b..b02ee81983 100644
--- a/functional-test/src/main/java/org/zanata/page/administration/ManageLanguageTeamMemberPage.java
+++ b/functional-test/src/main/java/org/zanata/page/administration/ManageLanguageTeamMemberPage.java
@@ -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;
@@ -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 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");
@@ -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;
+ }
+
+ }
}
diff --git a/functional-test/src/test/java/org/zanata/feature/language/JoinLanguageTeamTest.java b/functional-test/src/test/java/org/zanata/feature/language/JoinLanguageTeamTest.java
index b049bb559f..850a9728ec 100644
--- a/functional-test/src/test/java/org/zanata/feature/language/JoinLanguageTeamTest.java
+++ b/functional-test/src/test/java/org/zanata/feature/language/JoinLanguageTeamTest.java
@@ -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
@@ -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)
@@ -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");
}
}
diff --git a/functional-test/src/test/java/org/zanata/util/HasEmailRule.java b/functional-test/src/test/java/org/zanata/util/HasEmailRule.java
index 39f584d9f2..02041efea2 100644
--- a/functional-test/src/test/java/org/zanata/util/HasEmailRule.java
+++ b/functional-test/src/test/java/org/zanata/util/HasEmailRule.java
@@ -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;
@@ -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
* pahuang@redhat.com
*/
+@Slf4j
public class HasEmailRule implements TestRule {
private final Wiser wiser = new Wiser();
@@ -63,6 +69,53 @@ public List 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())