refactoring continued

This commit is contained in:
Your Name
2026-04-06 22:27:32 +00:00
parent cf6866c38d
commit fc4439ce03
13 changed files with 130 additions and 97 deletions
@@ -1,13 +1,13 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';
import * as fs from 'node:fs';
import { describe, it, expect, beforeEach } from 'vitest';
import { SidecarLoader } from './SidecarLoader.js';
import { defaultSidecarProfile } from './profiles.js';
import { InMemoryFileSystem } from '../system/InMemoryFileSystem.js';
vi.mock('node:fs');
describe('SidecarLoader (Fake FS)', () => {
let fileSystem: InMemoryFileSystem;
describe('SidecarLoader', () => {
beforeEach(() => {
vi.resetAllMocks();
fileSystem = new InMemoryFileSystem();
});
const mockConfig = {
@@ -15,48 +15,38 @@ describe('SidecarLoader', () => {
} as any;
it('returns default profile if file does not exist', () => {
vi.mocked(fs.existsSync).mockReturnValue(false);
const result = SidecarLoader.fromConfig(mockConfig);
const result = SidecarLoader.fromConfig(mockConfig, fileSystem);
expect(result).toBe(defaultSidecarProfile);
});
it('returns default profile if file exists but is 0 bytes', () => {
vi.mocked(fs.existsSync).mockReturnValue(true);
vi.mocked(fs.statSync).mockReturnValue({ size: 0 } as any);
const result = SidecarLoader.fromConfig(mockConfig);
fileSystem.setFile('/path/to/sidecar.json', '');
const result = SidecarLoader.fromConfig(mockConfig, fileSystem);
expect(result).toBe(defaultSidecarProfile);
});
it('throws an error if file is empty whitespace', () => {
vi.mocked(fs.existsSync).mockReturnValue(true);
vi.mocked(fs.statSync).mockReturnValue({ size: 5 } as any);
vi.mocked(fs.readFileSync).mockReturnValue(' \n ');
expect(() => SidecarLoader.fromConfig(mockConfig)).toThrow('is empty');
fileSystem.setFile('/path/to/sidecar.json', ' \n ');
expect(() => SidecarLoader.fromConfig(mockConfig, fileSystem)).toThrow('is empty');
});
it('returns parsed config if file is valid', () => {
vi.mocked(fs.existsSync).mockReturnValue(true);
vi.mocked(fs.statSync).mockReturnValue({ size: 100 } as any);
const validConfig = {
budget: { retainedTokens: 1000, maxTokens: 2000 },
gcBackstop: { strategy: 'truncate', target: 'max' },
pipelines: []
};
vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(validConfig));
const result = SidecarLoader.fromConfig(mockConfig);
fileSystem.setFile('/path/to/sidecar.json', JSON.stringify(validConfig));
const result = SidecarLoader.fromConfig(mockConfig, fileSystem);
expect(result).toEqual(validConfig);
});
it('throws an error if schema validation fails', () => {
vi.mocked(fs.existsSync).mockReturnValue(true);
vi.mocked(fs.statSync).mockReturnValue({ size: 100 } as any);
const invalidConfig = {
budget: { retainedTokens: "invalid string" }, // Invalid type
pipelines: []
};
vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(invalidConfig));
expect(() => SidecarLoader.fromConfig(mockConfig)).toThrow('Validation error:');
fileSystem.setFile('/path/to/sidecar.json', JSON.stringify(invalidConfig));
expect(() => SidecarLoader.fromConfig(mockConfig, fileSystem)).toThrow('Validation error:');
});
});