Add retry smoke coverage
This commit is contained in:
@@ -89,6 +89,54 @@ test("Rolemaster open-ended roll detail renders specialized dice chips", async (
|
||||
await expect(page.locator(".log-detail .roll-dice-strip")).toBeVisible();
|
||||
});
|
||||
|
||||
test("Rolemaster automatic retry badge shows before detail expands", async ({ page, context }) => {
|
||||
const username = `rm-retry-${Date.now()}`;
|
||||
await registerAndLogin(context.request, username, "Rolemaster Retry Smoke");
|
||||
|
||||
const campaign = await postJson(context.request, "/api/campaigns", {
|
||||
name: "Rolemaster Retry Smoke",
|
||||
rulesetId: "rolemaster"
|
||||
});
|
||||
const character = await postJson(context.request, "/api/characters", {
|
||||
name: "Retry Hero",
|
||||
campaignId: campaign.id
|
||||
});
|
||||
const skill = await postJson(context.request, `/api/characters/${character.id}/skills`, {
|
||||
name: "Retry Sight",
|
||||
diceRollDefinition: "d100!+10",
|
||||
wildDice: 0,
|
||||
allowFumble: false,
|
||||
fumbleRange: 5,
|
||||
rolemasterAutoRetry: true
|
||||
});
|
||||
|
||||
let retriedRoll = null;
|
||||
for (let attempt = 0; attempt < 10; attempt += 1) {
|
||||
const roll = await postJson(context.request, `/api/skills/${skill.id}/roll`, { visibility: "public" });
|
||||
if (roll.breakdown.includes("retry(+")) {
|
||||
retriedRoll = roll;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
expect(retriedRoll, "expected a retry-enabled Rolemaster roll within 10 attempts").not.toBeNull();
|
||||
|
||||
await page.goto("/");
|
||||
await expect(page.getByText("Campaign Log")).toBeVisible();
|
||||
|
||||
const retryEntry = page.locator(".log-panel .log-entry").filter({ hasText: "retry +" }).last();
|
||||
await expect(retryEntry).toBeVisible();
|
||||
await expect(retryEntry.locator(".log-event-badge")).toContainText([/Retry \+(5|10)/]);
|
||||
await expect(retryEntry.locator(".log-summary-text")).toContainText(/retry \+(5|10)/);
|
||||
await expect(retryEntry.locator(".log-detail")).toHaveCount(0);
|
||||
|
||||
await retryEntry.locator(".log-entry-toggle").click();
|
||||
const detailDice = retryEntry.locator(".log-detail .die-chip");
|
||||
await expect(detailDice).toHaveCount(2);
|
||||
await expect(detailDice.nth(0)).toHaveAttribute("title", /attempt 1/i);
|
||||
await expect(detailDice.nth(1)).toHaveAttribute("title", /retry attempt 2/i);
|
||||
});
|
||||
|
||||
test("newly rolled log entry auto-expands", async ({ page, context }) => {
|
||||
const username = `d6-log-${Date.now()}`;
|
||||
await registerAndLogin(context.request, username, "D6 Auto Expand");
|
||||
@@ -174,7 +222,8 @@ test("Rolemaster UI exposes conditional create and edit fields", async ({ page,
|
||||
diceRollDefinition: "d100!+25",
|
||||
wildDice: 0,
|
||||
allowFumble: false,
|
||||
fumbleRange: 5
|
||||
fumbleRange: 5,
|
||||
rolemasterAutoRetry: true
|
||||
});
|
||||
|
||||
await page.goto("/");
|
||||
@@ -203,14 +252,27 @@ test("Rolemaster UI exposes conditional create and edit fields", async ({ page,
|
||||
await expect(page.locator("#skill-create-expression")).toHaveValue("d100!+15");
|
||||
await page.locator("#skill-create-expression").fill("15d10");
|
||||
await expect(page.locator("#skill-create-fumble-range")).toHaveCount(0);
|
||||
await expect(page.getByLabel("Automatic retry")).toHaveCount(0);
|
||||
await page.locator("#skill-create-expression").fill("d100!+25");
|
||||
await expect(page.locator("#skill-create-fumble-range")).toBeVisible();
|
||||
await expect(page.getByLabel("Automatic retry")).toBeVisible();
|
||||
await page.getByLabel("Automatic retry").check();
|
||||
await page.locator("#skill-create-expression").fill("d10");
|
||||
await expect(page.getByLabel("Automatic retry")).toHaveCount(0);
|
||||
await page.locator("#skill-create-expression").fill("d100!+25");
|
||||
await expect(page.getByLabel("Automatic retry")).toBeVisible();
|
||||
await expect(page.getByLabel("Automatic retry")).not.toBeChecked();
|
||||
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-fumble-range")).toHaveValue("5");
|
||||
await expect(page.getByLabel("Automatic retry")).toBeChecked();
|
||||
await page.locator("#skill-edit-expression").fill("d10");
|
||||
await expect(page.locator("#skill-edit-fumble-range")).toHaveCount(0);
|
||||
await expect(page.getByLabel("Automatic retry")).toHaveCount(0);
|
||||
await page.locator("#skill-edit-expression").fill("d100!+25");
|
||||
await expect(page.getByLabel("Automatic retry")).toBeVisible();
|
||||
await expect(page.getByLabel("Automatic retry")).not.toBeChecked();
|
||||
await page.getByRole("button", { name: "Cancel" }).click();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user