import assert from 'node:assert/strict' import test from 'node:test' import { detailHeaders, formatMetricRate, metricPresentation, scopePresentation, statePresentation } from '../src/views/dataGovernance/development/governanceMetricsModel.js' test('formats available percentages and keeps no data distinct from zero', () => { assert.equal(formatMetricRate({ rate: 0, status: 'available' }), '0.0%') assert.equal(formatMetricRate({ rate: 0.666667, status: 'available' }), '66.7%') assert.equal(formatMetricRate({ rate: null, status: 'no_data' }), '暂无数据') }) test('presents the five fixed governance metrics and their trace states', () => { assert.equal(metricPresentation('asset_completeness').name, '台账完整率') assert.equal(metricPresentation('responsibility_coverage').name, '责任覆盖率') assert.equal(metricPresentation('entity_mapping').name, '实体映射率') assert.equal(metricPresentation('issue_closure').name, '问题闭环率') assert.equal(metricPresentation('issue_recurrence').name, '问题复发率') assert.equal(statePresentation('incomplete').label, '不完整设备') assert.equal(statePresentation('recurrent').label, '复发问题') }) test('makes global and business-domain authorization scopes explicit', () => { assert.equal( scopePresentation({ global_access: true, business_domain_uids: [] }), '全部可访问范围' ) assert.equal( scopePresentation({ global_access: false, business_domain_uids: ['domain-a', 'domain-b'] }), '按服务端业务域授权过滤(2 个业务域)' ) assert.equal( scopePresentation({ global_access: false, business_domain_uids: [] }), '当前没有已授权业务域' ) }) test('detail columns are bounded to safe asset and issue fields', () => { const assetValues = detailHeaders('asset_completeness').map(item => item.value) const issueValues = detailHeaders('issue_recurrence').map(item => item.value) assert.deepEqual(assetValues, [ 'asset_name', 'asset_type', 'location', 'organization', 'responsible_person', 'source_codes', 'missing_fields' ]) assert.deepEqual(issueValues, [ 'issue_code', 'asset_name', 'rule_code', 'field_name', 'priority', 'status', 'occurrence_number', 'assignee_uid', 'due_at', 'closed_at', 'overdue' ]) for (const forbidden of ['attributes', 'evidence', 'message', 'config', 'permission_scope']) { assert.ok(!assetValues.includes(forbidden)) assert.ok(!issueValues.includes(forbidden)) } })