UNPKG

gitingest-mcp

Version:

MCP server for transforming Git repositories into LLM-friendly text digests

91 lines (66 loc) 2.03 kB
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; import { ingestSchema } from '../../src/tools/ingest.js'; import { z } from 'zod'; vi.mock('../../src/tools/git-clone.js', () => ({ GitCloneTool: { clone: vi.fn(), cleanup: vi.fn(), }, })); vi.mock('../../src/tools/local-repository.js', () => ({ LocalRepositoryTool: { analyze: vi.fn(), }, })); vi.mock('../../src/tools/filter-engine.js', () => ({ FilterEngine: vi.fn().mockImplementation(() => ({ loadIgnorePatterns: vi.fn(), shouldIncludeFile: vi.fn().mockReturnValue({ shouldInclude: true }), })), })); vi.mock('fs/promises', () => ({ readFile: vi.fn().mockResolvedValue('file content'), })); describe('ingestSchema validation', () => { beforeEach(() => { vi.clearAllMocks(); }); afterEach(() => { vi.restoreAllMocks(); }); it('should validate required repository parameter', () => { // Arrange const invalidInput = {}; // Act const act = () => ingestSchema.parse(invalidInput); // Assert expect(act).toThrow(z.ZodError); }); it('should accept valid repository parameter', () => { // Arrange const validInput = { repository: 'test-repo' }; // Act const result = ingestSchema.parse(validInput); // Assert expect(result.repository).toBe('test-repo'); }); it('should parse timeout parameter correctly', () => { // Arrange const inputWithTimeout = { repository: 'test-repo', timeout: 5000 }; // Act const parsed = ingestSchema.parse(inputWithTimeout); // Assert expect(parsed.timeout).toBe(5000); }); it('should use default values for optional parameters', () => { // Arrange const minimalInput = { repository: 'test-repo' }; // Act const parsed = ingestSchema.parse(minimalInput); // Assert expect(parsed.cloneDepth).toBe(1); expect(parsed.maxFiles).toBe(1000); expect(parsed.maxTotalSize).toBe(50 * 1024 * 1024); expect(parsed.timeout).toBe(30000); }); });