Skip to main content
Glama
MIT License
27,120
19,787
  • Linux
  • Apple
calculateMetrics.test.ts•2.89 kB
import { describe, expect, it, type Mock, vi } from 'vitest'; import type { ProcessedFile } from '../../../src/core/file/fileTypes.js'; import type { GitDiffResult } from '../../../src/core/git/gitDiffHandle.js'; import { calculateMetrics } from '../../../src/core/metrics/calculateMetrics.js'; import { calculateSelectiveFileMetrics } from '../../../src/core/metrics/calculateSelectiveFileMetrics.js'; import type { RepomixProgressCallback } from '../../../src/shared/types.js'; import { createMockConfig } from '../../testing/testUtils.js'; vi.mock('../../../src/core/metrics/TokenCounter.js', () => { return { TokenCounter: vi.fn().mockImplementation(() => ({ countTokens: vi.fn().mockReturnValue(10), free: vi.fn(), })), }; }); vi.mock('../../../src/core/metrics/aggregateMetrics.js'); vi.mock('../../../src/core/metrics/calculateSelectiveFileMetrics.js', () => ({ calculateSelectiveFileMetrics: vi.fn(), })); describe('calculateMetrics', () => { it('should calculate metrics and return the result', async () => { const processedFiles: ProcessedFile[] = [ { path: 'file1.txt', content: 'a'.repeat(100) }, { path: 'file2.txt', content: 'b'.repeat(200) }, ]; const output = 'a'.repeat(300); const progressCallback: RepomixProgressCallback = vi.fn(); const fileMetrics = [ { path: 'file1.txt', charCount: 100, tokenCount: 10 }, { path: 'file2.txt', charCount: 200, tokenCount: 20 }, ]; (calculateSelectiveFileMetrics as unknown as Mock).mockResolvedValue(fileMetrics); const aggregatedResult = { totalFiles: 2, totalCharacters: 300, totalTokens: 30, fileCharCounts: { 'file1.txt': 100, 'file2.txt': 200, }, fileTokenCounts: { 'file1.txt': 10, 'file2.txt': 20, }, gitDiffTokenCount: 0, gitLogTokenCount: 0, }; const config = createMockConfig(); const gitDiffResult: GitDiffResult | undefined = undefined; const mockTaskRunner = { run: vi.fn(), cleanup: vi.fn(), }; const result = await calculateMetrics(processedFiles, output, progressCallback, config, gitDiffResult, undefined, { calculateSelectiveFileMetrics, calculateOutputMetrics: () => Promise.resolve(30), calculateGitDiffMetrics: () => Promise.resolve(0), calculateGitLogMetrics: () => Promise.resolve({ gitLogTokenCount: 0 }), taskRunner: mockTaskRunner, }); expect(progressCallback).toHaveBeenCalledWith('Calculating metrics...'); expect(calculateSelectiveFileMetrics).toHaveBeenCalledWith( processedFiles, ['file2.txt', 'file1.txt'], // sorted by character count desc 'o200k_base', progressCallback, expect.objectContaining({ taskRunner: expect.any(Object), }), ); expect(result).toEqual(aggregatedResult); }); });

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/yamadashy/repomix'

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