- src/muse 新版全模块(装配/共享/上下文/任务运行/作品规划/故事世界/正文写作/审校修订/知识方法/作者经验/效果评测/交付连载/资料研究/正式变更/元数据/接入/基础设施/编排)+ 测试树(单元/契约/集成/架构/迁移/端到端/夹具) - 129 项功能全部实现与自动验证(功能覆盖.json/矩阵),含 W31 补齐的规则与代价/节奏安排/伏笔与承诺 - 旧实现按处置清单退出(702 条中 324 删,保护合同与未迁移条目留存有据);web/app.py 旧工作台退役,新工作台为唯一写入口 - 数据库/旧库迁移:真实旧库内容批次迁移链(端点守卫/PG作品正文映射/质量资产缺省投影) - 运行手册 docs/运行手册.md;W30 本机服务阶段一已运行(infra PG 为正式内容权威) - R2 执行证据与私有运行材料在 .agents.local/改造/R2-20260909/(不入库)
52 lines
2.3 KiB
TypeScript
52 lines
2.3 KiB
TypeScript
import { readFileSync } from "node:fs";
|
||
import { expect, test } from "@playwright/test";
|
||
|
||
test("NC-browser-author-preference:原稿反馈经审阅确认并撤回", async ({
|
||
page,
|
||
}, info) => {
|
||
const password = process.env.MUSE_AUTHOR_PASSWORD_FILE;
|
||
const feedback = process.env.MUSE_FEEDBACK_ID;
|
||
if (!password || !feedback) throw new Error("需要隔离反馈和作者口令");
|
||
const errors: string[] = [];
|
||
page.on("pageerror", (e) => errors.push(e.message));
|
||
await page.goto("/");
|
||
await page.getByLabel("访问口令").fill(readFileSync(password, "utf8").trim());
|
||
await page.getByRole("button", { name: "进入工作台" }).click();
|
||
await page.goto(`/feedback/${feedback}`);
|
||
await expect(
|
||
page.getByRole("heading", { name: "原稿", exact: true }),
|
||
).toBeVisible();
|
||
await expect(page.getByText(/原句「保留」/)).toBeVisible();
|
||
await expect(page.getByText(/改过的首句/)).toBeVisible();
|
||
await page.getByLabel("主题", { exact: true }).fill("浏览器偏好");
|
||
await page.getByLabel("推断建议").fill("用动作体现犹疑,保留人物停顿。");
|
||
await page.getByRole("button", { name: "保存为待确认偏好" }).click();
|
||
await expect(
|
||
page.getByText("已保存为待确认偏好,尚未长期生效。"),
|
||
).toBeVisible();
|
||
await page.screenshot({
|
||
path: info.outputPath("反馈对照.png"),
|
||
fullPage: true,
|
||
});
|
||
await page.getByRole("link", { name: "查看并确认作者偏好 →" }).click();
|
||
const card = page.getByRole("region", { name: "浏览器偏好", exact: true });
|
||
await expect(card.getByText(/待确认/)).toBeVisible();
|
||
await expect(card.getByRole("button", { name: "确认这项偏好" })).toHaveCount(
|
||
0,
|
||
);
|
||
await card.getByRole("button", { name: "核对确认内容" }).click();
|
||
await card.getByRole("button", { name: "确认这项偏好" }).click();
|
||
await expect(card.getByText(/生效中/)).toBeVisible();
|
||
await page.reload();
|
||
await expect(card.getByText(/生效中/)).toBeVisible();
|
||
await page.screenshot({
|
||
path: info.outputPath("偏好确认.png"),
|
||
fullPage: true,
|
||
});
|
||
await card.getByRole("button", { name: "撤回这项偏好" }).click();
|
||
await expect(card.getByText(/已撤回/)).toBeVisible();
|
||
await page.reload();
|
||
await expect(card.getByText(/已撤回/)).toBeVisible();
|
||
expect(errors).toEqual([]);
|
||
});
|