openpencil/tests/engine/app/editor/variables.test.ts
Danila Poyarkov 29e0d3acf2
refactor(vue)!: remove the variables table composables (#908)
The variables dialog now uses the tokens panel, so useVariablesEditor, useVariablesTable, useVariablesDialogState, and the table-only formatModeValue, parseVariableValue, and shortName helpers have no users. Removing them drops the @tanstack/vue-table dependency; their SDK pages redirect to useVariables.
2026-10-06 12:35:41 +00:00

98 lines
2.9 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { ref } from 'vue'
import type { Editor } from '@open-pencil/core/editor'
import type { Variable, VariableCollection } from '@open-pencil/scene-graph'
import { createVariableCollectionActions, createVariableValueActions } from '#vue/variables/helpers'
function createEditorHarness() {
const collections = new Map<string, VariableCollection>()
const variables = new Map<string, Variable>()
const collection: VariableCollection = {
id: 'col:test',
name: 'Test',
modes: [
{ modeId: 'default', name: 'Default' },
{ modeId: 'dark', name: 'Dark' }
],
defaultModeId: 'default',
variableIds: []
}
collections.set(collection.id, collection)
const editor = {
addCollection(item: VariableCollection) {
collections.set(item.id, item)
},
renameCollection(id: string, name: string) {
const item = collections.get(id)
if (item) item.name = name
},
addVariable(item: Variable) {
variables.set(item.id, item)
collections.get(item.collectionId)?.variableIds.push(item.id)
},
removeVariable(id: string) {
variables.delete(id)
},
renameVariable(id: string, name: string) {
const item = variables.get(id)
if (item) item.name = name
},
updateVariableValue(id: string, modeId: string, value: unknown) {
const item = variables.get(id)
if (item) item.valuesByMode[modeId] = value as never
},
getVariable(id: string) {
return variables.get(id)
}
} as Editor
return { editor, collection, collections, variables }
}
describe('variables editor helpers', () => {
test('creates variables with type-specific default values for every mode', () => {
const { editor, collection, variables } = createEditorHarness()
const actions = createVariableValueActions(editor, () => collection)
actions.addVariable('COLOR')
actions.addVariable('FLOAT')
actions.addVariable('STRING')
actions.addVariable('BOOLEAN')
const created = [...variables.values()]
expect(created.map((item) => item.type)).toEqual(['COLOR', 'FLOAT', 'STRING', 'BOOLEAN'])
expect(created.map((item) => item.name)).toEqual([
'New color',
'New number',
'New text',
'New boolean'
])
expect(created.map((item) => item.valuesByMode.default)).toEqual([
{ r: 0, g: 0, b: 0, a: 1 },
0,
'',
false
])
expect(created.map((item) => item.valuesByMode.dark)).toEqual([
{ r: 0, g: 0, b: 0, a: 1 },
0,
'',
false
])
})
test('creates and activates new collections', () => {
const { editor, collections } = createEditorHarness()
const activeCollectionId = ref('')
const actions = createVariableCollectionActions(editor, activeCollectionId)
actions.addCollection()
expect(activeCollectionId.value).toStartWith('col:')
expect(collections.get(activeCollectionId.value)?.name).toBe('New collection')
})
})