package eu.hurion.vaadin.heroku.it; import com.bsb.common.vaadin.embed.EmbedVaadinServer; import eu.hurion.vaadin.heroku.FilterMapBuilder; import eu.hurion.vaadin.heroku.MockApplicationListener; import eu.hurion.vaadin.heroku.MockFilter; import eu.hurion.vaadin.heroku.TestApplication; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import static eu.hurion.vaadin.heroku.FilterDefinitionBuilder.filterDefinition; import static eu.hurion.vaadin.heroku.VaadinForHeroku.forApplication; import static eu.hurion.vaadin.heroku.VaadinForHeroku.testServer; import static org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated; import static org.testng.Assert.assertEquals; public class VaadinForHerokuTest { public static final int HTTP_PORT = 4848; private final MockFilter filter = new MockFilter(); private final EmbedVaadinServer localServer = testServer(forApplication(TestApplication.class)) .withApplicationListener(MockApplicationListener.class) .withFilterDefinition(filterDefinition("mockFilter").withFilter(filter)) .withFilterMapping(FilterMapBuilder.mapFilter("mockFilter").toUrlPattern("/*")) .withHttpPort(HTTP_PORT) .build(); private final WebDriver driver = new SharedDriver(); @BeforeClass public void startup() { //check that the application listener is called when the application is started. MockApplicationListener.setShouldBeInvoked(false); MockApplicationListener.verify(); localServer.start(); MockApplicationListener.setShouldBeInvoked(true); MockApplicationListener.verify(); } @AfterClass public void shutdown() throws InterruptedException { Thread.sleep(200); localServer.stop(); } @Test public void checkLocalServer() { //check that the filter is called when a request is processed filter.verify(); driver.get("http://localhost:" + HTTP_PORT + "/?restartApplication"); final WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/3); final WebElement element = wait.until(presenceOfElementLocated(By.id(TestApplication.TEST_LABEL_ID))); assertEquals(element.getText(), TestApplication.TEST_LABEL); filter.setExpectedInvocation(true); filter.verify(); } }