import { describe, expect, it } from 'vitest'; import { queueClaimToolInputSchema, queueCompleteToolInputSchema, queueFailToolInputSchema, queueGetToolInputSchema, queueHeartbeatToolInputSchema, queueListToolInputSchema, queueReleaseToolInputSchema, queueStatusToolInputSchema, } from '../src/mcp-tool-schemas.js'; describe('MCP tool schemas', () => { it('validates queue_list filters', () => { const parsed = queueListToolInputSchema.parse({ project: 'queue', mission: 'phase1', status: 'pending', }); expect(parsed).toEqual({ project: 'queue', mission: 'phase1', status: 'pending', }); }); it('requires a taskId for queue_get', () => { expect(() => queueGetToolInputSchema.parse({})).toThrowError(); }); it('requires positive ttlSeconds for queue_claim', () => { expect(() => queueClaimToolInputSchema.parse({ taskId: 'MQ-007', agentId: 'agent-a', ttlSeconds: 0, }), ).toThrowError(); }); it('accepts optional fields for queue_heartbeat and queue_release', () => { const heartbeat = queueHeartbeatToolInputSchema.parse({ taskId: 'MQ-007', ttlSeconds: 30, }); const release = queueReleaseToolInputSchema.parse({ taskId: 'MQ-007', }); expect(heartbeat).toEqual({ taskId: 'MQ-007', ttlSeconds: 30, }); expect(release).toEqual({ taskId: 'MQ-007', }); }); it('validates queue_complete and queue_fail payloads', () => { const complete = queueCompleteToolInputSchema.parse({ taskId: 'MQ-007', agentId: 'agent-a', summary: 'done', }); const fail = queueFailToolInputSchema.parse({ taskId: 'MQ-007', reason: 'boom', }); expect(complete).toEqual({ taskId: 'MQ-007', agentId: 'agent-a', summary: 'done', }); expect(fail).toEqual({ taskId: 'MQ-007', reason: 'boom', }); }); it('accepts an empty payload for queue_status', () => { const parsed = queueStatusToolInputSchema.parse({}); expect(parsed).toEqual({}); }); });