import assert from 'node:assert/strict' import test from 'node:test' import { applySuggestionDecisions, canEditOntology, canPublishOntology, emptyGraph, normalizeGraph, parseRevision, upsertGraphItem } from '../src/views/dataGovernance/ontology/model.js' test('normalizes every ontology graph section without mutating input', () => { const source = { classes: [{ uid: 'customer', name: '客户' }] } const graph = normalizeGraph(source) assert.deepEqual(Object.keys(graph), [ 'classes', 'properties', 'relations', 'constraints', 'domain_links', 'element_mappings' ]) assert.deepEqual(graph.classes, source.classes) assert.notEqual(graph.classes, source.classes) assert.deepEqual(emptyGraph().domain_links, []) }) test('upserts an edited graph item by its stable identity', () => { const graph = normalizeGraph({ classes: [{ uid: 'customer', name: '客户' }] }) const updated = upsertGraphItem( graph, 'classes', { uid: 'customer', name: '客户主体' } ) assert.equal(updated.classes.length, 1) assert.equal(updated.classes[0].name, '客户主体') }) test('applies accepted and edited suggestions but skips rejected suggestions', () => { const graph = emptyGraph() const suggestions = [ { uid: 's1', kind: 'class', payload: { uid: 'customer', name: '客户' } }, { uid: 's2', kind: 'class', payload: { uid: 'order', name: '订单' } }, { uid: 's3', kind: 'constraint', payload: { uid: 'c1', name: '非空' } } ] const decisions = [ { suggestion_uid: 's1', decision: 'accept' }, { suggestion_uid: 's2', decision: 'reject' }, { suggestion_uid: 's3', decision: 'edit', payload: { uid: 'c1', name: '客户编号非空' } } ] const updated = applySuggestionDecisions(graph, suggestions, decisions) assert.deepEqual(updated.classes.map(item => item.uid), ['customer']) assert.equal(updated.constraints[0].name, '客户编号非空') }) test('permissions separate edit and publish capabilities', () => { assert.equal(canEditOntology(['governance:read']), false) assert.equal(canEditOntology(['ontologies:edit']), true) assert.equal(canPublishOntology(['ontologies:edit']), false) assert.equal(canPublishOntology(['ontologies:publish']), true) }) test('parses weak and quoted etag revisions safely', () => { assert.equal(parseRevision('"4"'), 4) assert.equal(parseRevision('W/"7"'), 7) assert.equal(parseRevision(undefined), 0) })