oh-my-muse/muse-studio/e2e/knowledge-publish-precheck.spec.ts
zizi 6dcabf69fb feat(solo): 收口治理入口并裁剪 studio 表面
完成 2.0.0 S4 的外部 AI、admin、account 与 solo SQL 收口,并推进 S5 studio 市场/handoff/旧编辑器入口裁剪。S5 的前端单测、构建与 route-only e2e 已留证;MSW-off 创作主线 e2e 仍因本地后端活体启动口径待修正,已在总账标为未完成验收。
2026-07-08 11:45:26 +08:00

47 lines
1.9 KiB
TypeScript

import { expect, test, type Page } from '@playwright/test';
test.skip(true, '2.0.0 S5 单人版已移除市场、handoff 或多用户前端入口,本 spec 隔离保留待恢复');
/**
* 知识库「发布到市场」可发布性预检 e2e(诚实处理 blocked,真实后端,MSW off)。
*
* 前置:vite VITE_API_MOCK=false、真实 muse-server 48080、muse_slice_live 有自建知识库(活体绑定测试KB)。
* 目的:知识库工作台点自建库「发布」→ 源侧 publish-prechecks → 因平台外部权利隐私校验器未配置而恒 blocked,
* UI 如实呈现受阻态(不伪造可发布)。直打真后端(反假绿)。
*/
const TOKEN = 'test1';
async function seedToken(page: Page): Promise<void> {
await page.addInitScript((t) => {
window.localStorage.setItem('accessToken', t);
window.localStorage.setItem('tenantId', '1');
}, TOKEN);
}
test('知识库发布可发布性预检 → 诚实展示受阻(真实后端)', async ({ page }) => {
await seedToken(page);
await page.goto('/knowledge');
// 「我创建的」默认页签;自建库展示「发布」入口。
const publishBtn = page.getByRole('button', { name: /发布知识库/ }).first();
await expect(publishBtn).toBeVisible({ timeout: 15_000 });
// 点发布 → 弹层自动预检,捕获真实 publish-prechecks 响应(打真后端,非 mock)。
const [resp] = await Promise.all([
page.waitForResponse(
(r) => /\/knowledge-bases\/\d+\/publish-prechecks$/.test(r.url()) && r.request().method() === 'POST',
{ timeout: 15_000 }
),
publishBtn.click(),
]);
// Yudao 口径:HTTP 200 + code:0;诚实:precheck 恒 blocked(外部校验器未配置)。
expect(resp.status()).toBe(200);
const body = await resp.json();
expect(body.code).toBe(0);
expect(body.data?.blocked).toBe(true);
// UI 如实呈现受阻结论(不伪造可发布)。
await expect(page.getByText('⚠️ 暂不可发布')).toBeVisible({ timeout: 15_000 });
});