openpencil/packages/fig/tests/index.test.ts
Danila Poyarkov 55b368dc4a fix: complete acronym casing follow-ups
- Cover UI identifiers in the acronym guardrail
- Preserve FIG thumbnail and metadata values through archive parsing
- Use Vue-compatible acronym prop attributes
2026-08-10 16:38:17 +03:00

79 lines
2.3 KiB
TypeScript

import { beforeAll, describe, expect, it } from 'bun:test'
import { deflateSync } from 'fflate'
import {
createNodeChangesMessage,
encodeMessage,
getSchemaBytes,
initCodec
} from '@open-pencil/kiwi/fig/codec'
import {
FIG_PACKAGE_STATUS,
assertFigPackageReady,
parseFigBuffer,
readFigContainer,
writeFigArchive,
writeFigContainer
} from '../src/index'
describe('@open-pencil/fig package API', () => {
beforeAll(async () => {
await initCodec()
})
it('exports archive API status', () => {
expect(FIG_PACKAGE_STATUS).toBe('archive-api')
})
it('round-trips fig-kiwi container bytes', () => {
const bytes = writeFigContainer({
schemaDeflated: new Uint8Array([1, 2, 3]),
dataRaw: new Uint8Array([4, 5, 6])
})
const document = readFigContainer(bytes, { fileName: 'fixture.fig' })
expect(document.schemaDeflated).toEqual(new Uint8Array([1, 2, 3]))
expect(document.dataRaw).toEqual(new Uint8Array([4, 5, 6]))
expect(document.source?.bytes).toBe(bytes)
expect(document.source?.fileName).toBe('fixture.fig')
})
it('parses complete .fig archives and image resources', () => {
const thumbnailPNG = new Uint8Array([1])
const metaJSON = '{}'
const bytes = writeFigArchive({
schemaDeflated: deflateSync(getSchemaBytes()),
kiwiData: encodeMessage(
createNodeChangesMessage(0, 0, [
{
guid: { sessionID: 0, localID: 0 },
type: 'DOCUMENT',
phase: 'CREATED',
name: 'Document'
}
])
),
thumbnailPNG,
metaJSON,
images: [{ name: 'images/hash', data: new Uint8Array([9, 8, 7]) }]
})
const parsed = parseFigBuffer(bytes.buffer as ArrayBuffer)
expect(parsed.nodeChanges).toHaveLength(1)
expect(parsed.nodeChanges[0]?.type).toBe('DOCUMENT')
expect(parsed.images).toEqual([['hash', new Uint8Array([9, 8, 7])]])
expect(parsed.thumbnailPNG).toEqual(thumbnailPNG)
expect(parsed.metaJSON).toBe(metaJSON)
})
it('rejects invalid fig-kiwi containers', () => {
expect(() => readFigContainer(new Uint8Array([1, 2, 3]))).toThrow('Invalid fig-kiwi')
})
it('directs consumers to core for SceneGraph read/write', () => {
expect(() => assertFigPackageReady()).toThrow('archive/container APIs')
})
})