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);
});