dcdc8d1ddd
全栈知识治理平台首次入库(P1-P10 + 发布链路模拟验证闭环): - 治理核心:源目录/变更集/人工审核/发布批次/发布执行(fail-closed 闸口) - 测试通道:WeKnora 测试 KB 上传/轮询/验收;poll 完成时写入 parser_generation/index_generation,修复 manual/seed 路径发布闸口永久拦截 - 发布适配器 v071(本地 source=测试角色 / 云端 target=生产角色 模拟验证通过): * ES 导出/导入 mapping 自适应(.keyword 子字段、可选 tenant_id) * OSS locator 支持嵌套 scheme;chunks.seq_id 由目标序列分配 * bundle 归档同身份重试原子替换;verifier 按 bundle chunk_type 计数 * 回滚 job payload 支持 prior_execution_id(strict 解码) - 三通道发布+回滚演练实测:publish 4/4 verified,检索命中, rollback 4/4 rolled_back,目标端 PG is_enabled=false、ES is_enabled=false - 前端 A·Data-console 风格全站统一,120 用例通过 - 门禁:go vet / go test 全包通过,gofmt 干净
27 lines
2.6 KiB
TypeScript
27 lines
2.6 KiB
TypeScript
import { renderToStaticMarkup } from 'react-dom/server'
|
|
import { describe,expect,it,vi } from 'vitest'
|
|
import { SourceLinkManagerView } from './SourceLinkManager'
|
|
import type { CatalogSource } from './sourceCatalog'
|
|
const sources:CatalogSource[]=[
|
|
{connection_id:'ding',source_type:'dingtalk',name:'公司级技术支持知识库',root_node_id:'r1',folder_count:8,file_count:3468,observed_at:'2026-09-08T00:00:00Z',snapshot_only:true,snapshot_status:'ready',last_refresh_duration_ms:0},
|
|
{connection_id:'pp',source_type:'pp',name:'PP资料下载中心',root_node_id:'r2',folder_count:64,file_count:613,observed_at:'2026-09-08T00:00:00Z',snapshot_only:true,snapshot_status:'ready',last_refresh_duration_ms:0},
|
|
{connection_id:'alist',source_type:'alist',name:'国内工业',root_node_id:'r3',folder_count:1688,file_count:4880,observed_at:'2026-09-08T00:00:00Z',snapshot_only:true,snapshot_status:'ready',last_refresh_duration_ms:0},
|
|
]
|
|
describe('SourceLinkManagerView',()=>{
|
|
it('shows understandable URL credential and login fields without accepting real secrets locally',()=>{
|
|
const html=renderToStaticMarkup(<SourceLinkManagerView sources={sources} selected={sources[0]} validated={false} loading={false} error={null} onSelect={vi.fn()} onValidate={vi.fn()} onRefresh={vi.fn()} />)
|
|
for(const text of ['来源链接','本地模拟配置','公司级技术支持知识库','PP资料下载中心','国内工业','知识库链接','认证方式','专用浏览器扫码登录','Key或Token','本地模拟阶段不接收真实Key','模拟登录并验证目录','不保存真实Key'])expect(html).toContain(text)
|
|
expect(html).not.toContain('secret_ref')
|
|
expect(html).not.toContain('base_url')
|
|
})
|
|
it('separates an AList site address from its starting directory and labels simulated status honestly',()=>{
|
|
const html=renderToStaticMarkup(<SourceLinkManagerView sources={sources} selected={sources[2]} validated={false} loading={false} error={null} onSelect={vi.fn()} onValidate={vi.fn()} onRefresh={vi.fn()} />)
|
|
for(const text of ['AList站点地址','起始目录','/国内工业','模拟验证待执行','不下载文件内容,只读取目录和元数据'])expect(html).toContain(text)
|
|
expect(html).not.toContain('实时连接待验证')
|
|
})
|
|
it('does not show a successful zero-source state after errors',()=>{
|
|
const html=renderToStaticMarkup(<SourceLinkManagerView sources={[]} selected={null} validated={false} loading={false} error="加载失败" onSelect={vi.fn()} onValidate={vi.fn()} onRefresh={vi.fn()} />)
|
|
expect(html).toContain('加载失败');expect(html).not.toContain('尚无来源链接')
|
|
})
|
|
})
|