diff --git a/src/Views/Home/Users.cshtml b/src/Views/Home/Users.cshtml index 47770e8..aa3dafd 100644 --- a/src/Views/Home/Users.cshtml +++ b/src/Views/Home/Users.cshtml @@ -303,6 +303,7 @@ updateButton.setAttribute('data-user-name', data.Cn || ''); updateButton.setAttribute('data-user-surname', data.Sn || ''); updateButton.setAttribute('data-user-workplace', data.Description?.Workplace || ''); + updateButton.setAttribute('data-user-birthdate', data.Description?.BirthDate || ''); updateButton.setAttribute('data-user-groups', JSON.stringify(data.Description?.Groups || [])); if (data.JpegPhoto && data.JpegPhoto.length > 0) { @@ -568,7 +569,7 @@ data-user-title="${data.Title || ''}" data-user-name="${data.Cn || ''}" data-user-surname="${data.Sn || ''}" - data-user-birthdate="${data.BirthDate}" + data-user-birthdate="${data.Description.BirthDate}" data-user-address-city="${data.Description.Address.City}" data-user-address-street="${data.Description.Address.Street}" data-user-address-streetnr="${data.Description.Address.StreetNr}" diff --git a/tests/Berufsschule_HAM.E2ETests/AssetsPageTests.cs b/tests/Berufsschule_HAM.E2ETests/AssetsPageTests.cs index a0c1b03..31c3454 100644 --- a/tests/Berufsschule_HAM.E2ETests/AssetsPageTests.cs +++ b/tests/Berufsschule_HAM.E2ETests/AssetsPageTests.cs @@ -43,7 +43,7 @@ public class AssetsPageTests : IDisposable } [Fact] - public void AssetsPage_ShouldCreateAndShowDetailAndUpdateAndDeleteGroup() + public void AssetsPage_ShouldCreateAndShowDetailAndUpdateAndDeleteAsset() { AppHelper.Login(_driver); AssetsHelper.NavigateToAssetsPage(_driver); @@ -53,16 +53,13 @@ public class AssetsPageTests : IDisposable _driver.ExecuteJavaScript($"$('tr[data-asset-id=\"{id}\"]').click()"); AppHelper.AwaitVisible(_driver, By.Id("viewAssetModal")); _driver.FindElement(By.Name("Barcode")); - bool noEmptyInputsFound = false; - try - { - _driver.FindElement(By.CssSelector("#viewAssetModal input[value=\"\"]")); - } catch (Exception) - { - noEmptyInputsFound = true; - } - Assert.True(noEmptyInputsFound); + var inputs = _driver.FindElements(By.CssSelector("#viewAssetModal input")); + var emptyInputs = inputs + .Where(i => string.IsNullOrWhiteSpace(i.GetAttribute("value"))) + .ToList(); + + Assert.Empty(emptyInputs); AssetsHelper.UpdateAsset(_driver, row); AssetsHelper.DeleteAsset(_driver, row); } 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(); + } +}