diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/TransactionTestHelper.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/TransactionTestHelper.java index 71c8393076264846b46943e2f8f71a8ec8bec9d6..f8268f3e8904daff978c20e3661826cd94d9aa0e 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/TransactionTestHelper.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/TransactionTestHelper.java @@ -24,7 +24,7 @@ public class TransactionTestHelper // icon final List<WebElement> icons = columns.get(2).findElements(By.tagName("i")); - assertThat(icons).hasSize(1); + assertThat(icons).hasSize(determineNumberOfTransactionTypeIcons(repeatIconVisible, transferIconIsVisible)); assertThat(icons.get(0).isDisplayed()).isEqualTo(repeatIconVisible || transferIconIsVisible); if(repeatIconVisible) { @@ -47,6 +47,21 @@ public class TransactionTestHelper assertThat(columns.get(4).getText()).contains(amount); } + private static int determineNumberOfTransactionTypeIcons(boolean repeatIconVisible, boolean transferIconIsVisible) + { + int numberOfIcons = 0; + if(repeatIconVisible) + { + numberOfIcons++; + } + if(transferIconIsVisible) + { + numberOfIcons++; + } + + return numberOfIcons; + } + public static void selectOptionFromDropdown(WebDriver driver, By selectLocator, String nameToSelect) { WebElement select = driver.findElement(selectLocator); @@ -74,4 +89,13 @@ public class TransactionTestHelper .filter(webElement -> webElement.getText().equals(accountName)) .findFirst().orElseThrow().click(); } + + public static void selectTransferAccountByName(WebDriver driver, String transferAccountName) + { + final WebElement categorySelect = driver.findElement(By.cssSelector(".transfer-account-select-wrapper .custom-select")); + categorySelect.click(); + driver.findElements(By.cssSelector(".transfer-account-select-wrapper .custom-select-item-name")).stream() + .filter(webElement -> webElement.getText().equals(transferAccountName)) + .findFirst().orElseThrow().click(); + } } diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java index 19c85fff9ae6340641175bf8e10a092e6ec25097..7b3fb0566dbe8515f8a80f838de1d084b45846d9 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java @@ -46,17 +46,23 @@ class NewTransactionRecurringTest extends SeleniumTestBase final Account account2 = new Account("Account2", AccountType.CUSTOM); helper.uploadDatabase(path, Arrays.asList("DefaultAccount0815", "sfsdf"), List.of(account1, account2)); - // open transactions page + + openNewTransactionPage("Transaction"); + } + + private void openNewTransactionPage(String type) + { driver.get(helper.getUrl() + "/transactions"); + driver.findElement(By.id("button-new-transaction")).click(); WebDriverWait wait = new WebDriverWait(driver, 5); - final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]"); + final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'" + type + "')]"); wait.until(ExpectedConditions.visibilityOfElementLocated(locator)); driver.findElement(locator).click(); wait = new WebDriverWait(driver, 5); - wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Transaction")); + wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New " + type)); } @Test @@ -195,6 +201,82 @@ class NewTransactionRecurringTest extends SeleniumTestBase TransactionTestHelper.assertTransactionColumns(columns, dateString, categoryName, "rgb(46, 124, 43)", true, false, name, description, "-" + amount); } + @Test + void test_newTransaction_transfer() + { + openNewTransactionPage("Transfer"); + + String name = "My recurring transfer"; + String amount = "30.00"; + String description = "sit amet"; + String categoryName = "sdfdsf"; + String repeatingModifier = "1"; + String repeatingModifierType = "Days"; + String transferAccountName = "Account2"; + + // fill form + driver.findElement(By.id("transaction-name")).sendKeys(name); + driver.findElement(By.id("transaction-amount")).sendKeys(amount); + driver.findElement(By.id("transaction-description")).sendKeys(description); + TransactionTestHelper.selectCategoryByName(driver, categoryName); + TransactionTestHelper.selectTransferAccountByName(driver, transferAccountName); + + driver.findElement(By.id("button-transaction-add-repeating-option")).click(); + WebDriverWait wait = new WebDriverWait(driver, 5); + wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("button-transaction-remove-repeating-option")))); + + // fill repeating options + driver.findElement(By.id("transaction-repeating-modifier")).sendKeys(repeatingModifier); + TransactionTestHelper.selectOptionFromDropdown(driver, By.cssSelector("#transaction-repeating-modifier-row"), repeatingModifierType); + + // fill date + driver.findElement(By.id("transaction-datepicker")).click(); + List<WebElement> datePickerCells = driver.findElements(By.cssSelector(".datepicker-table td")); + for(WebElement cell : datePickerCells) + { + if(cell.getText().equals("3")) + { + cell.click(); + driver.findElement(By.cssSelector(".datepicker-done")).click(); + break; + } + } + + wait = new WebDriverWait(driver, 5); + wait.until(ExpectedConditions.invisibilityOfAllElements(driver.findElements(By.cssSelector(".modal-overlay")))); + + // submit form + wait = new WebDriverWait(driver, 5); + wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className("modal-overlay"))); + + WebElement submitButton = driver.findElement(By.id("button-save-transaction")); + ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", submitButton); + + submitButton.click(); + + wait = new WebDriverWait(driver, 5); + wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".headline-date"))); + + // assert + assertThat(driver.getCurrentUrl()).endsWith("/transactions"); + + List<WebElement> transactionsRows = driver.findElements(By.cssSelector(".transaction-container .hide-on-med-and-down.transaction-row-top")); + assertThat(transactionsRows).hasSizeGreaterThan(2); + + final WebElement row = transactionsRows.get(transactionsRows.size() - 2); + final List<WebElement> columns = row.findElements(By.className("col")); + assertThat(columns).hasSize(6); + + // check columns + final String dateString = new SimpleDateFormat("03.MM.").format(new Date()); + TransactionTestHelper.assertTransactionColumns(columns, dateString, categoryName, "rgb(46, 124, 43)", true, true, name, description, amount); + + driver.get(helper.getUrl() + "/transactions/26/edit"); + + assertThat(driver.findElement(By.cssSelector(".account-select-wrapper .custom-select-selected-item .category-circle")).getAttribute("data-value")).isEqualTo("2"); + assertThat(driver.findElement(By.cssSelector(".transfer-account-select-wrapper .custom-select-selected-item .category-circle")).getAttribute("data-value")).isEqualTo("4"); + } + @Test void test_edit() { @@ -218,5 +300,23 @@ class NewTransactionRecurringTest extends SeleniumTestBase assertThat(driver.findElement(By.id("repeating-end-after-x-times")).isSelected()).isTrue(); assertThat(driver.findElement(By.id("transaction-repeating-end-after-x-times-input")).getAttribute("value")).isEqualTo("20"); + + assertThat(driver.findElement(By.id("button-transaction-remove-repeating-option")).isDisplayed()).isFalse(); + } + + @Test + void test_new_removeRepeatingOption() + { + driver.findElement(By.id("button-transaction-add-repeating-option")).click(); + WebDriverWait wait = new WebDriverWait(driver, 5); + wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("button-transaction-remove-repeating-option")))); + + assertThat(driver.findElement(By.id("button-transaction-remove-repeating-option")).isDisplayed()).isTrue(); + + driver.findElement(By.id("button-transaction-remove-repeating-option")).click(); + wait = new WebDriverWait(driver, 5); + wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("button-transaction-add-repeating-option")))); + + assertThat(driver.findElement(By.id("button-transaction-remove-repeating-option")).isDisplayed()).isFalse(); } } \ No newline at end of file