taxonomy.test.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { test } from 'node:test';
  2. import assert from 'node:assert/strict';
  3. import { stageOf, normalizeLayer, evidenceOf, uploadMethodLabel, oppEvidenceOf } from '../src/core/taxonomy/taxonomy.js';
  4. test('阶段归一:三种写法落到同一阶段', () => {
  5. for (const v of ['S3 机会识别', 'S3机会识别', 's3', ' S3 机会点识别 ']) {
  6. assert.equal(stageOf(v)?.code, 'S3', v);
  7. }
  8. assert.equal(stageOf('S1品类分析')?.no, 1);
  9. assert.equal(stageOf('乱七八糟'), null, '认不出的不猜');
  10. assert.equal(stageOf(null), null);
  11. });
  12. test('四层归属:历史 tier 与「被引用升级」都有明确规则', () => {
  13. assert.equal(normalizeLayer({ layer: 'raw' }), 'raw');
  14. assert.equal(normalizeLayer({ tier: 'pending' }), 'process');
  15. assert.equal(normalizeLayer({ tier: 'record' }), 'record');
  16. assert.equal(normalizeLayer({ layer: 'weird' }), 'process', '未知值落回 process');
  17. assert.equal(normalizeLayer({}, { cited: true, hasOwner: true }), 'sediment');
  18. assert.equal(normalizeLayer({}, { cited: true, hasOwner: false }), 'process', '没有出身的不能升沉淀');
  19. assert.equal(normalizeLayer({ layer: 'process' }, { cited: true, hasOwner: true }), 'sediment');
  20. });
  21. test('归纳没有出身不许进沉淀层', () => {
  22. assert.equal(normalizeLayer({ derivedFrom: [] }, { isInsight: true }), 'record');
  23. assert.equal(normalizeLayer({ derivedFrom: ['a'], layer: 'record' }, { isInsight: true }), 'record');
  24. assert.equal(normalizeLayer({ derivedFrom: ['a'] }, { isInsight: true, hasOwner: true }), 'sediment');
  25. });
  26. test('evidenceLevel=verified 但没有原文 → 降级为「有佐证」', () => {
  27. assert.equal(evidenceOf('verified', true).key, 'verified');
  28. assert.equal(evidenceOf('verified', false).key, 'supported');
  29. assert.equal(evidenceOf(undefined, false).key, 'none');
  30. });
  31. test('机会卡证据强度与上传方式', () => {
  32. assert.equal(oppEvidenceOf('high').rank, 3);
  33. assert.equal(oppEvidenceOf('???').key, 'none');
  34. assert.equal(uploadMethodLabel('session'), '会话上传');
  35. assert.equal(uploadMethodLabel(''), '');
  36. });