From fd98f46267dac278b81d60da00e244d3fbce2505 Mon Sep 17 00:00:00 2001 From: funman300 Date: Fri, 10 Jul 2026 11:07:08 -0700 Subject: [PATCH] test(e2e): update replay payload specs to schema v4 PR #170 changed the web replay payload (moves list -> embedded session recording) but missed these Playwright specs, which only run on master pushes and so failed post-merge. Assertions now match the v4 shape: schema_version 4, recording.initial_state present, moves at recording.instructions. Verified locally against a real server with freshly built wasm bundles: full suite 18/18 green, including the five play_canvas specs. Co-Authored-By: Claude Fable 5 --- solitaire_server/e2e/tests/gameplay_review.spec.js | 6 +++--- solitaire_server/e2e/tests/smoke.spec.js | 14 +++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/solitaire_server/e2e/tests/gameplay_review.spec.js b/solitaire_server/e2e/tests/gameplay_review.spec.js index 5aa8e8c..c6ff6a2 100644 --- a/solitaire_server/e2e/tests/gameplay_review.spec.js +++ b/solitaire_server/e2e/tests/gameplay_review.spec.js @@ -69,9 +69,9 @@ test("draw-mode toggle affects replay payload draw_mode", async ({ page }) => { const payload = await page.evaluate(() => window.__FERROUS_DEBUG__.replayPayload()); expect(payload.draw_mode).toBe("DrawThree"); - expect(payload.schema_version).toBe(2); - expect(Array.isArray(payload.moves)).toBeTruthy(); - expect(payload.moves.length).toBeGreaterThan(0); + expect(payload.schema_version).toBe(4); + expect(Array.isArray(payload.recording?.instructions)).toBeTruthy(); + expect(payload.recording.instructions.length).toBeGreaterThan(0); }); test("autonomous play keeps invariants stable across seed batch", async ({ page }) => { diff --git a/solitaire_server/e2e/tests/smoke.spec.js b/solitaire_server/e2e/tests/smoke.spec.js index f09eb20..f5dcb55 100644 --- a/solitaire_server/e2e/tests/smoke.spec.js +++ b/solitaire_server/e2e/tests/smoke.spec.js @@ -47,7 +47,7 @@ test("debug failure report contains replay diagnostics", async ({ page }) => { expect(report.invariants).toBeTruthy(); }); -test("replay payload builder exports schema-v2 moves", async ({ page }) => { +test("replay payload builder exports a schema-v4 recording", async ({ page }) => { await page.goto("/play-classic?seed=42"); await page.waitForFunction(() => typeof window.__FERROUS_DEBUG__ === "object"); @@ -57,10 +57,14 @@ test("replay payload builder exports schema-v2 moves", async ({ page }) => { .poll(async () => await page.evaluate(() => window.__FERROUS_DEBUG__.replayPayload() !== null)) .toBe(true); const payload = await page.evaluate(() => window.__FERROUS_DEBUG__.replayPayload()); - expect(payload.schema_version).toBe(2); + // Schema v4: the wasm layer assembles the whole payload; the deal is + // embedded in `recording` and moves live at recording.instructions. + expect(payload.schema_version).toBe(4); expect(payload.draw_mode).toMatch(/Draw(One|Three)/); expect(payload.mode).toBe("Classic"); - expect(Array.isArray(payload.moves)).toBeTruthy(); - expect(payload.moves.length).toBeGreaterThan(0); - expect(payload.win_move_index).toBe(payload.moves.length - 1); + expect(payload.recording).toBeTruthy(); + expect(payload.recording.initial_state).toBeTruthy(); + expect(Array.isArray(payload.recording.instructions)).toBeTruthy(); + expect(payload.recording.instructions.length).toBeGreaterThan(0); + expect(payload.win_move_index).toBe(payload.recording.instructions.length - 1); }); -- 2.47.3