mirror of
https://github.com/hansjone/netxops.git
synced 2026-10-20 13:30:46 +08:00
Fix preset publication, volatile settings and client form binding
This commit is contained in:
parent
fe0fe70d33
commit
0b9a3a82bc
66 changed files with 8546 additions and 3690 deletions
|
|
@ -10,6 +10,7 @@ import {
|
|||
DEFAULT_CAPABILITY_GROUPS,
|
||||
groupsForPlane,
|
||||
groupsForced,
|
||||
kbEnabledForPlane,
|
||||
SKILL_DIR_BY_GROUP,
|
||||
toolNamesForGroups,
|
||||
TOOLS_BY_GROUP,
|
||||
|
|
@ -23,6 +24,75 @@ test('defaults: ops + bizMonitor in preset; topology and public off', () => {
|
|||
})
|
||||
assert.deepEqual(groupsForPlane(undefined, 'preset'), ['ops', 'bizMonitor'])
|
||||
assert.deepEqual(groupsForPlane(undefined, 'public'), [])
|
||||
assert.deepEqual(groupsForPlane(undefined, 'host'), [])
|
||||
})
|
||||
|
||||
test('host plane equals public only (not inPreset union)', () => {
|
||||
const groups = capabilityGroupsFromSettings({
|
||||
groupOpsInPreset: false,
|
||||
groupOpsPublic: true,
|
||||
groupBizMonitorInPreset: false,
|
||||
groupTopologyInPreset: true,
|
||||
})
|
||||
assert.deepEqual(groupsForPlane(groups, 'preset'), ['topology'])
|
||||
assert.deepEqual(groupsForPlane(groups, 'public'), ['ops'])
|
||||
assert.deepEqual(groupsForPlane(groups, 'host'), ['ops'])
|
||||
})
|
||||
|
||||
test('unchecking public revokes host even when inPreset stays on', () => {
|
||||
const groups = capabilityGroupsFromSettings({
|
||||
groupOpsInPreset: true,
|
||||
groupOpsPublic: false,
|
||||
groupBizMonitorInPreset: true,
|
||||
groupBizMonitorPublic: false,
|
||||
})
|
||||
assert.deepEqual(groupsForPlane(groups, 'preset'), ['ops', 'bizMonitor'])
|
||||
assert.deepEqual(groupsForPlane(groups, 'host'), [])
|
||||
assert.deepEqual(groupsForPlane(groups, 'public'), [])
|
||||
})
|
||||
|
||||
test('preset and host planes are symmetric; only defaults differ', () => {
|
||||
const both = capabilityGroupsFromSettings({
|
||||
groupOpsInPreset: true,
|
||||
groupOpsPublic: true,
|
||||
groupTopologyInPreset: false,
|
||||
groupTopologyPublic: false,
|
||||
groupBizMonitorInPreset: false,
|
||||
groupBizMonitorPublic: true,
|
||||
})
|
||||
assert.deepEqual(groupsForPlane(both, 'preset'), ['ops'])
|
||||
assert.deepEqual(groupsForPlane(both, 'host'), ['ops', 'bizMonitor'])
|
||||
|
||||
const neither = capabilityGroupsFromSettings({
|
||||
groupOpsInPreset: false,
|
||||
groupOpsPublic: false,
|
||||
groupBizMonitorInPreset: false,
|
||||
groupBizMonitorPublic: false,
|
||||
})
|
||||
assert.deepEqual(groupsForPlane(neither, 'preset'), [])
|
||||
assert.deepEqual(groupsForPlane(neither, 'host'), [])
|
||||
})
|
||||
|
||||
test('null boolean flags do not resurrect defaults incorrectly', () => {
|
||||
// Settings projection may emit null for volatile booleans.
|
||||
const groups = capabilityGroupsFromSettings({
|
||||
groupOpsInPreset: /** @type {any} */ (null),
|
||||
groupOpsPublic: /** @type {any} */ (null),
|
||||
groupBizMonitorInPreset: /** @type {any} */ (null),
|
||||
groupBizMonitorPublic: /** @type {any} */ (null),
|
||||
})
|
||||
// null is not a boolean → fall back to defaults (ops+bizMonitor inPreset, public off)
|
||||
assert.deepEqual(groupsForPlane(groups, 'preset'), ['ops', 'bizMonitor'])
|
||||
assert.deepEqual(groupsForPlane(groups, 'host'), [])
|
||||
})
|
||||
|
||||
test('kbEnabledForPlane mirrors inPreset/public symmetry', () => {
|
||||
assert.equal(kbEnabledForPlane({ groupKbInPreset: true, groupKbPublic: false }, 'preset'), true)
|
||||
assert.equal(kbEnabledForPlane({ groupKbInPreset: true, groupKbPublic: false }, 'host'), false)
|
||||
assert.equal(kbEnabledForPlane({ groupKbInPreset: false, groupKbPublic: true }, 'preset'), false)
|
||||
assert.equal(kbEnabledForPlane({ groupKbInPreset: false, groupKbPublic: true }, 'host'), true)
|
||||
assert.equal(kbEnabledForPlane({}, 'preset'), true)
|
||||
assert.equal(kbEnabledForPlane({}, 'host'), false)
|
||||
})
|
||||
|
||||
test('one group one skill dir; ops owns NMS + managed CLI; topology owns canvas; bizMonitor owns cutover read', () => {
|
||||
|
|
@ -38,7 +108,7 @@ test('one group one skill dir; ops owns NMS + managed CLI; topology owns canvas;
|
|||
assert.ok(TOOLS_BY_GROUP.topology.includes('netx__getTopologyTree'))
|
||||
assert.ok(TOOLS_BY_GROUP.topology.includes('netx__layoutTopologyView'))
|
||||
assert.ok(TOOLS_BY_GROUP.topology.includes('netx__suggestSinkHubs'))
|
||||
assert.ok(TOOLS_BY_GROUP.topology.includes('netx__sinkTopologyDualUnits'))
|
||||
assert.equal(TOOLS_BY_GROUP.topology.includes('netx__sinkTopologyDualUnits'), false)
|
||||
assert.ok(TOOLS_BY_GROUP.bizMonitor.includes('netx__getBizMonitorContext'))
|
||||
assert.ok(TOOLS_BY_GROUP.bizMonitor.includes('netx__listBizMonitors'))
|
||||
assert.ok(TOOLS_BY_GROUP.bizMonitor.includes('netx__listBizMonitorBatches'))
|
||||
|
|
@ -55,12 +125,12 @@ test('capabilityGroupsFromSettings honors explicit false for inPreset defaults',
|
|||
assert.deepEqual(groupsForPlane(groups, 'preset'), ['topology'])
|
||||
assert.deepEqual(groupsForPlane(groups, 'public'), ['topology'])
|
||||
assert.ok(toolNamesForGroups(['topology']).has('netx__layoutTopologyView'))
|
||||
assert.ok(toolNamesForGroups(['topology']).has('netx__sinkTopologyDualUnits'))
|
||||
assert.equal(toolNamesForGroups(['topology']).has('netx__sinkTopologyDualUnits'), false)
|
||||
assert.equal(toolNamesForGroups(['topology']).has('netx__queryNmsAlarms'), false)
|
||||
assert.equal(toolNamesForGroups(['topology']).has('netx__getBizMonitorContext'), false)
|
||||
})
|
||||
|
||||
test('legacy groupNms/common/managedNe map to ops; legacy layout flags OR into topology', () => {
|
||||
test('legacy groupNms/common/managedNe map to ops; absent topology flags use legacy layout', () => {
|
||||
const groups = capabilityGroupsFromSettings({
|
||||
groupNmsInPreset: false,
|
||||
groupCommonInPreset: false,
|
||||
|
|
@ -81,7 +151,7 @@ test('legacy any-true turns ops inPreset on', () => {
|
|||
assert.equal(groups.ops.inPreset, true)
|
||||
})
|
||||
|
||||
test('groupsForced ignores settings for per-export mounts', () => {
|
||||
test('groupsForced normalizes group allow-lists independently from publication', () => {
|
||||
assert.deepEqual(groupsForced(['ops']), ['ops'])
|
||||
assert.deepEqual(groupsForced(['ops', 'topology']), ['ops', 'topology'])
|
||||
assert.deepEqual(groupsForced(['bizMonitor']), ['bizMonitor'])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue