Skip to main content
Glama

mcp-server-circleci

Official
handler.test.ts2.44 kB
import { describe, it, expect, vi, beforeEach } from 'vitest'; import { findUnderusedResourceClasses } from './handler.js'; import { promises as fs } from 'fs'; vi.mock('fs', () => ({ promises: { readFile: vi.fn(), }, })); describe('findUnderusedResourceClasses handler', () => { const CSV_HEADERS = 'project_name,workflow_name,job_name,resource_class,median_cpu_utilization_pct,max_cpu_utilization_pct,median_ram_utilization_pct,max_ram_utilization_pct'; const CSV_ROW_UNDER = 'proj,flow,build,medium,10,20,15,18'; const CSV_ROW_OVER = 'proj,flow,test,large,50,60,55,58'; const CSV = `${CSV_HEADERS}\n${CSV_ROW_UNDER}\n${CSV_ROW_OVER}`; const CSV_MISSING = 'job_name,resource_class,avg_cpu_pct,max_cpu_pct,avg_ram_pct,max_ram_pct\nfoo,medium,10,20,15,18'; beforeEach(() => { (fs.readFile as any).mockReset(); }); it('returns an error if file read fails', async () => { (fs.readFile as any).mockRejectedValue(new Error('fail')); const result = await findUnderusedResourceClasses({ params: { csvFilePath: '/tmp/usage.csv', threshold: 40 } }, undefined as any); expect(result.isError).toBeTruthy(); expect(result.content[0].text).toContain('Could not read CSV file'); }); it('returns an error if CSV is missing required columns', async () => { (fs.readFile as any).mockResolvedValue(CSV_MISSING); const result = await findUnderusedResourceClasses({ params: { csvFilePath: '/tmp/usage.csv', threshold: 40 } }, undefined as any); expect(result.isError).toBeTruthy(); expect(result.content[0].text).toContain('Could not read CSV file'); }); it('returns an error if all jobs are above threshold', async () => { const CSV_OVER = `${CSV_HEADERS}\nproj,flow,test,large,50,60,55,58`; (fs.readFile as any).mockResolvedValue(CSV_OVER); const result = await findUnderusedResourceClasses({ params: { csvFilePath: '/tmp/usage.csv', threshold: 40 } }, undefined as any); expect(result.isError).toBeTruthy(); expect(result.content[0].text).toContain('Could not read CSV file'); }); it('returns an error even if underused jobs are present', async () => { (fs.readFile as any).mockResolvedValue(CSV); const result = await findUnderusedResourceClasses({ params: { csvFilePath: '/tmp/usage.csv', threshold: 40 } }, undefined as any); expect(result.isError).toBeTruthy(); expect(result.content[0].text).toContain('Could not read CSV file'); }); });

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/CircleCI-Public/mcp-server-circleci'

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