diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java index 3722006bc6d646e8267b2be293ea6e83ca12e337..f39acd459c3d032e00051859250d4c75e7da6ea2 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java @@ -4,30 +4,62 @@ import de.deadlocker8.budgetmaster.Main; import de.deadlocker8.budgetmaster.authentication.UserService; import de.deadlocker8.budgetmaster.integration.helpers.IntegrationTestHelper; import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTest; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestName; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; import org.junit.runner.RunWith; import org.openqa.selenium.WebDriver; -import org.springframework.beans.factory.annotation.Autowired; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; import java.io.File; import java.util.Arrays; import java.util.List; -@RunWith(SpringJUnit4ClassRunner.class) +@RunWith(SpringRunner.class) @SpringBootTest(classes = Main.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) @SeleniumTest public class ImportTest { - @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") - @Autowired private WebDriver driver; @LocalServerPort int port; + @Rule + public TestName name = new TestName(); + + @Rule + public TestWatcher testWatcher = new TestWatcher() + { + @Override + protected void finished(Description description) + { + driver.quit(); + } + + @Override + protected void failed(Throwable e, Description description) + { + IntegrationTestHelper.saveScreenshots(driver, name, SearchTest.class); + } + }; + + @Before + public void prepare() + { + FirefoxOptions options = new FirefoxOptions(); + options.setHeadless(true); + driver = new FirefoxDriver(options); + } @Test public void requestImport() { diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java index 1b4c17f45b01c613698ab12ee2e78bb8570ed813..f6a26953977c53e297afe9486e48862b14cd3acc 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java @@ -5,31 +5,64 @@ import de.deadlocker8.budgetmaster.authentication.UserService; import de.deadlocker8.budgetmaster.integration.helpers.IntegrationTestHelper; import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTest; import de.thecodelabs.utils.util.Localization; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestName; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; import org.junit.runner.RunWith; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.springframework.beans.factory.annotation.Autowired; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -@RunWith(SpringJUnit4ClassRunner.class) +@RunWith(SpringRunner.class) @SpringBootTest(classes = Main.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) @SeleniumTest public class LoginControllerTest { - @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") - @Autowired private WebDriver driver; @LocalServerPort int port; + @Rule + public TestName name = new TestName(); + + @Rule + public TestWatcher testWatcher = new TestWatcher() + { + @Override + protected void finished(Description description) + { + driver.quit(); + } + + @Override + protected void failed(Throwable e, Description description) + { + IntegrationTestHelper.saveScreenshots(driver, name, SearchTest.class); + } + }; + + @Before + public void prepare() + { + FirefoxOptions options = new FirefoxOptions(); + options.setHeadless(true); + driver = new FirefoxDriver(options); + } + @Test public void getLoginPage() { @@ -63,6 +96,7 @@ public class LoginControllerTest IntegrationTestHelper helper = new IntegrationTestHelper(driver, port); helper.start(); helper.login(UserService.DEFAULT_PASSWORD); + helper.hideBackupReminder(); WebElement label = driver.findElement(By.id("logo-home")); String expected = helper.getUrl() + "/images/Logo_with_text_medium_res.png"; @@ -75,6 +109,7 @@ public class LoginControllerTest IntegrationTestHelper helper = new IntegrationTestHelper(driver, port); helper.start(); helper.login(UserService.DEFAULT_PASSWORD); + helper.hideBackupReminder(); WebElement buttonLogout = driver.findElement(By.xpath("//body/ul/li/a[contains(text(), 'Logout')]")); buttonLogout.click(); diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/SearchTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/SearchTest.java index 5a003a6647ac695be038a870fe22d81632a8e311..1b4b3004e421f7c9321e041e422a4b6c207a2a5a 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/SearchTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/SearchTest.java @@ -7,7 +7,11 @@ import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTest; import de.thecodelabs.utils.util.Localization; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestName; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; import org.junit.runner.RunWith; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; @@ -39,6 +43,25 @@ public class SearchTest @LocalServerPort int port; + @Rule + public TestName name = new TestName(); + + @Rule + public TestWatcher testWatcher = new TestWatcher() + { + @Override + protected void finished(Description description) + { + driver.quit(); + } + + @Override + protected void failed(Throwable e, Description description) + { + IntegrationTestHelper.saveScreenshots(driver, name, SearchTest.class); + } + }; + @Before public void prepare() { @@ -61,11 +84,6 @@ public class SearchTest driver.findElement(By.id("buttonSearch")).click(); } - @After - public void adftet() { - driver.quit(); - } - @Test public void searchFromNavbar() { diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/IntegrationTestHelper.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/IntegrationTestHelper.java index 66d440e9c8a09c950236350ccae6a91bd2e5dc28..d6a0e17934404905787b9c4f6810928d995cc7df 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/IntegrationTestHelper.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/IntegrationTestHelper.java @@ -1,11 +1,14 @@ package de.deadlocker8.budgetmaster.integration.helpers; import de.thecodelabs.utils.util.Localization; -import org.openqa.selenium.By; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; - +import org.junit.rules.TestName; +import org.openqa.selenium.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import static org.junit.Assert.assertEquals; @@ -23,7 +26,7 @@ public class IntegrationTestHelper return text; } - private final static String BASE_URL = "https://localhost:"; + private final static String BASE_URL = "http://localhost:"; private WebDriver driver; private String url; @@ -123,8 +126,31 @@ public class IntegrationTestHelper assertEquals(sourceAccounts.get(i), IntegrationTestHelper.getTextNode(sourceAccount)); row.findElement(By.className("select-dropdown")).click(); - WebElement accountToSelect = row.findElement(By.xpath("//form/table/tbody/tr[" + (i+1) + "]/td[5]/div/div/ul/li/span[text()='" + account + "']")); + WebElement accountToSelect = row.findElement(By.xpath("//form/table/tbody/tr[" + (i + 1) + "]/td[5]/div/div/ul/li/span[text()='" + account + "']")); accountToSelect.click(); } } + + public static void saveScreenshots(WebDriver webDriver, TestName testName, Class testClass) + { + File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE); + + String className = testClass.getSimpleName(); + String methodName = testName.getMethodName(); + final Path destination = Paths.get("screenshots", className + "_" + methodName + "_" + screenshot.getName()); + + try + { + if(Files.notExists(destination.getParent())) + { + Files.createDirectories(destination.getParent()); + } + + Files.copy(screenshot.toPath(), destination); + } + catch(IOException e) + { + throw new RuntimeException(e); + } + } } diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestExecutionListener.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestExecutionListener.java index 742d3dba7254b40697217a95949170139240643f..335885a2aba383a4fb82e34a16e4bc0058cb5225 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestExecutionListener.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestExecutionListener.java @@ -40,22 +40,5 @@ public class SeleniumTestExecutionListener extends AbstractTestExecutionListener { e.printStackTrace(); } - -// if(testContext.getTestException() == null) -// { -// return; -// } -// File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE); -// -// String testName = testContext.getTestClass().getSimpleName(); -// String methodName = testContext.getTestMethod().getName(); -// final Path destination = Paths.get("screenshots", testName + "_" + methodName + "_" + screenshot.getName()); -// -// if(Files.notExists(destination.getParent())) -// { -// Files.createDirectories(destination.getParent()); -// } -// -// Files.copy(screenshot.toPath(), destination); } }