package it.com.atlassian.labs.speakeasy;
import com.atlassian.pageobjects.TestedProduct;
import com.atlassian.pageobjects.page.HomePage;
import com.atlassian.pageobjects.page.LoginPage;
import com.atlassian.webdriver.pageobjects.WebDriverTester;
import com.dumbster.smtp.SimpleSmtpServer;
import com.dumbster.smtp.SmtpMessage;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import javax.mail.MessagingException;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import static it.com.atlassian.labs.speakeasy.ExtensionBuilder.buildSimplePluginFile;
import static it.com.atlassian.labs.speakeasy.MailUtils.assertEmailExists;
import static it.com.atlassian.labs.speakeasy.ProductUtils.flushMailQueue;
import static java.util.Arrays.asList;
import static org.junit.Assert.*;
/**
*
*/
public class TestFeedback
{
private static TestedProduct<?> product = OwnerOfTestedProduct.INSTANCE;
private SimpleSmtpServer mailServer;
@Before
public void login()
{
product.visit(LoginPage.class).loginAsSysAdmin(SpeakeasyUserPage.class);
}
@After
public void logout()
{
((WebDriverTester)product.getTester()).getDriver().manage().deleteAllCookies();
}
@Before
public void startMailServer() throws IOException
{
// starting it this way as we don't want to wait for a open socket
mailServer = new SimpleSmtpServer(2525);
Thread t = new Thread(mailServer);
t.start();
flushMailQueue(product.getProductInstance());
mailServer.stop();
// starting it this way as we don't want to wait for a open socket
mailServer = new SimpleSmtpServer(2525);
t = new Thread(mailServer);
t.start();
}
@After
public void stopMailServer()
{
mailServer.stop();
}
@Test
public void testFeedbackInSpeakeasyUser() throws IOException, MessagingException
{
product.getPageBinder().bind(SpeakeasyUserPage.class)
.openInstallDialog()
.uploadPlugin(buildSimplePluginFile("feedback", "Feedback collector"));
logout();
List<String> messages = product.visit(LoginPage.class)
.login("barney", "barney", SpeakeasyUserPage.class)
.openFeedbackDialog("feedback")
.message("Good stuff")
.send(SpeakeasyUserPage.class)
.getSuccessMessages();
assertEquals(1, messages.size());
assertTrue(messages.get(0).contains("notified successfully"));
assertEmailExists(mailServer, "admin@example.com", "Barney User has feedback for your Speakeasy extension", asList(
"'Feedback collector'",
"location : ",
"Good stuff"));
logout();
product.visit(LoginPage.class)
.loginAsSysAdmin(SpeakeasyUserPage.class)
.uninstallPlugin("feedback");
}
@Test
public void testReportBroken() throws IOException, MessagingException
{
product.getPageBinder().bind(SpeakeasyUserPage.class)
.openInstallDialog()
.uploadPlugin(buildSimplePluginFile("broken", "Broken extension"));
logout();
List<String> messages = product.visit(LoginPage.class)
.login("barney", "barney", SpeakeasyUserPage.class)
.reportBroken("broken")
.message("Good stuff")
.send(SpeakeasyUserPage.class)
.getSuccessMessages();
assertEquals(1, messages.size());
assertTrue(messages.get(0).contains("notified successfully"));
assertEmailExists(mailServer, "admin@example.com", "Barney User has reported your Speakeasy extension as broken", asList(
"'Broken extension'",
"location : ",
"Good stuff"));
logout();
product.visit(LoginPage.class)
.loginAsSysAdmin(SpeakeasyUserPage.class)
.uninstallPlugin("broken");
}
}