From 2339be51914d83e4075b7d80d670e6581a3f148e Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 30 Apr 2019 21:49:27 +0200 Subject: [PATCH] #431 - refactored tests; added first selenium test --- pom.xml | 20 ++++++++ .../integration/IntegrationTestHelper.java | 20 ++++++++ .../integration/LoginControllerTest.java | 50 +++++++++++++++++++ .../{ => unit}/TransactionRepositoryTest.java | 2 +- .../database/DatabaseImportTest.java | 2 +- .../database/DatabaseParser_v3Test.java | 4 +- .../{ => unit}/database/LegacyParserTest.java | 9 ++-- .../repeating/RepeatingOptionTest.java | 3 +- 8 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 src/test/java/de/deadlocker8/budgetmaster/integration/IntegrationTestHelper.java create mode 100644 src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java rename src/test/java/de/deadlocker8/budgetmaster/{ => unit}/TransactionRepositoryTest.java (99%) rename src/test/java/de/deadlocker8/budgetmaster/{ => unit}/database/DatabaseImportTest.java (99%) rename src/test/java/de/deadlocker8/budgetmaster/{ => unit}/database/DatabaseParser_v3Test.java (97%) rename src/test/java/de/deadlocker8/budgetmaster/{ => unit}/database/LegacyParserTest.java (98%) rename src/test/java/de/deadlocker8/budgetmaster/{ => unit}/repeating/RepeatingOptionTest.java (98%) diff --git a/pom.xml b/pom.xml index 24ae19c68..8033128a6 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,8 @@ <materializecss.version>1.0.0</materializecss.version> <fontawesome.version>5.0.10</fontawesome.version> <sortablejs.version>1.8.1</sortablejs.version> + <webdrivermanager.version>2.2.1</webdrivermanager.version> + <selenium.version>3.141.59</selenium.version> <app.versionDate>${maven.build.timestamp}</app.versionDate> <maven.build.timestamp.format>dd.MM.yy</maven.build.timestamp.format> @@ -181,6 +183,24 @@ <artifactId>sortablejs</artifactId> <version>${sortablejs.version}</version> </dependency> + <dependency> + <groupId>io.github.bonigarcia</groupId> + <artifactId>webdrivermanager</artifactId> + <version>${webdrivermanager.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-api</artifactId> + <version>${selenium.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-firefox-driver</artifactId> + <version>${selenium.version}</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/IntegrationTestHelper.java b/src/test/java/de/deadlocker8/budgetmaster/integration/IntegrationTestHelper.java new file mode 100644 index 000000000..61b74c81e --- /dev/null +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/IntegrationTestHelper.java @@ -0,0 +1,20 @@ +package de.deadlocker8.budgetmaster.integration; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class IntegrationTestHelper +{ + public static String getTextNode(WebElement e) + { + String text = e.getText().trim(); + List<WebElement> children = e.findElements(By.xpath("./*")); + for(WebElement child : children) + { + text = text.replaceFirst(child.getText(), "").trim(); + } + return text; + } +} diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java new file mode 100644 index 000000000..667368b40 --- /dev/null +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java @@ -0,0 +1,50 @@ +package de.deadlocker8.budgetmaster.integration; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +public class LoginControllerTest +{ + private WebDriver driver; + + @Before + public void before() + { + WebDriverManager.firefoxdriver().setup(); + driver = new FirefoxDriver(); + } + + @Test + public void getSearchPage() + { + driver.get("https://localhost:9000"); + WebElement input = driver.findElement(By.id("login-password")); + assertNotNull(input); + + WebElement label = driver.findElement(By.cssSelector(".input-field label")); + assertEquals("Password", label.getText()); + + WebElement button = driver.findElement(By.tagName("button")); + assertEquals("Login", IntegrationTestHelper.getTextNode(button)); + } + + @After + public void closeBrowser() + { + driver.close(); + } +} \ No newline at end of file diff --git a/src/test/java/de/deadlocker8/budgetmaster/TransactionRepositoryTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionRepositoryTest.java similarity index 99% rename from src/test/java/de/deadlocker8/budgetmaster/TransactionRepositoryTest.java rename to src/test/java/de/deadlocker8/budgetmaster/unit/TransactionRepositoryTest.java index 2328d7c93..c4a7ac951 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/TransactionRepositoryTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionRepositoryTest.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster; +package de.deadlocker8.budgetmaster.unit; import de.deadlocker8.budgetmaster.accounts.AccountRepository; import de.deadlocker8.budgetmaster.categories.CategoryRepository; diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseImportTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseImportTest.java similarity index 99% rename from src/test/java/de/deadlocker8/budgetmaster/database/DatabaseImportTest.java rename to src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseImportTest.java index b8b8b9fb4..16a39b397 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseImportTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseImportTest.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.database; +package de.deadlocker8.budgetmaster.unit.database; import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.accounts.AccountType; diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v3Test.java similarity index 97% rename from src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java rename to src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v3Test.java index bc2537e99..21062266c 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v3Test.java @@ -1,9 +1,11 @@ -package de.deadlocker8.budgetmaster.database; +package de.deadlocker8.budgetmaster.unit.database; import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.accounts.AccountType; import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.categories.CategoryType; +import de.deadlocker8.budgetmaster.database.Database; +import de.deadlocker8.budgetmaster.database.DatabaseParser_v3; import de.deadlocker8.budgetmaster.tags.Tag; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/LegacyParserTest.java similarity index 98% rename from src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java rename to src/test/java/de/deadlocker8/budgetmaster/unit/database/LegacyParserTest.java index cd2dee408..6a9027c1e 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/LegacyParserTest.java @@ -1,17 +1,18 @@ -package de.deadlocker8.budgetmaster.database; +package de.deadlocker8.budgetmaster.unit.database; -import de.deadlocker8.budgetmaster.database.legacy.LegacyParser; import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.accounts.AccountType; import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.categories.CategoryType; -import de.deadlocker8.budgetmaster.tags.Tag; -import de.deadlocker8.budgetmaster.transactions.Transaction; +import de.deadlocker8.budgetmaster.database.Database; +import de.deadlocker8.budgetmaster.database.legacy.LegacyParser; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndDate; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndNever; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierMonths; +import de.deadlocker8.budgetmaster.tags.Tag; +import de.deadlocker8.budgetmaster.transactions.Transaction; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.junit.Test; diff --git a/src/test/java/de/deadlocker8/budgetmaster/repeating/RepeatingOptionTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/repeating/RepeatingOptionTest.java similarity index 98% rename from src/test/java/de/deadlocker8/budgetmaster/repeating/RepeatingOptionTest.java rename to src/test/java/de/deadlocker8/budgetmaster/unit/repeating/RepeatingOptionTest.java index 10ea6eb12..5513c067b 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/repeating/RepeatingOptionTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/repeating/RepeatingOptionTest.java @@ -1,5 +1,6 @@ -package de.deadlocker8.budgetmaster.repeating; +package de.deadlocker8.budgetmaster.unit.repeating; +import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndDate; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndNever; -- GitLab