feat: persist LinkSub topology references
This commit is contained in:
@@ -760,6 +760,26 @@ test('typed properties are validated, versioned and undoable through the documen
|
||||
assert.equal(facade.app.document.getObject('pad')?.properties.find((property) => property.name === 'Length')?.value, 50)
|
||||
})
|
||||
|
||||
test('LinkSub properties preserve versioned TopoRefs and create topology dependencies', async () => {
|
||||
const facade = createMockFacade()
|
||||
const face = { vertexCoord: [0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 2, 0], normalCoord: [], triIndexes: [0, 1, 2, 0, 2, 3] }
|
||||
const topology = createSubshapeRefs('pad-shape', 18, [face])
|
||||
const topoRef = createPersistedTopoRef('pad', topology.refs[0], 4)
|
||||
facade.app.document.setProperty({ objectId: 'pocket', propertyName: 'UpToFace', value: topoRef })
|
||||
const stored = facade.app.document.getObject('pocket')?.properties.find((property) => property.name === 'UpToFace')?.value
|
||||
assert.deepEqual(stored, topoRef)
|
||||
assert.notEqual(stored, topoRef)
|
||||
const dependency = facade.app.document.getDependencies().find((edge) => edge.sourceId === 'pocket' && edge.relation === 'topo-ref')
|
||||
assert.equal(dependency?.targetId, 'pad')
|
||||
assert.equal(dependency?.reference, topoRef.persistentId)
|
||||
assert.throws(() => facade.app.document.setProperty({ objectId: 'pocket', propertyName: 'UpToFace', value: { ...topoRef, faceIndex: 1 } as never }), /must not persist transient faceIndex/)
|
||||
assert.throws(() => facade.app.document.setProperty({ objectId: 'pocket', propertyName: 'UpToFace', value: { ...topoRef, objectId: 'missing' } }), /target does not exist/)
|
||||
|
||||
await facade.project.save()
|
||||
const loaded = await facade.project.load('doc-pump-housing')
|
||||
assert.deepEqual(loaded?.objects.find((object) => object.id === 'pocket')?.properties.find((property) => property.name === 'UpToFace')?.value, topoRef)
|
||||
})
|
||||
|
||||
test('expressions are evaluated in the facade and create document dependencies', () => {
|
||||
const facade = createMockFacade()
|
||||
facade.app.document.setExpression({ objectId: 'pad', propertyName: 'Length', expression: '1 in + 2 mm' })
|
||||
|
||||
Reference in New Issue
Block a user