device-knowledge-model.test.mjs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import assert from 'node:assert/strict'
  2. import test from 'node:test'
  3. import {
  4. answerPresentation,
  5. canManageKnowledge,
  6. deviceObjectLabel,
  7. parseBusinessDomainScope,
  8. resultEvidence,
  9. scopePresentation
  10. } from '../src/views/knowledgeBaseProduct/deviceKnowledgeModel.js'
  11. test('presents device knowledge objects and explicit answer states', () => {
  12. assert.equal(deviceObjectLabel('DeviceAsset'), '设备资产')
  13. assert.equal(deviceObjectLabel('DataFlow'), 'DataFlow')
  14. assert.deepEqual(answerPresentation('model_unavailable'), {
  15. color: 'warning',
  16. title: '回答模型暂不可用',
  17. detail: '未生成推测性答案;以下仅展示你有权访问的检索证据。'
  18. })
  19. assert.deepEqual(answerPresentation('no_answer'), {
  20. color: 'info',
  21. title: '当前证据不足',
  22. detail: '知识库未生成推测性答案;可检查下方授权证据并调整问题。'
  23. })
  24. })
  25. test('uses selected citations only for grounded answers and evidence otherwise', () => {
  26. const citations = [{ chunk_id: 'citation-1', content: '责任人:张工' }]
  27. const evidence = [{ chunk_id: 'evidence-1', content: '设备名称:循环泵' }]
  28. assert.deepEqual(
  29. resultEvidence({
  30. answer_status: 'grounded',
  31. citations,
  32. evidence
  33. }),
  34. citations
  35. )
  36. assert.deepEqual(
  37. resultEvidence({
  38. answer_status: 'model_unavailable',
  39. citations: [],
  40. evidence
  41. }),
  42. evidence
  43. )
  44. })
  45. test('normalizes source scope and makes empty scope admin-only', () => {
  46. const domainA = '11111111-1111-4111-8111-111111111111'
  47. const domainB = '22222222-2222-4222-8222-222222222222'
  48. assert.deepEqual(
  49. parseBusinessDomainScope(`${domainB}\n${domainA}\n${domainA}`),
  50. [domainA, domainB]
  51. )
  52. assert.throws(
  53. () => parseBusinessDomainScope('not-a-uuid'),
  54. /UUID/
  55. )
  56. assert.deepEqual(scopePresentation([]), {
  57. color: 'warning',
  58. label: '仅管理员可见'
  59. })
  60. assert.deepEqual(scopePresentation([domainA]), {
  61. color: 'success',
  62. label: '1 个业务域'
  63. })
  64. })
  65. test('shows scope and audit controls only with knowledge manage permission', () => {
  66. assert.equal(canManageKnowledge(['governance:read']), false)
  67. assert.equal(
  68. canManageKnowledge(['governance:read', 'knowledge:manage']),
  69. true
  70. )
  71. })