diff --git a/tests/Berufsschule_HAM.E2ETests/Helper/UsersHelper.cs b/tests/Berufsschule_HAM.E2ETests/Helper/UsersHelper.cs new file mode 100644 index 0000000..0090844 --- /dev/null +++ b/tests/Berufsschule_HAM.E2ETests/Helper/UsersHelper.cs @@ -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")); + } +} \ No newline at end of file diff --git a/tests/Berufsschule_HAM.E2ETests/UsersPageTests.cs b/tests/Berufsschule_HAM.E2ETests/UsersPageTests.cs new file mode 100644 index 0000000..91b01f9 --- /dev/null +++ b/tests/Berufsschule_HAM.E2ETests/UsersPageTests.cs @@ -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 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 ids = ["createTitle", "createName", "createSurname", "createBirthDate", "createCity", "createStreet", "createStreetNr", "createWorkplace", "createGroups", "createPassword", "createPhotoFile", "createJpegPhoto", "createPhotoPreview"]; + List 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(); + } +}