import { expect, test } from "@playwright/test"; import { editCreatedSkillThroughStudio } from "./skill-studio-flow.js"; for (const hydrationMs of [0, 1500]) test(`Studio preserves the loaded file before editing (${hydrationMs}ms hydration)`, async ({ page }) => { const skillId = "owned-skill", skillName = "owned-qa-skill", marker = "Studio edit marker: owned-campaign"; let saved = "Verify checks.", saves = 0; await page.exposeFunction("saveSkill", (body: string) => { saved = body; saves++; }); await page.route("https://fixture.test/**", async route => { const studio = new URL(route.request().url()).pathname.includes("/skills/studio/"); const body = studio ? `
` : `
`; await route.fulfill({ contentType: "text/html", body }); }); await page.goto("https://fixture.test/QA/issues/QA-1"); await editCreatedSkillThroughStudio({ page, skillId, skillName, marker, deadlineAt: Date.now() + 8000, read: async () => ({ content: saved }) }); expect(saves).toBe(1); expect(saved).toContain("Verify checks."); expect(saved).toContain(marker); }); test("Studio never edits or saves an unhydrated file", async ({ page }) => { let saves = 0, inputs = 0; await page.exposeFunction("savedUnloadedFile", () => { saves++; }); await page.exposeFunction("editedUnloadedFile", () => { inputs++; }); await page.route("https://fixture.test/**", route => route.fulfill({ contentType: "text/html", body: `
` })); await page.goto("https://fixture.test/QA/issues/QA-1"); await expect(editCreatedSkillThroughStudio({ page, skillId: "id", skillName: "owned", marker: "New content", deadlineAt: Date.now() + 7000, read: async () => ({}) })).rejects.toThrow(); expect(inputs).toBe(0); expect(saves).toBe(0); });