Skip to main content
Glama
MIT License
27,120
19,787
  • Linux
  • Apple
copyToClipboardIfEnabled.test.ts•4.57 kB
import { spawn } from 'node:child_process'; import clipboard from 'clipboardy'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import type { RepomixConfigMerged } from '../../../src/config/configSchema.js'; import { copyToClipboardIfEnabled } from '../../../src/core/packager/copyToClipboardIfEnabled.js'; import type { RepomixProgressCallback } from '../../../src/shared/types.js'; vi.mock('clipboardy'); vi.mock('../../../src/shared/logger'); vi.mock('node:child_process'); describe('copyToClipboardIfEnabled', () => { const originalEnv = process.env; beforeEach(() => { vi.resetAllMocks(); process.env = { ...originalEnv }; process.env.WAYLAND_DISPLAY = undefined; }); afterEach(() => { process.env = originalEnv; }); it('should copy output to clipboard if flag enabled in config', async () => { const output = 'test output'; const config: RepomixConfigMerged = { output: { copyToClipboard: true }, } as RepomixConfigMerged; const progressCallback: RepomixProgressCallback = vi.fn(); await copyToClipboardIfEnabled(output, progressCallback, config); expect(progressCallback).toHaveBeenCalledWith('Copying to clipboard...'); expect(clipboard.write).toHaveBeenCalledWith(output); }); it('should not copy output to clipboard if flag disabled in config', async () => { const output = 'test output'; const config: RepomixConfigMerged = { output: { copyToClipboard: false }, } as RepomixConfigMerged; const progressCallback: RepomixProgressCallback = vi.fn(); await copyToClipboardIfEnabled(output, progressCallback, config); expect(progressCallback).not.toHaveBeenCalled(); expect(clipboard.write).not.toHaveBeenCalled(); }); it('should use wl-copy in Wayland environment', async () => { process.env.WAYLAND_DISPLAY = '1'; process.env.NODE_ENV = 'development'; const output = 'test output'; const config: RepomixConfigMerged = { output: { copyToClipboard: true }, } as RepomixConfigMerged; const progressCallback: RepomixProgressCallback = vi.fn(); type MockProc = { on: ReturnType<typeof vi.fn>; stdin: { end: ReturnType<typeof vi.fn> }; }; const mockProc: MockProc = { on: vi.fn(), stdin: { end: vi.fn() }, }; vi.mocked(spawn).mockReturnValue(mockProc as unknown as ReturnType<typeof spawn>); // Simulate successful wl-copy execution mockProc.on.mockImplementation((event, callback) => { if (event === 'close') { callback(0); } return mockProc; }); await copyToClipboardIfEnabled(output, progressCallback, config); expect(spawn).toHaveBeenCalledWith('wl-copy', [], { stdio: ['pipe', 'ignore', 'ignore'] }); expect(mockProc.stdin.end).toHaveBeenCalledWith(output); expect(clipboard.write).not.toHaveBeenCalled(); }); it('should fallback to clipboardy when wl-copy fails', async () => { process.env.WAYLAND_DISPLAY = '1'; process.env.NODE_ENV = 'development'; const output = 'test output'; const config: RepomixConfigMerged = { output: { copyToClipboard: true }, } as RepomixConfigMerged; const progressCallback: RepomixProgressCallback = vi.fn(); type MockProc = { on: ReturnType<typeof vi.fn>; stdin: { end: ReturnType<typeof vi.fn> }; }; const mockProc: MockProc = { on: vi.fn(), stdin: { end: vi.fn() }, }; vi.mocked(spawn).mockReturnValue(mockProc as unknown as ReturnType<typeof spawn>); // Simulate wl-copy failure mockProc.on.mockImplementation((event, callback) => { if (event === 'error') { callback(new Error('Command not found')); } return mockProc; }); await copyToClipboardIfEnabled(output, progressCallback, config); expect(spawn).toHaveBeenCalledWith('wl-copy', [], { stdio: ['pipe', 'ignore', 'ignore'] }); expect(clipboard.write).toHaveBeenCalledWith(output); }); it('should handle clipboardy failure', async () => { const output = 'test output'; const config: RepomixConfigMerged = { output: { copyToClipboard: true }, } as RepomixConfigMerged; const progressCallback: RepomixProgressCallback = vi.fn(); vi.mocked(clipboard.write).mockRejectedValue(new Error('Clipboard access denied')); await copyToClipboardIfEnabled(output, progressCallback, config); expect(progressCallback).toHaveBeenCalledWith('Copying to clipboard...'); expect(clipboard.write).toHaveBeenCalledWith(output); }); });

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