diff --git a/tests/Berufsschule_HAM.E2ETests/AssetsPageTests.cs b/tests/Berufsschule_HAM.E2ETests/AssetsPageTests.cs new file mode 100644 index 0000000..a0c1b03 --- /dev/null +++ b/tests/Berufsschule_HAM.E2ETests/AssetsPageTests.cs @@ -0,0 +1,75 @@ +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 AssetsPageTests : IDisposable +{ + private readonly ChromeDriver _driver; + public Uri serverUri; + public string serverUrl; + public Process serverProcess; + + public AssetsPageTests() + { + serverUrl = AppHelper.ServerUrl; + serverUri = AppHelper.ServerUri; + Task app = AppHelper.StartApp(serverUrl); + _driver = AppHelper.GetChromeDriver(); + serverProcess = app.Result; + } + + [Fact] + public void AssetsPage_ShouldShowButton() + { + AppHelper.Login(_driver); + AssetsHelper.NavigateToAssetsPage(_driver); + _driver.FindElement(By.CssSelector("button[data-bs-target=\"#createAssetModal\"]")); + } + + [Fact] + public void AssetsPage_ShouldShowCreateViewModal() + { + AppHelper.Login(_driver); + AssetsHelper.NavigateToAssetsPage(_driver); + _driver.FindElement(By.CssSelector("button[data-bs-target=\"#createAssetModal\"]")).Click(); + List ids = ["createName", "createLocationSelect", "createUsersSelect", "createSerialNumber", "createPresetSelect", "createPresetApply", "createType", "createMake", "createModel", "attributesContainer", "addAttributeBtn", "createPurchaseDate", "createPurchaseValue", "createPurchaseAt", "createPurchaseBy"]; + List css = ["#createAssetModal .btn-primary", "#createAssetModal .btn-secondary"]; + ids.ForEach(id => _driver.FindElement(By.Id(id))); + css.ForEach(selector => _driver.FindElement(By.CssSelector(selector))); + } + + [Fact] + public void AssetsPage_ShouldCreateAndShowDetailAndUpdateAndDeleteGroup() + { + AppHelper.Login(_driver); + AssetsHelper.NavigateToAssetsPage(_driver); + AssetsHelper.CreateAsset(_driver); + IWebElement row = _driver.FindElement(By.CssSelector("tr.asset-row:last-of-type")); + int id = Convert.ToInt32(row.GetAttribute("data-asset-id")); + _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); + + AssetsHelper.UpdateAsset(_driver, row); + AssetsHelper.DeleteAsset(_driver, row); + } + + public void Dispose() + { + _driver.Quit(); + serverProcess.Kill(); + } +} diff --git a/tests/Berufsschule_HAM.E2ETests/Helper/AssetsHelper.cs b/tests/Berufsschule_HAM.E2ETests/Helper/AssetsHelper.cs new file mode 100644 index 0000000..62c28cf --- /dev/null +++ b/tests/Berufsschule_HAM.E2ETests/Helper/AssetsHelper.cs @@ -0,0 +1,94 @@ +using System.Diagnostics; +using System.Net; +using OpenQA.Selenium; +using OpenQA.Selenium.Chrome; +using OpenQA.Selenium.Support.Extensions; +using OpenQA.Selenium.Support.UI; +using SeleniumExtras.WaitHelpers; + +namespace Berufsschule_HAM.E2ETests.Helper; + +public static class AssetsHelper +{ + public static void CreateAsset(ChromeDriver driver) + { + IWebElement createAssetButton = driver.FindElement(By.CssSelector("button[data-bs-target=\"#createAssetModal\"]")); + createAssetButton.Click(); + AppHelper.AwaitVisible(driver, By.Id("createName")); + driver.FindElement(By.Id("createName")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("createLocationSelect-ts-control")).Click(); + AppHelper.AwaitVisible(driver, By.Id("createLocationSelect-opt-1")); + driver.ExecuteJavaScript("document.getElementById(\"createLocationSelect-opt-1\").click()"); + driver.FindElement(By.Id("createUsersSelect-ts-control")).Click(); + AppHelper.AwaitVisible(driver, By.Id("createUsersSelect-opt-1")); + driver.ExecuteJavaScript("document.getElementById(\"createUsersSelect-opt-1\").click()"); + driver.FindElement(By.Id("createSerialNumber")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("createType")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("createMake")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("createModel")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("addAttributeBtn")).Click(); + driver.FindElement(By.CssSelector("#attributesContainer input[data-attr-name]")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.CssSelector("#attributesContainer input[data-attr-value]")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("createPurchaseDate")).Click(); + driver.FindElement(By.Id("createPurchaseDate")).SendKeys("01011990"); + driver.FindElement(By.Id("createPurchaseValue")).SendKeys("12345.67"); + driver.FindElement(By.Id("createPurchaseAt")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("createPurchaseBy")).SendKeys("admin"); + IWebElement createButton = driver.FindElement(By.CssSelector("#createAssetModal .modal-footer .btn-primary")); + createButton.Click(); + Assert.True(AppHelper.TryRetryFindSuccessToast(driver)); + } + + public static void UpdateAsset(ChromeDriver driver, IWebElement row) + { + int id = Convert.ToInt32(row.GetAttribute("data-asset-id")); + IWebElement updateAssetButton = row.FindElement(By.CssSelector($"button[data-bs-target=\"#updateAssetModal\"]")); + driver.ExecuteJavaScript($"$('button[data-asset-id=\"{id}\"][data-bs-target=\"#updateAssetModal\"]').click()"); + + AppHelper.AwaitVisible(driver, By.Id("updateName")); + driver.FindElement(By.Id("updateName")).SendKeys(AppHelper.GetRandomName()); + driver.ExecuteJavaScript("$(\"#updateLocationSelect-ts-control\").click()"); + AppHelper.AwaitVisible(driver, By.Id("updateLocationSelect-opt-1")); + driver.ExecuteJavaScript("document.getElementById(\"updateLocationSelect-opt-1\").click()"); + driver.ExecuteJavaScript("$(\"#updateUsersSelect-ts-control\").click()"); + AppHelper.AwaitVisible(driver, By.Id("updateUsersSelect-opt-1")); + driver.ExecuteJavaScript("document.getElementById(\"updateUsersSelect-opt-1\").click()"); + driver.FindElement(By.Id("updateSerialNumber")).SendKeys(AppHelper.GetRandomName()); + + driver.FindElement(By.Id("updateType")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("updateMake")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("updateModel")).SendKeys(AppHelper.GetRandomName()); + driver.ExecuteJavaScript("document.getElementById(\"addAttributeBtn\").click()"); + + driver.FindElement(By.CssSelector("#updateAttributesContainer input[data-attr-name]")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.CssSelector("#updateAttributesContainer input[data-attr-value]")).SendKeys(AppHelper.GetRandomName()); + + driver.FindElement(By.Id("updatePurchaseDate")).Click(); + driver.FindElement(By.Id("updatePurchaseDate")).SendKeys("01011990"); + + driver.FindElement(By.Id("updatePurchaseValue")).SendKeys("12345.67"); + driver.FindElement(By.Id("updatePurchaseAt")).SendKeys(AppHelper.GetRandomName()); + driver.FindElement(By.Id("updatePurchaseBy")).SendKeys("admin"); + + + IWebElement updateButton = driver.FindElement(By.CssSelector("#updateAssetModal .btn-warning")); + updateButton.Click(); + Assert.True(AppHelper.TryRetryFindSuccessToast(driver)); + } + + + public static void DeleteAsset(ChromeDriver driver, IWebElement row) + { + int id = Convert.ToInt32(row.GetAttribute("data-asset-id")); + driver.ExecuteJavaScript($"$('button[data-asset-id=\"{id}\"][data-bs-target=\"#deleteModal\"]').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 NavigateToAssetsPage(ChromeDriver driver) + { + driver.Navigate().GoToUrl(new Uri(AppHelper.ServerUri, "/Home/Assets")); + } +} \ No newline at end of file