governance-metrics-model.test.mjs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import assert from 'node:assert/strict'
  2. import test from 'node:test'
  3. import {
  4. detailHeaders,
  5. formatMetricRate,
  6. metricPresentation,
  7. scopePresentation,
  8. statePresentation
  9. } from '../src/views/dataGovernance/development/governanceMetricsModel.js'
  10. test('formats available percentages and keeps no data distinct from zero', () => {
  11. assert.equal(formatMetricRate({ rate: 0, status: 'available' }), '0.0%')
  12. assert.equal(formatMetricRate({ rate: 0.666667, status: 'available' }), '66.7%')
  13. assert.equal(formatMetricRate({ rate: null, status: 'no_data' }), '暂无数据')
  14. })
  15. test('presents the five fixed governance metrics and their trace states', () => {
  16. assert.equal(metricPresentation('asset_completeness').name, '台账完整率')
  17. assert.equal(metricPresentation('responsibility_coverage').name, '责任覆盖率')
  18. assert.equal(metricPresentation('entity_mapping').name, '实体映射率')
  19. assert.equal(metricPresentation('issue_closure').name, '问题闭环率')
  20. assert.equal(metricPresentation('issue_recurrence').name, '问题复发率')
  21. assert.equal(statePresentation('incomplete').label, '不完整设备')
  22. assert.equal(statePresentation('recurrent').label, '复发问题')
  23. })
  24. test('makes global and business-domain authorization scopes explicit', () => {
  25. assert.equal(
  26. scopePresentation({ global_access: true, business_domain_uids: [] }),
  27. '全部可访问范围'
  28. )
  29. assert.equal(
  30. scopePresentation({
  31. global_access: false,
  32. business_domain_uids: ['domain-a', 'domain-b']
  33. }),
  34. '按服务端业务域授权过滤(2 个业务域)'
  35. )
  36. assert.equal(
  37. scopePresentation({ global_access: false, business_domain_uids: [] }),
  38. '当前没有已授权业务域'
  39. )
  40. })
  41. test('detail columns are bounded to safe asset and issue fields', () => {
  42. const assetValues = detailHeaders('asset_completeness').map(item => item.value)
  43. const issueValues = detailHeaders('issue_recurrence').map(item => item.value)
  44. assert.deepEqual(assetValues, [
  45. 'asset_name',
  46. 'asset_type',
  47. 'location',
  48. 'organization',
  49. 'responsible_person',
  50. 'source_codes',
  51. 'missing_fields'
  52. ])
  53. assert.deepEqual(issueValues, [
  54. 'issue_code',
  55. 'asset_name',
  56. 'rule_code',
  57. 'field_name',
  58. 'priority',
  59. 'status',
  60. 'occurrence_number',
  61. 'assignee_uid',
  62. 'due_at',
  63. 'closed_at',
  64. 'overdue'
  65. ])
  66. for (const forbidden of ['attributes', 'evidence', 'message', 'config', 'permission_scope']) {
  67. assert.ok(!assetValues.includes(forbidden))
  68. assert.ok(!issueValues.includes(forbidden))
  69. }
  70. })