diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java index ac618f6e2b8ec7a5d14465ed1c39957f79bd8f1d..3722006bc6d646e8267b2be293ea6e83ca12e337 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/ImportTest.java @@ -2,6 +2,8 @@ package de.deadlocker8.budgetmaster.integration; 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.Test; import org.junit.runner.RunWith; import org.openqa.selenium.WebDriver; @@ -9,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.util.Arrays; diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java index c8baa9b03467abda57f5134d8f6d1eb72fa18d92..1b4c17f45b01c613698ab12ee2e78bb8570ed813 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/LoginControllerTest.java @@ -2,6 +2,8 @@ package de.deadlocker8.budgetmaster.integration; 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 de.thecodelabs.utils.util.Localization; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/SearchTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/SearchTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8b8ac3fd1040a271fb03de3ba4e70934cdca8b6a --- /dev/null +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/SearchTest.java @@ -0,0 +1,132 @@ +package de.deadlocker8.budgetmaster.integration; + +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 de.thecodelabs.utils.util.Localization; +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.embedded.LocalServerPort; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +import static junit.framework.TestCase.assertNotNull; +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertEquals; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = Main.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@SeleniumTest +public class SearchTest +{ + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + @Autowired + private WebDriver driver; + + @LocalServerPort + int port; + + @Test + public void searchFromNavbar() + { + // prepare + IntegrationTestHelper helper = new IntegrationTestHelper(driver, port); + helper.start(); + helper.login(UserService.DEFAULT_PASSWORD); + helper.hideBackupReminder(); + + String path = getClass().getClassLoader().getResource("SearchDatabase.json").getFile().replace("/", File.separator); + List<String> sourceAccounts = Arrays.asList("DefaultAccount0815", "sfsdf"); + List<String> destinationAccounts = Arrays.asList("DefaultAccount0815", "Account2"); + helper.uploadDatabase(path, sourceAccounts, destinationAccounts); + + // search + WebElement inputSearch = driver.findElement(By.id("search")); + inputSearch.sendKeys("e"); + driver.findElement(By.id("buttonSearch")).click(); + + // validate + WebElement headline = driver.findElement(By.className("headline")); + String expected = Localization.getString("menu.search.results", 24); + assertEquals(expected, headline.getText()); + + // checkboxes + assertTrue(driver.findElement(By.cssSelector(".main-card #searchForm input[name=\"searchName\"]")).isSelected()); + assertTrue(driver.findElement(By.cssSelector(".main-card #searchForm input[name=\"searchDescription\"]")).isSelected()); + assertTrue(driver.findElement(By.cssSelector(".main-card #searchForm input[name=\"searchCategory\"]")).isSelected()); + assertTrue(driver.findElement(By.cssSelector(".main-card #searchForm input[name=\"searchTags\"]")).isSelected()); + + // results + List<WebElement> results = driver.findElements(By.cssSelector(".search-container .card-panel")); + assertEquals(10, results.size()); + } + + @Test + public void pagination() + { + // prepare + IntegrationTestHelper helper = new IntegrationTestHelper(driver, port); + helper.start(); + helper.login(UserService.DEFAULT_PASSWORD); + helper.hideBackupReminder(); + + String path = getClass().getClassLoader().getResource("SearchDatabase.json").getFile().replace("/", File.separator); + List<String> sourceAccounts = Arrays.asList("DefaultAccount0815", "sfsdf"); + List<String> destinationAccounts = Arrays.asList("DefaultAccount0815", "Account2"); + helper.uploadDatabase(path, sourceAccounts, destinationAccounts); + + // search + WebElement inputSearch = driver.findElement(By.id("search")); + inputSearch.sendKeys("e"); + driver.findElement(By.id("buttonSearch")).click(); + + WebElement headline = driver.findElement(By.className("headline")); + String expected = Localization.getString("menu.search.results", 24); + assertEquals(expected, headline.getText()); + + // === PAGE 1 === + List<WebElement> pages = driver.findElements(By.cssSelector(".pagination li")); + assertEquals(5, pages.size()); + + assertTrue(pages.get(0).getAttribute("class").contains("disabled")); + assertEquals("1", pages.get(1).findElement(By.className("page-link")).getText()); + assertTrue(pages.get(1).getAttribute("class").contains("active")); + assertEquals("2", pages.get(2).findElement(By.className("page-link")).getText()); + assertEquals("3", pages.get(3).findElement(By.className("page-link")).getText()); + assertTrue(!pages.get(4).getAttribute("class").contains("disabled")); + + // validate results + List<WebElement> results = driver.findElements(By.cssSelector(".search-container .card-panel")); + assertEquals(10, results.size()); + + // === PAGE 1 === + pages.get(3).click(); + + pages = driver.findElements(By.cssSelector(".pagination li")); + assertEquals(5, pages.size()); + + // previous button should be enabled + assertTrue(!pages.get(0).getAttribute("class").contains("disabled")); + + assertEquals("1", pages.get(1).findElement(By.className("page-link")).getText()); + assertEquals("2", pages.get(2).findElement(By.className("page-link")).getText()); + assertEquals("3", pages.get(3).findElement(By.className("page-link")).getText()); + assertTrue(pages.get(3).getAttribute("class").contains("active")); + + // next button should be disabled + assertTrue(pages.get(4).getAttribute("class").contains("disabled")); + + // validate + results = driver.findElements(By.cssSelector(".search-container .card-panel")); + assertEquals(4, results.size()); + } +} \ No newline at end of file diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/IntegrationTestHelper.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/IntegrationTestHelper.java similarity index 86% rename from src/test/java/de/deadlocker8/budgetmaster/integration/IntegrationTestHelper.java rename to src/test/java/de/deadlocker8/budgetmaster/integration/helpers/IntegrationTestHelper.java index 7cd993f5961c56fa3bbbab09139905364e8aa7a4..66d440e9c8a09c950236350ccae6a91bd2e5dc28 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/IntegrationTestHelper.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/IntegrationTestHelper.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.integration; +package de.deadlocker8.budgetmaster.integration.helpers; import de.thecodelabs.utils.util.Localization; import org.openqa.selenium.By; @@ -10,9 +10,9 @@ import java.util.List; import static org.junit.Assert.assertEquals; -class IntegrationTestHelper +public class IntegrationTestHelper { - static String getTextNode(WebElement e) + public static String getTextNode(WebElement e) { String text = e.getText().trim(); List<WebElement> children = e.findElements(By.xpath("./*")); @@ -27,7 +27,7 @@ class IntegrationTestHelper private WebDriver driver; private String url; - IntegrationTestHelper(WebDriver driver, int port) + public IntegrationTestHelper(WebDriver driver, int port) { this.driver = driver; this.url = BASE_URL + port; @@ -38,12 +38,12 @@ class IntegrationTestHelper return url; } - void start() + public void start() { driver.get(url); } - void login(String password) + public void login(String password) { WebElement inputPassword = driver.findElement(By.id("login-password")); inputPassword.sendKeys(password); @@ -51,7 +51,7 @@ class IntegrationTestHelper buttonLogin.click(); } - void hideBackupReminder() + public void hideBackupReminder() { try { @@ -63,7 +63,7 @@ class IntegrationTestHelper } } - void uploadDatabase(String path, List<String> sourceAccounts, List<String> destinationAccounts) + public void uploadDatabase(String path, List<String> sourceAccounts, List<String> destinationAccounts) { if(path.startsWith("\\")) { @@ -92,6 +92,10 @@ class IntegrationTestHelper driver.findElement(By.id("buttonImport")).click(); assertEquals(Localization.getString("menu.settings"), IntegrationTestHelper.getTextNode(driver.findElement(By.className("headline")))); + + // open transactions page in order to update repeating transactions + driver.get(url + "/transactions"); + start(); } private void createAccountOnImport(String accountName) diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/SeleniumTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTest.java similarity index 88% rename from src/test/java/de/deadlocker8/budgetmaster/integration/SeleniumTest.java rename to src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTest.java index 10f8f4f75b59e0e5f2d84a74e26bb9811e80d685..e45b75de42b2cfcc54ea559db521ba0be5e0dfb2 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/SeleniumTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTest.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.integration; +package de.deadlocker8.budgetmaster.integration.helpers; import org.springframework.test.context.TestExecutionListeners; diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/SeleniumTestExecutionListener.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestExecutionListener.java similarity index 96% rename from src/test/java/de/deadlocker8/budgetmaster/integration/SeleniumTestExecutionListener.java rename to src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestExecutionListener.java index 5dfe13519a6a330ce8d31eddd25a7a51ac9a9b16..e643c3bbdc392e374b9ec255fc6e675d42d9e00c 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/SeleniumTestExecutionListener.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestExecutionListener.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.integration; +package de.deadlocker8.budgetmaster.integration.helpers; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; @@ -45,7 +45,7 @@ public class SeleniumTestExecutionListener extends AbstractTestExecutionListener { FirefoxOptions options = new FirefoxOptions(); - options.setHeadless(true); +// options.setHeadless(true); webDriver = new FirefoxDriver(options); ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) context;