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();
+ }
+}