Skip to main content
Glama
MIT License
27,120
19,780
  • Linux
  • Apple
outputGenerateDiffs.test.ts8 kB
import { describe, expect, test, vi } from 'vitest'; import type { RepomixConfigMerged } from '../../../src/config/configSchema.js'; import type { GitDiffResult } from '../../../src/core/git/gitDiffHandle.js'; import { generateOutput } from '../../../src/core/output/outputGenerate.js'; import type { RenderContext } from '../../../src/core/output/outputGeneratorTypes.js'; import { createMockConfig } from '../../testing/testUtils.js'; describe('Output Generation with Diffs', () => { const mockProcessedFiles = [ { path: 'file1.ts', content: 'console.log("file1");', relativeMetrics: { characters: 10, tokens: 5, }, }, ]; const sampleDiff = `diff --git a/file.ts b/file.ts index 1234567..abcdefg 100644 --- a/file.ts +++ b/file.ts @@ -1,5 +1,5 @@ const a = 1; -const b = 2; +const b = 3; const c = 3;`; const allFilePaths = ['file1.ts']; const rootDirs = ['/test/repo']; // Create a mock config for testing const mockConfig: RepomixConfigMerged = createMockConfig({ cwd: '/test', output: { files: true, directoryStructure: true, fileSummary: true, style: 'xml', git: { includeDiffs: true, }, }, }); const gitDiffResult: GitDiffResult = { workTreeDiffContent: sampleDiff, stagedDiffContent: '', }; // Mock dependencies const mockDeps = { buildOutputGeneratorContext: vi.fn().mockImplementation(async () => ({ generationDate: '2025-05-05T12:00:00Z', treeString: 'mock-tree', processedFiles: mockProcessedFiles, config: mockConfig, instruction: '', gitDiffResult, })), generateHandlebarOutput: vi.fn(), generateParsableXmlOutput: vi.fn(), generateParsableJsonOutput: vi.fn(), sortOutputFiles: vi.fn().mockResolvedValue(mockProcessedFiles), }; test('XML style output should include diffs section when includeDiffs is enabled', async () => { // Explicitly set XML style and parsable to false to use the template mockConfig.output.style = 'xml'; mockConfig.output.parsableStyle = false; // Mock the Handlebars output function to check for diffs in the template mockDeps.generateHandlebarOutput.mockImplementation((_config, renderContext: RenderContext, _processedFiles) => { // Verify that the renderContext has the gitDiffs property expect(renderContext.gitDiffWorkTree).toBe(sampleDiff); // Simulate the rendered output to check later return `<diffs>${renderContext.gitDiffWorkTree}</diffs>`; }); // Generate the output const output = await generateOutput( rootDirs, mockConfig, mockProcessedFiles, allFilePaths, gitDiffResult, undefined, mockDeps, ); // Verify the diffs are included in the output expect(output).toContain('<diffs>'); expect(output).toContain(sampleDiff); expect(output).toContain('</diffs>'); // Verify that the generateHandlebarOutput function was called expect(mockDeps.generateHandlebarOutput).toHaveBeenCalled(); }); test('XML style output with parsableStyle should include diffs section', async () => { // Set XML style and parsable to true mockConfig.output.style = 'xml'; mockConfig.output.parsableStyle = true; // Mock the parsable XML output function mockDeps.generateParsableXmlOutput.mockImplementation((renderContext: RenderContext) => { // Verify that the renderContext has the gitDiffs property expect(renderContext.gitDiffWorkTree).toBe(sampleDiff); // Simulate the XML output return `<repomix><diffs>${renderContext.gitDiffWorkTree}</diffs></repomix>`; }); // Generate the output const output = await generateOutput( rootDirs, mockConfig, mockProcessedFiles, allFilePaths, undefined, undefined, mockDeps, ); // Verify the diffs are included in the output expect(output).toContain('<repomix><diffs>'); expect(output).toContain(sampleDiff); expect(output).toContain('</diffs></repomix>'); // Verify that the generateParsableXmlOutput function was called expect(mockDeps.generateParsableXmlOutput).toHaveBeenCalled(); }); test('Markdown style output should include diffs section when includeDiffs is enabled', async () => { // Set markdown style mockConfig.output.style = 'markdown'; mockConfig.output.parsableStyle = false; // Mock the Handlebars output function for markdown mockDeps.generateHandlebarOutput.mockImplementation((_config, renderContext: RenderContext, _processedFiles) => { // Verify that the renderContext has the gitDiffs property expect(renderContext.gitDiffWorkTree).toBe(sampleDiff); // Simulate the markdown output return `# Git Diffs\n\`\`\`diff\n${renderContext.gitDiffWorkTree}\n\`\`\``; }); // Generate the output const output = await generateOutput( rootDirs, mockConfig, mockProcessedFiles, allFilePaths, undefined, undefined, mockDeps, ); // Verify the diffs are included in the output expect(output).toContain('# Git Diffs'); expect(output).toContain('```diff'); expect(output).toContain(sampleDiff); expect(output).toContain('```'); // Verify that the generateHandlebarOutput function was called expect(mockDeps.generateHandlebarOutput).toHaveBeenCalled(); }); test('Plain style output should include diffs section when includeDiffs is enabled', async () => { // Set plain style mockConfig.output.style = 'plain'; mockConfig.output.parsableStyle = false; // Mock the Handlebars output function for plain text mockDeps.generateHandlebarOutput.mockImplementation((_config, renderContext: RenderContext, _processedFiles) => { expect(renderContext.gitDiffWorkTree).toBe(sampleDiff); // Simulate the plain text output return `===============\nGit Diffs\n===============\n${renderContext.gitDiffWorkTree}`; }); // Generate the output const output = await generateOutput( rootDirs, mockConfig, mockProcessedFiles, allFilePaths, undefined, undefined, mockDeps, ); // Verify the diffs are included in the output expect(output).toContain('===============\nGit Diffs\n==============='); expect(output).toContain(sampleDiff); // Verify that the generateHandlebarOutput function was called expect(mockDeps.generateHandlebarOutput).toHaveBeenCalled(); }); test('Output should not include diffs section when includeDiffs is disabled', async () => { // Disable the includeDiffs option if (mockConfig.output.git) { mockConfig.output.git.includeDiffs = false; } // Update the mock to not include diffs mockDeps.buildOutputGeneratorContext.mockImplementationOnce(async () => ({ generationDate: '2025-05-05T12:00:00Z', treeString: 'mock-tree', processedFiles: mockProcessedFiles, config: mockConfig, instruction: '', // No gitDiffs property })); // Mock the Handlebars output function mockDeps.generateHandlebarOutput.mockImplementation((_config, renderContext: RenderContext, _processedFiles) => { // Verify that the renderContext does not have the gitDiffs property expect(renderContext.gitDiffWorkTree).toBeUndefined(); // Simulate the output without diffs return 'Output without diffs'; }); // Generate the output const output = await generateOutput( rootDirs, mockConfig, mockProcessedFiles, allFilePaths, undefined, undefined, mockDeps, ); // Verify the diffs are not included in the output expect(output).not.toContain('Git Diffs'); expect(output).not.toContain(sampleDiff); // Verify that the generateHandlebarOutput function was called expect(mockDeps.generateHandlebarOutput).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