Skip to main content
Glama

POC MCP Server

api.test.ts5.24 kB
import { describe, it, expect } from 'vitest'; import { getLoomersInArea, getLoomers, getForms, getFormResponses, getProjects } from '../../src/services/api.js'; import type { Connection, Loomer, Form, FormResponse, Project } from '../../src/types/index.js'; describe('API Services', () => { describe('getLoomers', () => { it('should return a paginated list of loomers', async () => { const result = await getLoomers({ first: 10 }); // Validate response structure expect(result.edges).toBeDefined(); expect(result.pageInfo).toBeDefined(); expect(Array.isArray(result.edges)).toBe(true); // Validate loomer data if (result.edges.length > 0) { const firstLoomer = result.edges[0].node; expect(firstLoomer.id).toBeDefined(); expect('name' in firstLoomer).toBe(true); expect('email' in firstLoomer).toBe(true); } // Validate pagination info expect('hasNextPage' in result.pageInfo).toBe(true); expect('hasPreviousPage' in result.pageInfo).toBe(true); expect('startCursor' in result.pageInfo).toBe(true); expect('endCursor' in result.pageInfo).toBe(true); }); it('should filter loomers by name', async () => { const filter = { name: { like: 'Bruno' } }; const result = await getLoomers({ filter }); // Validate filtered results result.edges.forEach(({ node }) => { expect(node.name?.includes('Bruno')).toBe(true); }); }); it('should sort loomers by name', async () => { const orderBy = [{ field: 'name', direction: 'AscNullsLast' as const }]; const result = await getLoomers({ orderBy }); // Validate sorting if (result.edges.length > 1) { const names = result.edges.map(({ node }) => node.name).filter((name): name is string => name !== null); const sortedNames = [...names].sort(); expect(names).toEqual(sortedNames); } }); }); describe('getLoomersInArea', () => { it('should return the number of loomers in an area', async () => { const areaId = '042fa576-56d3-48bc-a295-6886adda528d'; // Use a known area ID const count = await getLoomersInArea(areaId); expect(typeof count).toBe('number'); expect(count >= 0).toBe(true); }); }); describe('getForms', () => { it('should return a paginated list of forms', async () => { const result = await getForms({ first: 10 }); // Validate response structure expect(result.edges).toBeDefined(); expect(result.pageInfo).toBeDefined(); expect(Array.isArray(result.edges)).toBe(true); // Validate form data if (result.edges.length > 0) { const firstForm = result.edges[0].node; expect(firstForm.id).toBeDefined(); expect('title' in firstForm).toBe(true); expect('description' in firstForm).toBe(true); } }); it('should filter forms by title', async () => { const filter = { title: { like: 'Test' } }; const result = await getForms({ filter }); // Validate filtered results result.edges.forEach(({ node }) => { expect(node.title?.includes('Test')).toBe(true); }); }); }); describe('getFormResponses', () => { it('should return a paginated list of form responses', async () => { const result = await getFormResponses({ first: 10 }); // Validate response structure expect(result.edges).toBeDefined(); expect(result.pageInfo).toBeDefined(); expect(Array.isArray(result.edges)).toBe(true); // Validate form response data if (result.edges.length > 0) { const firstResponse = result.edges[0].node; expect(firstResponse.id).toBeDefined(); expect('form_id' in firstResponse).toBe(true); expect('loomer_id' in firstResponse).toBe(true); expect(firstResponse.responses).toBeDefined(); } }); it('should filter form responses by formId', async () => { const formId = '1'; // Use a known form ID const filter = { form_id: { eq: formId } }; const result = await getFormResponses({ filter }); // Validate filtered results result.edges.forEach(({ node }) => { expect(node.form_id).toBe(formId); }); }); }); describe('getProjects', () => { it('should return a paginated list of projects', async () => { const result = await getProjects({ first: 10 }); // Validate response structure expect(result.edges).toBeDefined(); expect(result.pageInfo).toBeDefined(); expect(Array.isArray(result.edges)).toBe(true); // Validate project data if (result.edges.length > 0) { const firstProject = result.edges[0].node; expect(firstProject.id).toBeDefined(); expect('name' in firstProject).toBe(true); expect(firstProject.createdAt).toBeDefined(); } }); it('should filter projects by name', async () => { const filter = { name: { like: 'Test' } }; const result = await getProjects({ filter }); // Validate filtered results result.edges.forEach(({ node }) => { expect(node.name?.includes('Test')).toBe(true); }); }); }); });

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/BrunoSSantana/poc-mcp-server'

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