import { describe, expect, it } from "vitest"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; const HOME_TSX = readFileSync( resolve(__dirname, "..", "src", "pages", "Home.tsx"), "utf-8", ); const SLIDE_CANVAS_TSX = readFileSync( resolve(__dirname, "..", "src", "components", "SlideCanvas.tsx"), "utf-8", ); function sliceHandleGenerateBody(source: string): string { const startMarker = "const handleGenerate = useCallback(async () =>"; const startIdx = source.indexOf(startMarker); if (startIdx === -1) throw new Error("handleGenerate declaration not found"); const afterStart = source.slice(startIdx + startMarker.length); const nextDeclIdx = afterStart.search(/\n {2}const [A-Za-z]/); return nextDeclIdx === -1 ? afterStart : afterStart.slice(0, nextDeclIdx); } const HANDLE_GENERATE_BODY = sliceHandleGenerateBody(HOME_TSX); describe("#98 Task 4 render stale guard", () => { it("clears prior runMeta before invoking runPipeline", () => { const clearIdx = HANDLE_GENERATE_BODY.indexOf("setRunMeta(null)"); const loadingIdx = HANDLE_GENERATE_BODY.indexOf("isLoading: true"); const runPipelineIdx = HANDLE_GENERATE_BODY.indexOf("runPipeline("); expect(clearIdx).toBeGreaterThan(-1); expect(loadingIdx).toBeGreaterThan(-1); expect(runPipelineIdx).toBeGreaterThan(-1); expect(clearIdx).toBeLessThan(runPipelineIdx); expect(loadingIdx).toBeLessThan(runPipelineIdx); }); it("does not pass a finalHtmlUrl to SlideCanvas while a pipeline run is loading", () => { expect(HOME_TSX).toContain( "finalHtmlUrl={state.isLoading ? undefined : runMeta?.final_html_url}", ); }); it("forces iframe remounts by keying the iframe on embeddedSrc", () => { expect(SLIDE_CANVAS_TSX).toContain("key={embeddedSrc}"); }); it("resets iframe-derived overlay state on render url, loading, or pending-layout changes", () => { expect(SLIDE_CANVAS_TSX).toContain( "}, [finalHtmlUrl, isPipelineRunning, isPendingLayout]);", ); expect(SLIDE_CANVAS_TSX).toContain("setMeasuredZones({});"); expect(SLIDE_CANVAS_TSX).toContain("setMeasuredImages({});"); expect(SLIDE_CANVAS_TSX).toContain("setSelectedImageId(null);"); expect(SLIDE_CANVAS_TSX).toContain("setDragOverZoneId(null);"); expect(SLIDE_CANVAS_TSX).toContain("setEditMode(\"off\");"); }); });