report-evidence.test.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { test } from 'node:test';
  2. import assert from 'node:assert/strict';
  3. import { evidenceExcerpts } from '../src/core/report-evidence.js';
  4. test('excerpts retain exact saved text and resolve original sources without inventing dates or authors', () => {
  5. const text = '全放太辣。\n少放又觉得淡。';
  6. const report = { evidence: { need: { sourceId:'s1', quotes:[{text, ref:'产品A|评价|观察日2026-11-11'}] } } };
  7. const [quote] = evidenceExcerpts(report, 'need', {s1:{title:'原始评价', sourceUrl:'https://example.org/review/1'}});
  8. assert.equal(quote.text, text);
  9. assert.equal(quote.sourceId, 's1');
  10. assert.equal(quote.author, '');
  11. assert.equal(quote.url, 'https://example.org/review/1');
  12. assert.equal(quote.sourceAvailable, true);
  13. assert.equal(Object.hasOwn(quote, 'publishedAt'), false);
  14. });
  15. test('quote-specific source overrides entry source, missing sources stay visibly unresolved', () => {
  16. const report = { evidence:{e:{sourceId:'entry',quotes:[{text:'原句',sourceId:'actual',ref:'https://example.org/source'}]}} };
  17. const [quote] = evidenceExcerpts(report,'e',{entry:{title:'不可误归属'}});
  18. assert.equal(quote.sourceId,'actual');
  19. assert.equal(quote.sourceTitle,'');
  20. assert.equal(quote.sourceAvailable,false);
  21. assert.equal(quote.url,'https://example.org/source');
  22. });
  23. test('source links reject executable protocols and embedded credentials', () => {
  24. for(const ref of ['javascript:alert(1)','data:text/html,test','file:///secret','https://name:secret@example.org/']) {
  25. const [quote] = evidenceExcerpts({evidence:{e:{quotes:[{text:'原句',ref}]}}},'e');
  26. assert.equal(quote.url,'');
  27. assert.equal(quote.ref,ref);
  28. }
  29. });
  30. test('missing or malformed quotes never turn a summary into an original quotation', () => {
  31. for(const evidence of [undefined,{e:{claim:'摘要'}},{e:{quotes:{text:'非列表'}}},{e:{quotes:[null,{}, {text:' '},{text:12}]}}]) {
  32. assert.deepEqual(evidenceExcerpts({evidence},'e'),[]);
  33. }
  34. });