openpencil/packages/mcp/tests/tool/metadata.test.ts
Danila Poyarkov 2f79278df1
refactor: read stored settings and external responses with Valibot (#937)
* 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.
2026-10-07 09:28:42 +00:00

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()
}
})
})