From ecde802b9a4e53a091dc055094dafc551f17e1ee Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Thu, 14 Jul 2022 20:30:29 +0200
Subject: [PATCH] #696 - added selenium tests for security settings

---
 .../selenium/SecuritySettingsTest.java        | 98 +++++++++++++++++++
 1 file changed, 98 insertions(+)
 create mode 100644 BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SecuritySettingsTest.java

diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SecuritySettingsTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SecuritySettingsTest.java
new file mode 100644
index 000000000..a73d83b12
--- /dev/null
+++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SecuritySettingsTest.java
@@ -0,0 +1,98 @@
+package de.deadlocker8.budgetmaster.integration.selenium;
+
+import de.deadlocker8.budgetmaster.authentication.UserService;
+import de.deadlocker8.budgetmaster.integration.helpers.IntegrationTestHelper;
+import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTestBase;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import java.time.Duration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+
+class SecuritySettingsTest extends SeleniumTestBase
+{
+	private static IntegrationTestHelper helper;
+
+	@Override
+	protected void importDatabaseOnce()
+	{
+		helper = new IntegrationTestHelper(driver, port);
+		helper.start();
+		helper.login(UserService.DEFAULT_PASSWORD);
+		helper.hideBackupReminder();
+		helper.hideWhatsNewDialog();
+		helper.hideMigrationDialog();
+	}
+
+	@Test
+	void test_unsavedChangesWarningIsShown()
+	{
+		driver.get(helper.getUrl() + "/settings");
+
+		driver.findElement(By.id("securitySettingsContainerHeader")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("securitySettingsContainer")));
+
+		driver.findElement(By.id("settings-password")).sendKeys("abc");
+
+		// assert
+		assertThat(driver.findElement(By.cssSelector("#securitySettingsContainerHeader .collapsible-header-button")).getText())
+				.contains("unsaved");
+	}
+
+	@Test
+	void test_save()
+	{
+		driver.get(helper.getUrl() + "/settings");
+
+		driver.findElement(By.id("securitySettingsContainerHeader")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("securitySettingsContainer")));
+
+		driver.findElement(By.id("settings-password")).sendKeys("abc");
+		driver.findElement(By.id("settings-password-confirmation")).sendKeys("abc");
+
+		driver.findElement(By.cssSelector("#securitySettingsContainer button")).click();
+
+		wait = new WebDriverWait(driver, Duration.ofSeconds(5));
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("toast")));
+
+		// assert
+		assertThat(driver.findElement(By.className("toast")).getText())
+				.contains("Password saved");
+
+		assertThat(driver.findElement(By.cssSelector("#securitySettingsContainerHeader .collapsible-header-button")).isDisplayed())
+				.isFalse();
+	}
+
+	@Test
+	void test_save_error()
+	{
+		driver.get(helper.getUrl() + "/settings");
+
+		driver.findElement(By.id("securitySettingsContainerHeader")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("securitySettingsContainer")));
+
+		driver.findElement(By.id("settings-password")).sendKeys("");
+
+		driver.findElement(By.cssSelector("#securitySettingsContainer button")).click();
+
+		wait = new WebDriverWait(driver, Duration.ofSeconds(5));
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("toast")));
+
+		// assert
+		assertThat(driver.findElement(By.className("toast")).getText())
+				.contains("Error saving password");
+
+		assertThat(driver.findElement(By.cssSelector("#securitySettingsContainerHeader .collapsible-header-button")).isDisplayed())
+				.isFalse();
+	}
+}
\ No newline at end of file
-- 
GitLab