* refactor(settings): read stored preferences with a Valibot schema Each field falls back to its default on its own, so one bad value keeps the rest, as before. Tests pin the behavior; they pass against the previous implementation too. * refactor(mcp): read stored MCP connections with a Valibot schema A connection schema checks the ID, trimmed name, transport, and URL rule; a bearer token is kept only for the connection's own credential. A new test covers the credential check and normalization, and passes against the previous implementation. * refactor(clipboard): read Figma's image batch response with a Valibot schema * refactor(mcp): read tool descriptors with a Valibot schema The descriptor type now follows the schema, and tests cover what a descriptor must contain. * refactor(ai): read stored model settings with Valibot schemas Connections and model profiles are schemas with their defaults and bounds; the thinking-level migration and the checks between connections, models, and role assignments stay as code. Characterization tests written against the previous implementation pin the behavior.
31 lines
917 B
TypeScript
31 lines
917 B
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
|
|
import { parseToolDescriptor, type ToolDescriptor } from '@open-pencil/mcp/tools'
|
|
|
|
const descriptor = {
|
|
name: 'export_image',
|
|
description: 'Exports a node as an image',
|
|
effect: 'read',
|
|
availability: 'filesystem',
|
|
capabilities: ['document:read', 'filesystem:write'],
|
|
enabled: true
|
|
} satisfies ToolDescriptor
|
|
|
|
describe('parseToolDescriptor', () => {
|
|
test('reads a descriptor the server reports', () => {
|
|
expect(parseToolDescriptor({ ...descriptor, extra: 1 })).toEqual(descriptor)
|
|
})
|
|
|
|
test('rejects a descriptor with a field the app cannot act on', () => {
|
|
for (const change of [
|
|
{ name: '' },
|
|
{ effect: 'delete' },
|
|
{ availability: 'always' },
|
|
{ capabilities: ['document:read', 'shell:run'] },
|
|
{ enabled: 'true' }
|
|
]) {
|
|
expect(parseToolDescriptor({ ...descriptor, ...change })).toBeNull()
|
|
}
|
|
})
|
|
})
|