import { test } from 'node:test' import assert from 'node:assert/strict' import { createMockFacade } from '../src/facade/mockFacade' test('facade exposes a stable initial document projection', () => { const facade = createMockFacade() const state = facade.getState() assert.equal(state.apiVersion, '0.1') assert.equal(state.document.id, 'doc-pump-housing') assert.equal(state.document.tree.find((item) => item.id === 'body')?.type, 'body') assert.equal(facade.gui.workbench.getActive(), 'Part Design') }) test('workbench and selection changes are event driven', () => { const facade = createMockFacade() const events: string[] = [] const unsubscribe = facade.subscribe((event) => events.push(event.type)) facade.gui.workbench.setActive('Sketcher') facade.selection.select('sketch') unsubscribe() assert.equal(facade.getState().activeWorkbench, 'Sketcher') assert.equal(facade.selection.getObjectId(), 'sketch') assert.ok(events.includes('state.changed')) assert.ok(events.includes('notice')) }) test('commands and tasks preserve apply/cancel lifecycle', () => { const facade = createMockFacade() facade.gui.command.execute({ commandId: 'create-sketch' }) assert.equal(facade.task.getActive()?.status, 'preview') facade.task.update({ support: 'XY_Plane' }) assert.equal(facade.task.getActive()?.draft.support, 'XY_Plane') facade.task.cancel() assert.equal(facade.task.getActive()?.status, 'cancelled') }) test('disabled commands return a reason instead of mutating the document', () => { const facade = createMockFacade() const before = facade.getState().document.version const state = facade.gui.command.getState('pad') assert.equal(state.status, 'enabled') facade.gui.workbench.setActive('Sketcher') const disabled = facade.gui.command.getState('pad') assert.equal(disabled.status, 'disabled') assert.match(disabled.reason || '', /Part Design/) assert.equal(facade.getState().document.version, before) })