use UI error DOM marker, fail fast on admin role setup

This commit is contained in:
1amKhush 2026-03-30 22:27:54 +05:30
parent 14cdb9b005
commit 691768c3a4
5 changed files with 24 additions and 9 deletions

View File

@ -93,9 +93,12 @@ public class PlaywrightTester : IAsyncDisposable
}
}
var currentUri = new Uri(Page.Url);
Assert.False(currentUri.AbsolutePath.StartsWith("/errors/", StringComparison.OrdinalIgnoreCase),
$"Expected not to be on an error route, but current URL is {Page.Url}");
var errorPageMarker = Page.Locator("[data-testid='ui-error-page']");
if (await errorPageMarker.CountAsync() > 0)
{
var title = await Page.TitleAsync();
Assert.Fail($"Expected not to be on an error page, but found the UI error marker on {Page.Url} (title: {title})");
}
}
public async Task<string> CreateServerAdminAsync(string emailPrefix = "admin")
@ -105,7 +108,14 @@ public class PlaywrightTester : IAsyncDisposable
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
if (!await roleManager.RoleExistsAsync(Roles.ServerAdmin))
await roleManager.CreateAsync(new IdentityRole(Roles.ServerAdmin));
{
var roleCreateResult = await roleManager.CreateAsync(new IdentityRole(Roles.ServerAdmin));
if (!roleCreateResult.Succeeded)
{
var errors = string.Join(", ", roleCreateResult.Errors.Select(e => e.Description));
throw new InvalidOperationException($"Failed to create server admin role: {errors}");
}
}
var email = $"{emailPrefix}-{Guid.NewGuid():N}@test.com";
const string password = "123456";
@ -123,7 +133,12 @@ public class PlaywrightTester : IAsyncDisposable
throw new InvalidOperationException($"Failed to create admin user: {errors}");
}
await userManager.AddToRoleAsync(user, Roles.ServerAdmin);
var addToRoleResult = await userManager.AddToRoleAsync(user, Roles.ServerAdmin);
if (!addToRoleResult.Succeeded)
{
var errors = string.Join(", ", addToRoleResult.Errors.Select(e => e.Description));
throw new InvalidOperationException($"Failed to assign admin role to user {email}: {errors}");
}
return email;
}

View File

@ -8,7 +8,7 @@ namespace PluginBuilder.Controllers;
[IgnoreAntiforgeryToken]
public class UIErrorController : Controller
{
[Route("/errors/{statusCode:int}")]
[Route("/errors/{statusCode:int:range(400,599)}")]
public IActionResult Handle(int statusCode)
{
var acceptHeader = Request.Headers.Accept.ToString();

View File

@ -2,7 +2,7 @@
ViewData["Title"] = "404 - Page Not Found";
}
<div class="container py-5 text-center">
<div class="container py-5 text-center" data-testid="ui-error-page">
<h1 class="mb-3">404</h1>
<p class="lead mb-4">The page you requested could not be found.</p>
<a class="btn btn-primary" href="/">Navigate back to home</a>

View File

@ -2,7 +2,7 @@
ViewData["Title"] = "500 - Internal Server Error";
}
<div class="container py-5 text-center">
<div class="container py-5 text-center" data-testid="ui-error-page">
<h1 class="mb-3">500</h1>
<p class="lead mb-4">An unexpected server error occurred while processing your request.</p>
<p>Please consult the server logs for details.</p>

View File

@ -5,7 +5,7 @@
: "Error";
}
<div class="container py-5 text-center">
<div class="container py-5 text-center" data-testid="ui-error-page">
<h1 class="mb-3">@Model</h1>
<p class="lead mb-4">An error occurred while processing your request.</p>
<a class="btn btn-primary" href="/">Navigate back to home</a>