feat: expose recompute diagnostic repair tree
This commit is contained in:
@@ -707,6 +707,35 @@ test('expression cycles fail recompute without silently accepting a result', ()
|
||||
assert.equal(facade.getState().document.recompute?.objectStates.pocket, 'error')
|
||||
})
|
||||
|
||||
test('recompute diagnostics expose root causes and repair only the affected branch', async () => {
|
||||
const facade = createMockFacade()
|
||||
facade.app.document.setExpression({ objectId: 'pad', propertyName: 'Length', expression: 'pocket.Length' })
|
||||
facade.app.document.setExpression({ objectId: 'pocket', propertyName: 'Length', expression: 'pad.Length' })
|
||||
const failed = facade.app.document.recompute()
|
||||
assert.equal(failed.status, 'failed')
|
||||
|
||||
const diagnostics = facade.diagnostics.list().filter((diagnostic) => diagnostic.source === 'recompute')
|
||||
const pocketRoot = diagnostics.find((diagnostic) => diagnostic.objectId === 'pocket' && diagnostic.code === 'DEPENDENCY_CYCLE')
|
||||
const fillet = diagnostics.find((diagnostic) => diagnostic.objectId === 'fillet')
|
||||
assert.ok(pocketRoot)
|
||||
assert.equal(pocketRoot.generation, failed.generation)
|
||||
assert.equal(pocketRoot.documentVersion, facade.app.document.getActive().version)
|
||||
assert.equal(pocketRoot.repairActions?.find((action) => action.id === 'suppress-root')?.enabled, false)
|
||||
assert.deepEqual(fillet?.dependencyPath, ['fillet', 'pocket'])
|
||||
assert.equal(fillet?.rootCauseObjectId, 'pocket')
|
||||
|
||||
const tree = facade.diagnostics.tree()
|
||||
assert.ok(tree.find((node) => node.diagnostic.id === pocketRoot.id)?.children.some((node) => node.diagnostic.objectId === 'fillet'))
|
||||
const selected = await facade.diagnostics.repair(pocketRoot.id, 'select-object')
|
||||
assert.equal(selected.status, 'completed')
|
||||
assert.equal(facade.selection.getObjectId(), 'pocket')
|
||||
|
||||
facade.app.document.setExpression({ objectId: 'pad', propertyName: 'Length', expression: '25 mm' })
|
||||
const repaired = await facade.diagnostics.repair(pocketRoot.id, 'recompute-root')
|
||||
assert.equal(repaired.status, 'completed')
|
||||
assert.equal(facade.diagnostics.list().some((diagnostic) => diagnostic.source === 'recompute'), false)
|
||||
})
|
||||
|
||||
test('view properties do not mark the geometry object touched', () => {
|
||||
const facade = createMockFacade()
|
||||
facade.app.document.setProperty({ objectId: 'fillet', propertyName: 'Visibility', value: false })
|
||||
|
||||
Reference in New Issue
Block a user