Backend/e-suite.Automation.UITests/ESuite.UI.E2E/StepDefinitions/UserCreationAndEditingStepDefinitions.cs
2026-01-20 21:50:10 +00:00

152 lines
7.1 KiB
C#

using ESuite.UI.E2E.Helpers;
using ESuite.UI.E2E.Helpers.Mail;
using ESuite.UI.E2E.Models;
using ESuite.UI.E2E.Pages;
using OpenQA.Selenium;
namespace ESuite.UI.E2E.StepDefinitions
{
[Binding]
public class UserCreationAndEditingStepDefinitions
{
private readonly IWebDriver driver;
private readonly EditUsersPage editUsersPage;
private readonly UserAuthenticationStepDefinitions userAuthenticationStepDefinitions;
private readonly Mailer mailer;
private readonly ScenarioContext _scenarioContext;
private readonly APIHelper apiHelper;
private readonly ConfigHelper configHelper;
private readonly AutomationTestManagerHelper automationTestManagerHelper;
public UserCreationAndEditingStepDefinitions(ScenarioContext scenarioContext)
{
driver = WebDriverHelper.GetWebDriver();
editUsersPage = new EditUsersPage(driver);
mailer = new Mailer();
_scenarioContext = scenarioContext;
apiHelper = new APIHelper(_scenarioContext);
configHelper = new ConfigHelper();
userAuthenticationStepDefinitions = new(_scenarioContext);
automationTestManagerHelper = new(_scenarioContext);
}
[Given(@"I create a new user")]
public void GivenICreateANewUser(Table dataTable)
{
BasicPage.ClickOnDropdownMenuItem("Users");
var users = dataTable.CreateSet<UsersData>();
foreach (var user in users)
{
_scenarioContext["UserName"] = $"{user.FirstName} {user.MiddleNames} {user.LastName}";
_scenarioContext["UserEmail"] = Mailer.CustomizeUserEmail(user.Mail!, _scenarioContext["GUID"].ToString()!);
I.Click(BasicPage.AddButton);
I.FillField(AddUsersPage.MailField, _scenarioContext["UserEmail"].ToString()!);
I.FillField(AddUsersPage.FirstNameField, user.FirstName!);
I.FillField(AddUsersPage.MiddleNamesField, user.MiddleNames!);
I.FillField(AddUsersPage.LastNameField, user.LastName!);
I.SelectOption(BasicPage.SelectorByLabel("Domain"), user.Domain!);
I.Click(BasicPage.SaveAndCloseButton);
AutomationTestManagerHelper.SaveTimingForAction(_scenarioContext);
I.WaitTillInvisible(BasicPage.SaveAndCloseButton);
BasicPage.SearchObjectNameInTableViaSearchInputField(_scenarioContext["GUID"].ToString()!, AddUsersPage.EmailSearchField);
}
}
[Given(@"I create a new user through an API call")]
public void GivenICreateANewUserThroughAPICall(Table dataTable)
{
Task.Run(async () =>
{
var users = dataTable.CreateSet<UsersData>();
int userCount = 1;
foreach (var user in users)
{
string email = Mailer.CustomizeUserEmail(user.Mail!, _scenarioContext["GUID"].ToString()!);
if (userCount > 1)
{
_scenarioContext[$"UserName{userCount}"] = $"{user.FirstName} {user.MiddleNames} {user.LastName}";
_scenarioContext[$"UserEmail{userCount}"] = email;
}
else
{
_scenarioContext["UserName"] = $"{user.FirstName} {user.MiddleNames} {user.LastName}";
_scenarioContext["UserEmail"] = email;
}
var domains = await apiHelper.GetDomains(configHelper.APIUrl);
var data = domains["data"]!.ElementAt(0);
int domainId = (int)data["id"]!;
await apiHelper.CreateNewUser(
configHelper.APIUrl,
user.FirstName!,
user.MiddleNames!,
user.LastName!,
email,
domainId
);
userCount++;
}
});
}
[When(@"I edit an existing user")]
public void GivenIEditAnExistingUser(Table dataTable)
{
BasicPage.ClickOnDropdownUserMenuItem("Account");
var editUsers = dataTable.CreateSet<UsersData>();
foreach (var editUser in editUsers)
{
_scenarioContext["FirstName"] = editUser.EditedFirstName + _scenarioContext["GUID"];
_scenarioContext["MiddleNames"] = editUser.EditedMiddleNames;
_scenarioContext["LastName"] = editUser.EditedLastName;
_scenarioContext["UserName"] = $"{_scenarioContext["FirstName"]} {editUser.EditedMiddleNames} {editUser.EditedLastName}";
_scenarioContext["UserNameEdited"] = $"{_scenarioContext["FirstName"]}, {editUser.EditedLastName}, {editUser.EditedLastName}, {"<Redacted>"}";
I.FillField(editUsersPage.FirstNameField, _scenarioContext["FirstName"].ToString()!);
I.FillField(editUsersPage.MiddleNamesField, editUser.EditedMiddleNames!);
I.FillField(editUsersPage.LastNameField, editUser.EditedLastName!);
if (!string.IsNullOrEmpty(editUser.Password))
{
_scenarioContext["Password"] = editUser.Password + _scenarioContext["GUIDPostfix"];
userAuthenticationStepDefinitions.EnterNewPasswordAndConfirmIt();
}
if (editUsersPage.MFACheckbox != null && string.Equals(editUser.MFA ?? "", "true", StringComparison.CurrentCultureIgnoreCase) && !(I.WaitForElementToBeChecked(editUsersPage.MFACheckbox, 1)))
{
I.Click(editUsersPage.MFACheckbox);
}
else if (editUsersPage.MFACheckbox != null && string.Equals(editUser.MFA ?? "", "false", StringComparison.CurrentCultureIgnoreCase) && (I.WaitForElementToBeChecked(editUsersPage.MFACheckbox, 1)))
{
I.Click(editUsersPage.MFACheckbox);
}
I.Click(BasicPage.SaveButton);
AutomationTestManagerHelper.SaveTimingForAction(_scenarioContext);
}
}
[Then(@"I check edited data on edit user page")]
public void ThenICheckEditedDataOnEditUserPage()
{
BasicPage.ClickOnDropdownMenuItem("Users");
BasicPage.SearchObjectNameInTableViaSearchInputField(_scenarioContext["UserEmail"].ToString()!, AddUsersPage.EmailSearchField);
I.Click(BasicPage.EditObjectButton(_scenarioContext["UserEmail"].ToString()!));
I.WaitForElementWithAttributeValue(AddUsersPage.FirstNameField, "value", _scenarioContext["FirstName"].ToString()!);
I.WaitForElementWithAttributeValue(AddUsersPage.MiddleNamesField, "value", _scenarioContext["MiddleNames"].ToString()!);
I.WaitForElementWithAttributeValue(AddUsersPage.LastNameField, "value", _scenarioContext["LastName"].ToString()!);
}
}
}