Implement milestone 2 route navigation

This commit is contained in:
2026-05-04 21:23:45 +02:00
parent c13a2ce7c7
commit def2a3f680
21 changed files with 334 additions and 193 deletions

View File

@@ -1,7 +1,7 @@
const assert = require("node:assert/strict");
const fs = require("node:fs");
const path = require("node:path");
const { Builder, By, until } = require("selenium-webdriver");
const { Builder, By, Key, until } = require("selenium-webdriver");
const firefox = require("selenium-webdriver/firefox");
const baseUrl = process.env.SELENIUM_BASE_URL || "http://127.0.0.1:5000";

View File

@@ -87,6 +87,61 @@ const tests = [
assert.equal(response.headers.get("location"), "/play");
}
},
{
name: "authenticated route navigation and refresh use real URLs",
run: async () => withDriver({}, async (driver) => {
const username = uniqueName("routes");
const { sessionCookie } = await registerAndLoginApi(username, "Route Navigation");
const campaign = await postJson("/api/campaigns", {
name: "Route Navigation",
rulesetId: "d6"
}, { cookie: sessionCookie });
await postJson("/api/characters", {
name: "Navigator",
campaignId: campaign.id
}, { cookie: sessionCookie });
await seedAuthenticatedBrowser(driver, sessionCookie);
await driver.get(absoluteUrl("/campaigns"));
await waitForUrl(driver, "/campaigns");
await waitForSelector(driver, "#campaign-select");
assert.equal(await hasSelector(driver, "#skill-filter-input"), false);
await driver.navigate().refresh();
await waitForUrl(driver, "/campaigns");
await waitForSelector(driver, "#campaign-select");
await clickSelector(driver, ".menu-toggle");
await clickText(driver, ".menu-item", "Play");
await waitForUrl(driver, "/play");
await waitForSelector(driver, "#skill-filter-input");
await driver.navigate().refresh();
await waitForUrl(driver, "/play");
await waitForSelector(driver, "#skill-filter-input");
await clickSelector(driver, ".menu-toggle");
await clickText(driver, ".menu-item", "Campaign Management");
await waitForUrl(driver, "/campaigns");
await waitForSelector(driver, "#campaign-select");
})
},
{
name: "non-admin users are redirected away from admin route",
run: async () => withDriver({}, async (driver) => {
const username = uniqueName("admin-redirect");
const { sessionCookie } = await registerAndLoginApi(username, "Admin Redirect");
await seedAuthenticatedBrowser(driver, sessionCookie);
await driver.get(absoluteUrl("/admin"));
await waitForUrl(driver, "/play");
await waitForText(driver, "Campaign Log");
assert.equal(await hasSelector(driver, ".management-list"), false);
})
},
{
name: "successful login transitions to play workspace",
run: async () => withDriver({}, async (driver) => {