// SPEC: PJ2026-010404 项目管理 draft-2026-06-25-p0-project-management-mdtodo. // Responsibility: Fake-server browser regression for project root and MDTODO pages. import { expect, saveScreenshot, test } from "../fixtures/test"; test.describe("project management pages", () => { test("renders project root and launches Workbench through public DTOs", async ({ page }, testInfo) => { await page.goto("/projects"); await expect(page.getByTestId("project-management-root")).toBeVisible(); await expect(page.getByTestId("project-management-summary")).toContainText("Projects"); await expect(page.getByTestId("project-list")).toContainText("HWLAB MDTODO"); await expect(page.getByTestId("project-source-list")).toContainText("mdtodo-file-tree"); await expect(page.getByText("[redacted]")).toHaveCount(0); await page.getByTestId("open-mdtodo-page").click(); await expect(page).toHaveURL(/\/projects\/mdtodo/u); await expect(page.getByTestId("project-management-mdtodo")).toBeVisible(); await expect(page.getByTestId("mdtodo-source-list")).toContainText("HWLAB MDTODO"); await expect(page.getByTestId("mdtodo-file-list")).toContainText("项目管理任务"); await expect(page.getByTestId("mdtodo-task-tree")).toContainText("实现项目根导航"); await expect(page.getByTestId("mdtodo-task-detail")).toContainText("mdtodo:hwlab-v03-mdtodo:file_plan:t1"); await expect(page.getByTestId("mdtodo-workbench-link-summary")).toContainText("ses_project_seed"); await expect(page.getByTestId("mdtodo-workbench-launch")).toBeEnabled(); await expect(page.locator("iframe")).toHaveCount(0); await saveScreenshot(page, testInfo, "project-management-mdtodo"); await page.getByTestId("mdtodo-workbench-launch").click(); await expect(page).toHaveURL(/\/workbench\/sessions\/ses_project_launch_/u); await expect(page.locator("#workspace")).toBeVisible(); const sessionId = page.url().match(/\/workbench\/sessions\/([^/?#]+)/u)?.[1] ?? ""; expect(sessionId).toMatch(/^ses_project_launch_/u); const sessionDetail = await page.request.get(`/v1/workbench/sessions/${encodeURIComponent(sessionId)}`); expect(sessionDetail.ok()).toBeTruthy(); const sessionPayload = await sessionDetail.json(); expect(sessionPayload.session?.launchContext?.projectId ?? sessionPayload.session?.metadata?.launchContext?.projectId).toBe("project_hwlab_v03"); expect(sessionPayload.session?.launchContext?.taskRef ?? sessionPayload.session?.metadata?.launchContext?.taskRef).toBe("mdtodo:hwlab-v03-mdtodo:file_plan:t1"); const links = await page.request.get("/v1/project-management/workbench-links?taskRef=mdtodo:hwlab-v03-mdtodo:file_plan:t1"); expect(links.ok()).toBeTruthy(); const linksPayload = await links.json(); expect(linksPayload.links.some((link: { sessionId?: string }) => link.sessionId === sessionId)).toBeTruthy(); await saveScreenshot(page, testInfo, "project-management-workbench-launch"); }); });