@debugmcp/mcp-debugger
Version:
Run-time step-through debugging for LLM agents.
75 lines (53 loc) • 2.1 kB
text/typescript
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import fs from 'fs';
import { getVersion } from '../../../src/cli/version.js';
vi.mock('fs');
describe('Version Utility', () => {
let consoleErrorSpy: ReturnType<typeof vi.spyOn>;
beforeEach(() => {
consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
});
afterEach(() => {
consoleErrorSpy.mockRestore();
vi.resetAllMocks();
});
it('should return version from package.json', () => {
const mockPackageJson = {
name: 'test-package',
version: '1.2.3'
};
vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(mockPackageJson));
const version = getVersion();
expect(version).toBe('1.2.3');
expect(fs.readFileSync).toHaveBeenCalledWith(expect.stringContaining('package.json'), 'utf8');
});
it('should return 0.0.0 if version is not present in package.json', () => {
const mockPackageJson = {
name: 'test-package'
// No version field
};
vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(mockPackageJson));
const version = getVersion();
expect(version).toBe('0.0.0');
});
it('should return 0.0.0 and log error if reading package.json fails', () => {
const error = new Error('File not found');
vi.mocked(fs.readFileSync).mockImplementation(() => {
throw error;
});
const version = getVersion();
expect(version).toBe('0.0.0');
expect(consoleErrorSpy).toHaveBeenCalledWith('Failed to read version from package.json:', error);
});
it('should return 0.0.0 and log error if package.json has invalid JSON', () => {
vi.mocked(fs.readFileSync).mockReturnValue('{ invalid json }');
const version = getVersion();
expect(version).toBe('0.0.0');
expect(consoleErrorSpy).toHaveBeenCalledWith('Failed to read version from package.json:', expect.any(Error));
});
it('should handle empty package.json', () => {
vi.mocked(fs.readFileSync).mockReturnValue('{}');
const version = getVersion();
expect(version).toBe('0.0.0');
});
});