Skip to main content
Glama
responses.test.ts6.44 kB
/** * Tests for responses utility */ import { describe, it, expect } from 'vitest'; import { createResponseFormat, createResult, } from '../../src/utils/responses.js'; describe('responses', () => { describe('createResponseFormat', () => { it('should format simple object to YAML', () => { const data = { status: 'hasResults', path: '/test/path', }; const result = createResponseFormat(data); expect(result).toContain('status:'); expect(result).toContain('hasResults'); expect(result).toContain('path:'); expect(result).toContain('/test/path'); }); it('should remove null values', () => { const data = { status: 'hasResults', path: null, name: 'test', }; const result = createResponseFormat(data); expect(result).toContain('status:'); expect(result).toContain('name:'); expect(result).not.toContain('path:'); }); it('should remove undefined values', () => { const data = { status: 'hasResults', path: undefined, name: 'test', }; const result = createResponseFormat(data); expect(result).toContain('status:'); expect(result).toContain('name:'); expect(result).not.toContain('path:'); }); it('should remove empty objects', () => { const data = { status: 'hasResults', metadata: {}, name: 'test', }; const result = createResponseFormat(data); expect(result).toContain('status:'); expect(result).toContain('name:'); expect(result).not.toContain('metadata:'); }); it('should remove empty arrays', () => { const data = { status: 'hasResults', files: [], name: 'test', }; const result = createResponseFormat(data); expect(result).toContain('status:'); expect(result).toContain('name:'); expect(result).not.toContain('files:'); }); it('should preserve non-empty arrays', () => { const data = { status: 'hasResults', files: ['file1.ts', 'file2.ts'], }; const result = createResponseFormat(data); expect(result).toContain('files:'); expect(result).toContain('file1.ts'); expect(result).toContain('file2.ts'); }); it('should handle nested objects', () => { const data = { status: 'hasResults', pagination: { currentPage: 1, totalPages: 5, hasMore: true, }, }; const result = createResponseFormat(data); expect(result).toContain('pagination:'); expect(result).toContain('currentPage:'); expect(result).toContain('1'); expect(result).toContain('totalPages:'); expect(result).toContain('5'); }); it('should respect key priority ordering', () => { const data = { path: '/test', status: 'hasResults', hints: ['hint1'], }; const result = createResponseFormat(data, ['status', 'path', 'hints']); // Status should appear before path in the output const statusIndex = result.indexOf('status:'); const pathIndex = result.indexOf('path:'); expect(statusIndex).toBeLessThan(pathIndex); }); it('should handle NaN values by removing them', () => { const data = { status: 'hasResults', count: NaN, name: 'test', }; const result = createResponseFormat(data); expect(result).toContain('status:'); expect(result).toContain('name:'); expect(result).not.toContain('count:'); }); it('should handle deeply nested empty objects', () => { const data = { status: 'hasResults', nested: { level1: { level2: { empty: {}, }, }, }, name: 'test', }; const result = createResponseFormat(data); expect(result).toContain('status:'); expect(result).toContain('name:'); expect(result).not.toContain('nested:'); }); it('should preserve boolean false values', () => { const data = { status: 'hasResults', hasMore: false, }; const result = createResponseFormat(data); expect(result).toContain('hasMore:'); expect(result).toContain('false'); }); it('should preserve zero values', () => { const data = { status: 'hasResults', count: 0, }; const result = createResponseFormat(data); expect(result).toContain('count:'); expect(result).toContain('0'); }); it('should preserve empty string values', () => { const data = { status: 'hasResults', content: '', }; const result = createResponseFormat(data); expect(result).toContain('content:'); }); }); describe('createResult', () => { it('should create a successful result', () => { const result = createResult({ data: { status: 'hasResults', path: '/test' }, }); expect(result.isError).toBe(false); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe('text'); }); it('should create an error result', () => { const result = createResult({ data: { status: 'error', message: 'Failed' }, isError: true, }); expect(result.isError).toBe(true); }); it('should include instructions when provided', () => { const result = createResult({ data: { status: 'hasResults' }, instructions: 'Process this data', }); const content = result.content[0] as { type: 'text'; text: string }; expect(content.text).toContain('instructions:'); expect(content.text).toContain('Process this data'); }); it('should handle complex data structures', () => { const result = createResult({ data: { status: 'hasResults', files: [ { path: '/file1.ts', size: 100 }, { path: '/file2.ts', size: 200 }, ], pagination: { currentPage: 1, totalPages: 3, }, }, }); expect(result.isError).toBe(false); const content = result.content[0] as { type: 'text'; text: string }; expect(content.text).toContain('files:'); expect(content.text).toContain('pagination:'); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bgauryy/octocode-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server