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