openpencil/tests/engine/app/clipboard/component-dependencies.test.ts

39 lines
1.6 KiB
TypeScript

import { expect, test } from 'bun:test'
import { createEditorStore } from '@/app/editor/session/create'
test('cross-document instance-only paste imports its component dependency', async () => {
const source = createEditorStore()
const component = source.graph.createNode('COMPONENT', source.state.currentPageId, {
name: 'Dependency'
})
const componentChild = source.graph.createNode('RECTANGLE', component.id, {
name: 'Dependency child'
})
const instance = source.graph.createNode('INSTANCE', source.state.currentPageId, {
name: 'Instance only',
componentId: component.id
})
source.graph.createNode('RECTANGLE', instance.id, {
name: 'Instance child',
componentId: componentChild.id
})
source.select([instance.id])
const payload = await source.prepareCopy()
if (!payload.snapshot) throw new Error('Missing snapshot')
const target = createEditorStore()
await target.pasteSnapshot(payload.snapshot)
const pastedId = [...target.state.selectedIds][0]
const pasted = target.graph.getNode(pastedId)
const dependency = pasted?.componentId ? target.graph.getNode(pasted.componentId) : undefined
expect(dependency?.type).toBe('COMPONENT')
expect(dependency?.name).toBe('Dependency')
const child = pasted?.childIds[0] ? target.graph.getNode(pasted.childIds[0]) : undefined
expect(child?.componentId).toBe(dependency?.childIds[0])
target.undo.undo()
expect(target.graph.getNode(pastedId)).toBeUndefined()
expect(target.graph.getNode(dependency?.id ?? '')).toBeUndefined()
target.undo.redo()
expect(target.graph.getNode(pastedId)?.componentId).toBe(dependency?.id)
})