const { test, expect } = require("@playwright/test"); async function postJson(request, url, data) { const response = await request.post(url, { data }); expect(response.ok()).toBeTruthy(); return await response.json(); } test("home page loads auth entry points", async ({ page }) => { await page.goto("/"); await expect(page.locator("h1")).toContainText("RpgRoller"); await expect(page.getByRole("heading", { name: "Register" })).toBeVisible(); await expect(page.getByRole("heading", { name: "Login" })).toBeVisible(); await expect(page.getByLabel("Username").first()).toBeVisible(); await expect(page.getByLabel("Password").nth(1)).toBeVisible(); }); test("Rolemaster open-ended roll detail renders specialized dice chips", async ({ page, context }) => { const username = `rm-${Date.now()}`; const displayName = "Rolemaster Smoke"; await postJson(context.request, "/api/auth/register", { username, password: "Password123", displayName }); const loginResponse = await context.request.post("/api/auth/login", { data: { username, password: "Password123" } }); expect(loginResponse.ok()).toBeTruthy(); const campaign = await postJson(context.request, "/api/campaigns", { name: "Rolemaster Smoke", rulesetId: "rolemaster" }); const character = await postJson(context.request, "/api/characters", { name: "Open Ender", campaignId: campaign.id }); const skill = await postJson(context.request, `/api/characters/${character.id}/skills`, { name: "Open Sight", diceRollDefinition: "d100!+85", wildDice: 0, allowFumble: false, fumbleRange: 95 }); await postJson(context.request, `/api/skills/${skill.id}/roll`, { visibility: "public" }); await page.goto("/"); await expect(page.getByText("Campaign Log")).toBeVisible(); const logEntry = page.locator(".log-panel .log-entry-toggle").first(); await expect(logEntry).toBeVisible(); await logEntry.click(); const rolemasterFollowUpDice = page.locator(".die-chip.rolemaster-open-ended-high, .die-chip.rolemaster-open-ended-low-subtract"); await expect(rolemasterFollowUpDice.first()).toBeVisible(); await expect(page.locator(".log-detail .roll-dice-strip")).toBeVisible(); });