Skip to main content
Glama
MIT License
27,120
19,787
  • Linux
  • Apple
diffsInOutput.test.ts•7.04 kB
import { beforeEach, describe, expect, test, vi } from 'vitest'; import type { RepomixConfigMerged } from '../../../src/config/configSchema.js'; import type { ProcessedFile } from '../../../src/core/file/fileTypes.js'; import type { GitDiffResult } from '../../../src/core/git/gitDiffHandle.js'; import * as gitDiffModule from '../../../src/core/git/gitDiffHandle.js'; import * as gitRepositoryModule from '../../../src/core/git/gitRepositoryHandle.js'; import { buildOutputGeneratorContext, generateOutput } from '../../../src/core/output/outputGenerate.js'; import type { RenderContext } from '../../../src/core/output/outputGeneratorTypes.js'; import { createMockConfig } from '../../testing/testUtils.js'; // Mock the git modules vi.mock('../../../src/core/git/gitDiffHandle.js', () => ({ getWorkTreeDiff: vi.fn(), })); vi.mock('../../../src/core/git/gitRepositoryHandle.js', () => ({ isGitRepository: vi.fn(), })); describe('Git Diffs in Output', () => { const sampleDiff = `diff --git a/file1.js b/file1.js index 123..456 100644 --- a/file1.js +++ b/file1.js @@ -1,5 +1,5 @@ -old line +new line`; let mockConfig: RepomixConfigMerged; beforeEach(() => { vi.resetAllMocks(); // Mock the git command vi.mocked(gitDiffModule.getWorkTreeDiff).mockResolvedValue(sampleDiff); vi.mocked(gitRepositoryModule.isGitRepository).mockResolvedValue(true); // Sample minimal config using createMockConfig utility mockConfig = createMockConfig({ cwd: '/test/repo', input: { maxFileSize: 1000000, }, output: { filePath: 'output.txt', style: 'plain', git: { includeDiffs: false, }, }, }); }); test('buildOutputGeneratorContext should include diffs when enabled', async () => { // Enable diffs if (mockConfig.output.git) { mockConfig.output.git.includeDiffs = true; } const rootDirs = ['/test/repo']; const allFilePaths = ['file1.js', 'file2.js']; const processedFiles: ProcessedFile[] = [ { path: 'file1.js', content: 'console.log("file1");', }, { path: 'file2.js', content: 'console.log("file2");', }, ]; const sampleDiff = 'diff --git a/file1.js b/file1.js'; const context = await buildOutputGeneratorContext(rootDirs, mockConfig, allFilePaths, processedFiles, { workTreeDiffContent: sampleDiff, stagedDiffContent: '', }); // Context should include gitDiffs expect(context.gitDiffResult?.workTreeDiffContent).toBe(sampleDiff); }); test('generateOutput should include diffs in XML output via object', async () => { // Enable diffs mockConfig.output.style = 'xml'; if (mockConfig.output.git) { mockConfig.output.git.includeDiffs = true; } const rootDirs = ['/test/repo']; const processedFiles: ProcessedFile[] = [ { path: 'file1.js', content: 'console.log("file1");', }, ]; // Create a modified generateOutput with mocked deps const mockBuildOutputGeneratorContext = vi.fn().mockImplementation(async () => { return { generationDate: '2025-05-06T00:00:00.000Z', treeString: '.\n└── file1.js', processedFiles, config: mockConfig, instruction: '', gitDiffs: sampleDiff, }; }); const mockGenerateHandlebarOutput = vi.fn().mockResolvedValue('<xml>output with diffs</xml>'); const mockGenerateParsableXmlOutput = vi.fn().mockImplementation(async (renderContext: RenderContext) => { // Check that renderContext has gitDiffs expect(renderContext.gitDiffWorkTree).toBe(sampleDiff); return '<xml>parsable output with diffs object</xml>'; }); const mockSortOutputFiles = vi.fn().mockImplementation((files) => Promise.resolve(files)); const gitDiffResult: GitDiffResult = { workTreeDiffContent: sampleDiff, stagedDiffContent: '', }; // Call generateOutput with mocked deps const _output = await generateOutput(rootDirs, mockConfig, processedFiles, ['file1.js'], gitDiffResult, undefined, { buildOutputGeneratorContext: mockBuildOutputGeneratorContext, generateHandlebarOutput: mockGenerateHandlebarOutput, generateParsableXmlOutput: mockGenerateParsableXmlOutput, generateParsableJsonOutput: vi.fn(), sortOutputFiles: mockSortOutputFiles, }); // Check that the output was generated with the correct template expect(mockBuildOutputGeneratorContext).toHaveBeenCalled(); // For non-parsable XML, should use Handlebars if (!mockConfig.output.parsableStyle) { expect(mockGenerateHandlebarOutput).toHaveBeenCalled(); } else { // For parsable XML, should use XML generator expect(mockGenerateParsableXmlOutput).toHaveBeenCalled(); } }); test('generateOutput should include diffs in Markdown output', async () => { // Enable diffs with markdown style mockConfig.output.style = 'markdown'; if (mockConfig.output.git) { mockConfig.output.git.includeDiffs = true; } const rootDirs = ['/test/repo']; const processedFiles: ProcessedFile[] = [ { path: 'file1.js', content: 'console.log("file1");', }, ]; // Create a modified generateOutput with mocked deps const mockBuildOutputGeneratorContext = vi.fn().mockImplementation(async () => { return { generationDate: '2025-05-06T00:00:00.000Z', treeString: '.\n└── file1.js', processedFiles, config: mockConfig, instruction: '', gitDiffResult: { workTreeDiffContent: sampleDiff, stagedDiffContent: '', }, }; }); const mockGenerateHandlebarOutput = vi.fn().mockImplementation(async (_config, renderContext: RenderContext) => { // Check that renderContext has gitDiffs for markdown template expect(renderContext.gitDiffWorkTree).toBe(sampleDiff); return `# Markdown output with diffs\n\`\`\`diff\n${sampleDiff}\n\`\`\``; }); const mockGenerateParsableXmlOutput = vi.fn(); const mockSortOutputFiles = vi.fn().mockImplementation((files) => Promise.resolve(files)); const gitDiffResult: GitDiffResult = { workTreeDiffContent: sampleDiff, stagedDiffContent: '', }; // Call generateOutput with mocked deps const _output = await generateOutput(rootDirs, mockConfig, processedFiles, ['file1.js'], gitDiffResult, undefined, { buildOutputGeneratorContext: mockBuildOutputGeneratorContext, generateHandlebarOutput: mockGenerateHandlebarOutput, generateParsableXmlOutput: mockGenerateParsableXmlOutput, generateParsableJsonOutput: vi.fn(), sortOutputFiles: mockSortOutputFiles, }); // For markdown output, should use Handlebars expect(mockGenerateHandlebarOutput).toHaveBeenCalled(); // XML generator should not be called for markdown expect(mockGenerateParsableXmlOutput).not.toHaveBeenCalled(); }); });

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