Implement the 023-clear-encounter feature that adds a clear encounter button with confirmation dialog to remove all combatants and reset round/turn counters, with the cleared state persisting across page refreshes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Lukas
2026-03-09 13:43:42 +01:00
parent 11c4c0237e
commit 24198c25f1
19 changed files with 703 additions and 16 deletions

View File

@@ -97,12 +97,17 @@ describe("loadEncounter", () => {
expect(loadEncounter()).toBeNull();
});
it("returns null for invalid encounter data (empty combatants)", () => {
it("returns empty encounter for cleared state (empty combatants)", () => {
localStorage.setItem(
STORAGE_KEY,
JSON.stringify({ combatants: [], activeIndex: 0, roundNumber: 1 }),
);
expect(loadEncounter()).toBeNull();
const result = loadEncounter();
expect(result).toEqual({
combatants: [],
activeIndex: 0,
roundNumber: 1,
});
});
it("returns null for out-of-bounds activeIndex", () => {
@@ -198,12 +203,17 @@ describe("loadEncounter", () => {
expect(loadEncounter()).toBeNull();
});
it("returns null for zero combatants (domain validation)", () => {
it("returns empty encounter for zero combatants (cleared state)", () => {
localStorage.setItem(
STORAGE_KEY,
JSON.stringify({ combatants: [], activeIndex: 0, roundNumber: 1 }),
);
expect(loadEncounter()).toBeNull();
const result = loadEncounter();
expect(result).toEqual({
combatants: [],
activeIndex: 0,
roundNumber: 1,
});
});
it("round-trip preserves combatant AC value", () => {