25 lines
3.5 KiB
JavaScript
25 lines
3.5 KiB
JavaScript
const assert=require('node:assert/strict'),fs=require('node:fs'),path=require('node:path');
|
|
const root=path.resolve(__dirname,'..'),read=f=>fs.readFileSync(path.join(root,f),'utf8');
|
|
const library=read('src/components/xingbang/LeaseLibraryWorkbench.tsx'),pool=read('src/components/xingbang/KnowledgePools.tsx');
|
|
for(const label of ['条件筛选','自然语言','只读 SQL','预览筛选结果','确认加工范围','提炼 Skills','提炼 Rules'])assert.ok(library.includes(label),label);
|
|
for(const api of ['/library/cases','/library/queries','/library/selections','/library/extractions'])assert.ok(library.includes(api),api);
|
|
assert.ok(library.includes('case_ids'));assert.ok(library.includes('seq.current'));assert.ok(library.includes('setSelection(null)'));
|
|
assert.ok(pool.includes('webkitdirectory'));assert.ok(pool.includes('encodeFiles'));assert.ok(pool.includes('/library/skills/import'));assert.ok(pool.includes('history_derived'));
|
|
assert.ok(pool.includes('card.edited_by!==identity?.id'));assert.ok(pool.includes('card.evaluation?.passed'));
|
|
const folder=read('src/components/xingbang/SkillPackageDialog.tsx');assert.ok(folder.includes('showModal()'));assert.ok(folder.includes('SKILL.md'));assert.ok(folder.includes('/package'));assert.ok(folder.includes('/open'));assert.ok(folder.includes('downloadSkill'));
|
|
const identity=read('src/components/xingbang/IdentitySelector.tsx');assert.ok(!identity.includes('<option value="reviewer">'));
|
|
for(const f of ['experience-center','prescreen-workbench','trajectory-center'])assert.ok(read(`src/app/${f}/page.tsx`).includes('ra-app xb-v2'));
|
|
const review=read('src/components/xingbang/PrescreenAssembly.tsx');for(const label of ['数据卡片','Skills 卡片','Rules 卡片','保存装配草稿'])assert.ok(review.includes(label));
|
|
const trajectory=read('src/app/trajectory-center/page.tsx');for(const label of ['看判断过程','比较两次预审','核对会议结果'])assert.ok(trajectory.includes(label));
|
|
assert.ok(read('src/components/xingbang/RunComparison.tsx').includes('/run-comparison'));
|
|
const ring=read('src/components/xingbang/ProbabilitySummary.tsx');assert.ok(ring.includes('strokeDasharray'));assert.ok(ring.includes('尚未完成真实历史数据校准'));
|
|
assert.ok(!/\b(42|58|51|64)\b/.test(ring),'UI must not duplicate the scenario table');
|
|
const css=read('src/components/xingbang/v2-workbench.css');for(const rule of ['.xb-v2{','prefers-reduced-motion','focus-visible','.v2-dialog::backdrop','.v2-knowledge-card.from-ai'])assert.ok(css.includes(rule));
|
|
console.log('v2-sqlite-workbench-ui: PASS (source guards; not visual/browser verification)');
|
|
|
|
const configuration=read('src/app/configuration-center/page.tsx');for(const label of ['能力卡片','评审方案','模型与质检'])assert.ok(configuration.includes(label));
|
|
assert.ok(configuration.includes("identity?.role!=='admin'"));assert.ok(pool.includes('模板语言卡'));assert.ok(pool.includes('/visibility'));assert.ok(pool.includes('/library/configuration/cards'));
|
|
const quality=read('src/components/xingbang/QualitySettings.tsx');for(const mode of ['disabled','local','jev'])assert.ok(quality.includes(mode));assert.ok(quality.includes('type="password"'));assert.ok(quality.includes('allow_external'));
|
|
assert.ok(read('src/components/xingbang/BusinessAssistant.tsx').includes('library/inventory'));assert.ok(read('src/components/xingbang/PrescreenPanel.tsx').includes('<EvidenceInfluence'));
|
|
assert.ok(read('src/components/xingbang/TrajectoryQualityPanel.tsx').includes('/quality'));console.log('configuration-quality-ui: PASS (source guards only)');
|