import * as assert from 'assert'; import { buildDedupOnlyPrompt } from '../src/rules/converters/dedup-prompt'; import { buildKnownRulesSection } from '../src/rules/converters/known-rules'; import type { CustomRule } from '../src/types'; const customRules: CustomRule[] = [ { id: 'no-todo', severity: 'warning', description: '禁止提交 TODO 注释', message: '发现 TODO 注释' }, ]; const singleYaml = [ '- id: no-todo', ' severity: warning', ' description: 禁止提交 TODO 注释', ' message: 发现 TODO 注释', ].join('\n'); suite('Dedup Prompt Tests', () => { test('buildDedupOnlyPrompt 同时包含静态规则与自定义规则', () => { const { system, user } = buildDedupOnlyPrompt(singleYaml, customRules); assert.ok(system.includes('pmd/AvoidDeeplyNestedIfStmts'), '应包含 PMD 静态规则'); assert.ok(system.includes('eslint/no-unused-vars'), '应包含 ESLint 静态规则'); assert.ok(system.includes('sqlfluff/AL01'), '应包含 SQLFluff 静态规则'); assert.ok(system.includes('custom/no-todo'), '应包含自定义规则'); assert.ok(system.includes('duplicateLevel'), '应包含去重字段说明'); assert.ok(user.includes('no-todo'), 'user 侧应包含待去重规则'); }); test('无自定义规则时仍包含静态规则', () => { const { system } = buildDedupOnlyPrompt(singleYaml, []); assert.ok(system.includes('pmd/AvoidDeeplyNestedIfStmts')); assert.ok(!system.includes('- custom/'), '无自定义规则时不应出现 custom/ 规则条目'); }); test('buildKnownRulesSection 三语文案齐全', () => { const section = buildKnownRulesSection(customRules); assert.ok(section.startsWith('## '), '应以清单标题开头'); assert.ok(section.includes('### pmd'), '应包含 linter 分组标题'); assert.ok(section.includes('### 已导入的自定义规则'), '应包含自定义规则分组标题'); assert.ok(section.includes('- custom/no-todo: 禁止提交 TODO 注释'), '应包含 custom/ 前缀规则行'); }); });