From 5c62fb5bbb1a689b3cd8f659b7a7cbeff1036ca6 Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Tue, 14 Apr 2026 19:51:52 +0200 Subject: [PATCH] Reload app after login --- README.md | 2 +- RpgRoller/Components/Pages/Home.razor.cs | 7 +++++-- tests/e2e/smoke.spec.js | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 186567c..71f0cef 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Backend: Frontend: - `RpgRoller/Components/`: Blazor app shell, routes, layout, page components, and query/client helpers -- `RpgRoller/Components/Pages/Home.razor`: gateway that switches between loading, auth, and authenticated workspace views +- `RpgRoller/Components/Pages/Home.razor`: gateway that switches between loading, auth, and authenticated workspace views, and force-reloads after login so the authenticated play workspace is built from the fresh session cookie - `RpgRoller/Components/Pages/Home.razor.cs`: gateway/session orchestration for `Home` - `RpgRoller/Components/Pages/Workspace.razor`: authenticated workspace UI - `RpgRoller/Components/Pages/Workspace.razor.cs`: workspace composition root, coordinator wiring, lifecycle, and JS-invokable entry points diff --git a/RpgRoller/Components/Pages/Home.razor.cs b/RpgRoller/Components/Pages/Home.razor.cs index c909aec..da9225e 100644 --- a/RpgRoller/Components/Pages/Home.razor.cs +++ b/RpgRoller/Components/Pages/Home.razor.cs @@ -39,9 +39,9 @@ public partial class Home private Task OnLoggedInAsync() { - CurrentView = HomeViewMode.Workspace; ClearStatus(); - return InvokeAsync(StateHasChanged); + Navigation.NavigateTo("/", forceLoad: true); + return Task.CompletedTask; } private Task OnLoggedOutAsync(string? message) @@ -77,4 +77,7 @@ public partial class Home [Inject] private RpgRollerApiClient ApiClient { get; set; } = null!; + + [Inject] + private NavigationManager Navigation { get; set; } = null!; } \ No newline at end of file diff --git a/tests/e2e/smoke.spec.js b/tests/e2e/smoke.spec.js index e1f31d2..a579f02 100644 --- a/tests/e2e/smoke.spec.js +++ b/tests/e2e/smoke.spec.js @@ -32,6 +32,25 @@ test("home page loads auth entry points", async ({ page }) => { await expect(page.getByLabel("Password").nth(1)).toBeVisible(); }); +test("successful login transitions to play workspace", async ({ page, context }) => { + const username = `login-${Date.now()}`; + const password = "Password123"; + + await postJson(context.request, "/api/auth/register", { + username, + password, + displayName: "Login Flow" + }); + + await page.goto("/"); + await page.locator("#login-username").fill(username); + await page.locator("#login-password").fill(password); + await page.getByRole("button", { name: "Login" }).click(); + + await expect(page.getByText("Campaign Log")).toBeVisible(); + await expect(page.locator("#login-username")).toHaveCount(0); +}); + test("Rolemaster open-ended roll detail renders specialized dice chips", async ({ page, context }) => { const username = `rm-${Date.now()}`; const displayName = "Rolemaster Smoke"; @@ -58,6 +77,7 @@ test("Rolemaster open-ended roll detail renders specialized dice chips", async ( await page.goto("/"); await expect(page.getByText("Campaign Log")).toBeVisible(); + await expect(page.locator(".log-panel .log-entry").first()).toBeVisible(); await expect(page.locator(".log-panel .log-event-badge")).toContainText(["Fumble"]); const logEntry = page.locator(".log-panel .log-entry-toggle").first();