Add ruleset-aware Rolemaster editors
This commit is contained in:
@@ -6,6 +6,22 @@ async function postJson(request, url, data) {
|
||||
return await response.json();
|
||||
}
|
||||
|
||||
async function registerAndLogin(request, username, displayName) {
|
||||
await postJson(request, "/api/auth/register", {
|
||||
username,
|
||||
password: "Password123",
|
||||
displayName
|
||||
});
|
||||
|
||||
const loginResponse = await request.post("/api/auth/login", {
|
||||
data: {
|
||||
username,
|
||||
password: "Password123"
|
||||
}
|
||||
});
|
||||
expect(loginResponse.ok()).toBeTruthy();
|
||||
}
|
||||
|
||||
test("home page loads auth entry points", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
|
||||
@@ -20,19 +36,7 @@ test("Rolemaster open-ended roll detail renders specialized dice chips", async (
|
||||
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();
|
||||
await registerAndLogin(context.request, username, displayName);
|
||||
|
||||
const campaign = await postJson(context.request, "/api/campaigns", {
|
||||
name: "Rolemaster Smoke",
|
||||
@@ -63,3 +67,67 @@ test("Rolemaster open-ended roll detail renders specialized dice chips", async (
|
||||
await expect(rolemasterFollowUpDice.first()).toBeVisible();
|
||||
await expect(page.locator(".log-detail .roll-dice-strip")).toBeVisible();
|
||||
});
|
||||
|
||||
test("Rolemaster UI exposes conditional create and edit fields", async ({ page, context }) => {
|
||||
const username = `rm-ui-${Date.now()}`;
|
||||
await registerAndLogin(context.request, username, "Rolemaster UI");
|
||||
|
||||
const campaign = await postJson(context.request, "/api/campaigns", {
|
||||
name: "Rolemaster UI Campaign",
|
||||
rulesetId: "rolemaster"
|
||||
});
|
||||
const character = await postJson(context.request, "/api/characters", {
|
||||
name: "UI Character",
|
||||
campaignId: campaign.id
|
||||
});
|
||||
await postJson(context.request, `/api/characters/${character.id}/skill-groups`, {
|
||||
name: "Awareness",
|
||||
diceRollDefinition: "d100!+15",
|
||||
wildDice: 0,
|
||||
allowFumble: false,
|
||||
fumbleRange: 5
|
||||
});
|
||||
await postJson(context.request, `/api/characters/${character.id}/skills`, {
|
||||
name: "Perception",
|
||||
diceRollDefinition: "d100!+25",
|
||||
wildDice: 0,
|
||||
allowFumble: false,
|
||||
fumbleRange: 5
|
||||
});
|
||||
|
||||
await page.goto("/");
|
||||
await expect(page.locator("#workspace-screen-menu-button")).toBeVisible();
|
||||
|
||||
await page.locator("#workspace-screen-menu-button").click();
|
||||
await page.getByRole("menuitem", { name: "Campaign Management" }).click();
|
||||
await page.getByRole("button", { name: "Add campaign" }).click();
|
||||
await expect(page.locator("#campaign-ruleset option[value='rolemaster']")).toHaveText("Rolemaster");
|
||||
await page.getByRole("button", { name: "Cancel" }).click();
|
||||
|
||||
await page.locator("#workspace-screen-menu-button").click();
|
||||
await page.getByRole("menuitem", { name: "Play" }).click();
|
||||
|
||||
await page.getByRole("button", { name: "Add group" }).click();
|
||||
await expect(page.locator("#skill-group-rolemaster-roll-type")).toBeVisible();
|
||||
await expect(page.locator("#skill-group-wild-dice")).toHaveCount(0);
|
||||
await page.locator("#skill-group-rolemaster-roll-type").selectOption("open-ended-percentile");
|
||||
await expect(page.locator("#skill-group-fumble-range")).toBeVisible();
|
||||
await page.locator("#skill-group-fumble-range").fill("");
|
||||
await page.getByRole("button", { name: "Create Group" }).click();
|
||||
await expect(page.getByText("Open-ended Rolemaster groups require a fumble range.")).toBeVisible();
|
||||
await page.getByRole("button", { name: "Cancel" }).click();
|
||||
|
||||
await page.getByRole("button", { name: "Add skill" }).first().click();
|
||||
await expect(page.locator("#skill-create-rolemaster-roll-type")).toBeVisible();
|
||||
await page.locator("#skill-create-rolemaster-roll-type").selectOption("percentile");
|
||||
await expect(page.locator("#skill-create-fumble-range")).toHaveCount(0);
|
||||
await page.locator("#skill-create-rolemaster-roll-type").selectOption("open-ended-percentile");
|
||||
await expect(page.locator("#skill-create-fumble-range")).toBeVisible();
|
||||
await page.getByRole("button", { name: "Cancel" }).click();
|
||||
|
||||
await page.locator("button[title='Edit skill']").first().click();
|
||||
await expect(page.locator("#skill-edit-expression")).toHaveValue("d100!+25");
|
||||
await expect(page.locator("#skill-edit-rolemaster-roll-type")).toHaveValue("open-ended-percentile");
|
||||
await expect(page.locator("#skill-edit-fumble-range")).toHaveValue("5");
|
||||
await page.getByRole("button", { name: "Cancel" }).click();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user