Added users E2E tests

This commit is contained in:
2025-11-15 20:56:51 +01:00
parent 0e227fc4ea
commit 0cb0a5ab93
2 changed files with 147 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.Extensions;
namespace Berufsschule_HAM.E2ETests.Helper;
public static class UsersHelper
{
public static void CreateUser(ChromeDriver driver)
{
IWebElement createUserButton = driver.FindElement(By.CssSelector("button[data-bs-target=\"#createModal\"]"));
createUserButton.Click();
AppHelper.AwaitVisible(driver, By.Id("createTitle"));
driver.FindElement(By.Id("createTitle")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("createName")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("createSurname")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("createBirthDate")).SendKeys("01.01.1900");
driver.FindElement(By.Id("createCity")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("createStreet")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("createStreetNr")).SendKeys("42");
driver.FindElement(By.Id("createWorkplace")).Click();
driver.ExecuteJavaScript("document.getElementById(\"createWorkplace\").children[1].selected = true");
driver.FindElement(By.Id("createGroups")).FindElement(By.CssSelector("*")).Click();
driver.FindElement(By.Id("createPassword")).SendKeys(AppHelper.GetRandomName() + "+42A");
IWebElement createButton = driver.FindElement(By.CssSelector("#createModal .modal-footer .btn-primary"));
createButton.Click();
Assert.True(AppHelper.TryRetryFindSuccessToast(driver));
}
public static void UpdateUser(ChromeDriver driver)
{
driver.ExecuteJavaScript($"$('tr.user-row:last-of-type .btn-warning').click()");
AppHelper.AwaitVisible(driver, By.Id("updateTitle"));
driver.FindElement(By.Id("updateTitle")).Clear();
driver.FindElement(By.Id("updateTitle")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("updateName")).Clear();
driver.FindElement(By.Id("updateName")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("updateSurname")).Clear();
driver.FindElement(By.Id("updateSurname")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("updateBirthdate")).Clear();
driver.FindElement(By.Id("updateBirthdate")).SendKeys("01.01.1900");
driver.FindElement(By.Id("updateAddressCity")).Clear();
driver.FindElement(By.Id("updateAddressCity")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("updateAddressStreet")).Clear();
driver.FindElement(By.Id("updateAddressStreet")).SendKeys(AppHelper.GetRandomName());
driver.FindElement(By.Id("updateAddressStreetNr")).Clear();
driver.FindElement(By.Id("updateAddressStreetNr")).SendKeys("42");
driver.FindElement(By.Id("updateWorkplace")).Click();
driver.ExecuteJavaScript("document.getElementById(\"updateWorkplace\").children[1].selected = true");
driver.FindElement(By.Id("updateGroups")).FindElement(By.CssSelector("*")).Click();
driver.FindElement(By.Id("updatePassword")).SendKeys(AppHelper.GetRandomName() + "+42A");
IWebElement updateButton = driver.FindElement(By.CssSelector("#updateModal .btn-warning"));
updateButton.Click();
Assert.True(AppHelper.TryRetryFindSuccessToast(driver));
}
public static void DeleteUser(ChromeDriver driver)
{
driver.ExecuteJavaScript($"$('tr.user-row:last-of-type .btn-danger').click()");
AppHelper.AwaitVisible(driver, By.Id("deleteModal"));
driver.FindElement(By.Id("deleteModal"));
driver.ExecuteJavaScript($"$('#deleteModal .btn-danger').click()");
Assert.True(AppHelper.TryRetryFindSuccessToast(driver));
}
public static void NavigateToUsersPage(ChromeDriver driver)
{
driver.Navigate().GoToUrl(new Uri(AppHelper.ServerUri, "/Home/Users"));
}
}

View File

@@ -0,0 +1,70 @@
using Berufsschule_HAM.E2ETests.Helper;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.Extensions;
using System.Diagnostics;
namespace Berufsschule_HAM.E2ETests;
public class UsersPageTests : IDisposable
{
private readonly ChromeDriver _driver;
public Uri serverUri;
public string serverUrl;
public Process serverProcess;
public UsersPageTests()
{
serverUrl = AppHelper.ServerUrl;
serverUri = AppHelper.ServerUri;
Task<Process> app = AppHelper.StartApp(serverUrl);
_driver = AppHelper.GetChromeDriver();
serverProcess = app.Result;
}
[Fact]
public void UsersPage_ShouldShowButton()
{
AppHelper.Login(_driver);
UsersHelper.NavigateToUsersPage(_driver);
_driver.FindElement(By.CssSelector("button[data-bs-target=\"#createModal\"]"));
}
[Fact]
public void UsersPage_ShouldShowCreateViewModal()
{
AppHelper.Login(_driver);
UsersHelper.NavigateToUsersPage(_driver);
_driver.FindElement(By.CssSelector("button[data-bs-target=\"#createModal\"]")).Click();
List<string> ids = ["createTitle", "createName", "createSurname", "createBirthDate", "createCity", "createStreet", "createStreetNr", "createWorkplace", "createGroups", "createPassword", "createPhotoFile", "createJpegPhoto", "createPhotoPreview"];
List<string> css = ["#createModal .btn-primary", "#createModal .btn-secondary"];
ids.ForEach(id => _driver.FindElement(By.Id(id)));
css.ForEach(selector => _driver.FindElement(By.CssSelector(selector)));
}
[Fact]
public void UsersPage_ShouldCreateAndShowDetailAndUpdateAndDeleteUser()
{
AppHelper.Login(_driver);
UsersHelper.NavigateToUsersPage(_driver);
UsersHelper.CreateUser(_driver);
_driver.ExecuteJavaScript($"$('tr.user-row:last-of-type').click()");
AppHelper.AwaitVisible(_driver, By.Id("detailModal"));
var inputs = _driver.FindElements(By.CssSelector("#detailModal input"));
var emptyInputs = inputs
.Where(i => string.IsNullOrWhiteSpace(i.GetAttribute("value")))
.ToList();
Assert.Empty(emptyInputs);
_driver.ExecuteJavaScript($"$('#detailModal .btn-close').click()");
UsersHelper.UpdateUser(_driver);
UsersHelper.DeleteUser(_driver);
}
public void Dispose()
{
_driver.Quit();
serverProcess.Kill();
}
}