Files
prop-ai-hr/frontend/src/utils/data-quality-governance-contract.test.ts
T

53 lines
2.5 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
const read = (path: string) => readFileSync(resolve(process.cwd(), path), 'utf8');
describe('数据质量治理管理端契约', () => {
it('历史纳管必须先走只读预览再执行写入', () => {
const api = read('src/api/aihr/processing.ts');
const page = read('src/views/knowledge/processing.vue');
expect(api).toContain("url: '/api/knowledge/quality/legacy/preview'");
expect(api).toContain("method: 'get'");
expect(page).toContain('await previewLegacyQualityAssets(50)');
expect(page).toContain('不会自动批准或恢复生产检索');
expect(page.indexOf('await previewLegacyQualityAssets(50)')).toBeLessThan(page.indexOf('await stageLegacyQualityAssets(50)'));
});
it('术语采用草稿、人工批准、驳回、修订和停用流程', () => {
const api = read('src/api/aihr/processing.ts');
const page = read('src/views/knowledge/processing.vue');
expect(api).toContain('/api/knowledge/quality/glossary/${id}/approve');
expect(api).toContain('/api/knowledge/quality/glossary/${id}/reject');
expect(api).toContain('/api/knowledge/quality/glossary/${id}/deprecate');
expect(page).toContain('人工批准前不会参与检索');
expect(page).toContain('活动版本只扩展检索词,不作为回答事实');
expect(page).toContain('openGlossaryDraft(row)');
});
it('keeps review publishing disabled until quality details finish loading', () => {
const page = read('src/views/knowledge/processing.vue');
expect(page).toContain('v-loading="qualityDetailLoading"');
expect(page).toContain('!qualityDetailLoading && !qualityIssues.length');
expect(page).toContain(
':disabled="qualityDetailLoading || unresolvedQualityConflicts.length > 0 || !semanticAnalysisComplete || !privacyDerivativeReady"'
);
expect(page).toContain('if (selectedQualityAsset.value?.id !== asset.id) return;');
});
it('shows only the governed privacy derivative and blocks versions without a residual scan', () => {
const api = read('src/api/aihr/processing.ts');
const page = read('src/views/knowledge/processing.vue');
expect(api).toContain('/api/knowledge/quality/assets/${assetId}/privacy-preview');
expect(page).toContain('脱敏派生版本');
expect(page).toContain('该历史版本尚未生成脱敏派生内容');
expect(page).toContain("['CLEAN', 'REDACTED'].includes");
expect(page).not.toContain('originalContentPreview');
});
});