| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import { describe, expect, it } from 'vitest'
- import { parseSourceRef, isKnowledgeRef } from '../src/repo/sourceRef'
- import { assertState, familyOf } from '../src/derive/states'
- import { resolveLayers } from '../src/config/resolve'
- describe('来源引用语法(格式规格 §7.2)', () => {
- it('仓内路径@版本', () => {
- const r = parseSourceRef('来源:大纲/卷规划/卷01/卷纲.md@5')
- expect(r).toEqual({ kind: '仓内', path: '大纲/卷规划/卷01/卷纲.md', version: '5' })
- })
- it('全角冒号兼容(B9 方言容忍)', () => {
- expect(parseSourceRef('来源:作品契约/契约.md@2')?.kind).toBe('仓内')
- })
- it('作者自定义/对谈共创', () => {
- expect(parseSourceRef('来源:作者自定义')).toEqual({ kind: '作者自定义' })
- expect(parseSourceRef('来源:对谈共创')).toEqual({ kind: '对谈共创' })
- })
- it('知识库引用:库名/条目/版本', () => {
- const r = parseSourceRef('来源:知识库/写作方法库/节拍/蓄压-回旋-爆发.md@7')
- expect(r).toMatchObject({ kind: '知识库', library: '写作方法库', version: '7' })
- if (r) expect(isKnowledgeRef(r)).toBe(true)
- })
- it('拒绝:路径穿越、盘符、无版本', () => {
- expect(parseSourceRef('来源:../窃.md@1')).toBeNull()
- expect(parseSourceRef('来源:D:/x.md@1')).toBeNull()
- expect(parseSourceRef('来源:大纲/卷纲.md')).toBeNull()
- expect(parseSourceRef('随便一行')).toBeNull()
- })
- })
- describe('状态三族(格式规格 §7.3/D56⑪)', () => {
- it('族属判定', () => {
- expect(familyOf('已确认')).toBe('计划族')
- expect(familyOf('已埋')).toBe('计划族') // 线索域四态收编入计划族
- expect(familyOf('候选')).toBe('工件族')
- expect(familyOf('已消费')).toBe('轮次族')
- expect(familyOf('已入记')).toBeNull() // 自造词被拒
- })
- it('族属校验抛错', () => {
- expect(() => assertState('已消费', '工件族')).toThrow(/族属/) // D56⑪:族属标错即违规
- expect(() => assertState('玄学状态', '计划族')).toThrow(/三族词表/)
- expect(assertState('候选', '工件族')).toBeUndefined()
- })
- })
- describe('配置解析最小(D50 整项覆盖)', () => {
- it('后者整项覆盖前者,不做字段级合并', () => {
- const r = resolveLayers([
- { name: '默认', values: { 润色: { 道: ['去AI痕迹'], 排序: 1 } } },
- { name: 'profile', values: { 润色: { 道: ['平台适配'] } } },
- ])
- const item = r.find((x) => x.key === '润色')
- expect(item?.value).toEqual({ 道: ['平台适配'] }) // 整项覆盖,排序字段不残留
- expect(item?.fromLayer).toBe('profile')
- })
- })
|