Files
jdescopingtool/NEW/tests/JdeScoping.Ui.Tests/Helpers/UiAuthHelper.cs
T
2026-02-10 07:47:48 -05:00

45 lines
1.8 KiB
C#

namespace JdeScoping.Ui.Tests.Helpers;
internal static class UiAuthHelper
{
public static async Task LoginAsync(IPage page, string username = "testuser", string password = "testpass")
{
var loginForm = page.GetByText("Authentication Required");
bool formVisible = await loginForm.IsVisibleAsync();
if (!formVisible) return;
await page.Locator("input[name='Username']").FillAsync(username);
await page.Locator("input[name='Password']").FillAsync(password);
await page.Locator("button[type='submit']:has-text('LOGIN')").ClickAsync();
await page.WaitForLoadStateAsync(LoadState.NetworkIdle);
await page.WaitForTimeoutAsync(3_000);
await page.GotoAsync("/search");
await page.WaitForLoadStateAsync(LoadState.NetworkIdle);
if (await loginForm.IsVisibleAsync())
{
var notifications = page.Locator(".rz-notification");
int count = await notifications.CountAsync();
var details = new List<string>();
for (var i = 0; i < count; i++)
{
string text = (await notifications.Nth(i).InnerTextAsync()).Trim();
if (!string.IsNullOrWhiteSpace(text)) details.Add(text);
}
throw new InvalidOperationException(
$"Login did not complete. URL={page.Url}. Notifications={string.Join(" | ", details)}");
}
}
public static async Task LogoutAsync(IPage page)
{
var logoutButton = page.GetByRole(AriaRole.Button, new PageGetByRoleOptions { Name = "Logout" });
if (await logoutButton.IsVisibleAsync())
{
await logoutButton.ClickAsync();
await page.WaitForLoadStateAsync(LoadState.NetworkIdle);
}
}
}