openpencil/tests/engine/app/settings/vectorize-workflow.test.ts
2026-09-06 14:34:32 +03:00

68 lines
1.9 KiB
TypeScript

import { expect, test } from 'bun:test'
import { effectScope, ref } from 'vue'
import { vectorizeProviderID } from '@/app/editor/vectorize'
import { useVectorizeSettings } from '@/app/editor/vectorize/settings/use'
function deferred() {
let resolve: () => void = () => undefined
const promise = new Promise<void>((done) => {
resolve = done
})
return { promise, resolve }
}
test('vectorization save cannot clear a different provider draft', async () => {
const original = vectorizeProviderID.value
vectorizeProviderID.value = 'recraft'
const pending = deferred()
const scope = effectScope()
const key = ref('')
try {
const state = scope.run(() =>
useVectorizeSettings(key, {
status: async () => 'missing',
set: async () => pending.promise
})
)
if (!state) throw new Error('Missing scope')
key.value = 'first-key'
const saving = state.saveCredential()
vectorizeProviderID.value = 'fal'
key.value = 'second-key'
pending.resolve()
await saving
expect(key.value).toBe('second-key')
expect(state.error.value).toBe('')
} finally {
scope.stop()
vectorizeProviderID.value = original
}
})
test('vectorization save and clear failures preserve the draft and expose errors', async () => {
const scope = effectScope()
const key = ref('')
try {
const state = scope.run(() =>
useVectorizeSettings(key, {
status: async () => 'configured',
set: async () => {
throw new Error('Credential store unavailable')
}
})
)
if (!state) throw new Error('Missing scope')
key.value = 'replacement'
await state.saveCredential()
expect(key.value).toBe('replacement')
expect(state.error.value).toBe('Credential store unavailable')
await state.clearCredential()
expect(key.value).toBe('replacement')
expect(state.error.value).toBe('Credential store unavailable')
} finally {
scope.stop()
}
})