UNPKG

review-copilot

Version:

ReviewCopilot - AI-powered code review assistant with customizable prompts

102 lines (101 loc) 4.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const config_manager_1 = require("../config/config-manager"); const promises_1 = require("fs/promises"); jest.mock('fs/promises'); describe('ConfigManager', () => { let configManager; const mockConfig = { providers: { openai: { enabled: true, apiKey: 'test-key', model: 'gpt-4o-mini', baseURL: 'https://api.openai.com/v1', reviewLanguage: 'zh', }, }, triggers: [{ on: 'pull_request' }, { on: 'merge_request' }], rules: { commitMessage: { enabled: true, pattern: '^(feat|fix)', prompt: 'Review commit message', }, branchName: { enabled: true, pattern: '^(feature|bugfix)', prompt: 'Review branch name', }, codeChanges: { enabled: true, filePatterns: ['**/*.ts'], prompt: 'Review code changes', }, }, customReviewPoints: [ { name: 'Security', prompt: 'Check security', }, ], }; beforeEach(async () => { jest.resetAllMocks(); promises_1.readFile.mockResolvedValue(JSON.stringify(mockConfig)); // Reset the singleton instance before each test config_manager_1.ConfigManager.instance = undefined; configManager = await config_manager_1.ConfigManager.getInstance(); }); it('should be a singleton', async () => { const instance1 = await config_manager_1.ConfigManager.getInstance(); const instance2 = await config_manager_1.ConfigManager.getInstance(); expect(instance1).toBe(instance2); }); it('should load and validate config', async () => { const config = configManager.getConfig(); expect(config).toBeDefined(); const openaiConfig = config.providers.openai; expect(openaiConfig).toBeDefined(); expect(openaiConfig?.apiKey).toBe('test-key'); }); it('should replace environment variables', async () => { process.env.TEST_API_KEY = 'env-key'; const configWithEnv = { ...mockConfig, providers: { ...mockConfig.providers, openai: { ...mockConfig.providers.openai, apiKey: '${TEST_API_KEY}', }, }, }; promises_1.readFile.mockResolvedValue(JSON.stringify(configWithEnv)); // Reset the singleton instance config_manager_1.ConfigManager.instance = undefined; const newConfigManager = await config_manager_1.ConfigManager.getInstance(); const config = newConfigManager.getConfig(); const openaiConfig = config.providers.openai; expect(openaiConfig).toBeDefined(); expect(openaiConfig?.apiKey).toBe('env-key'); }); it('should throw error for invalid config', async () => { const invalidConfig = { ...mockConfig, providers: undefined, // Remove required providers field }; promises_1.readFile.mockResolvedValue(JSON.stringify(invalidConfig)); // Reset the singleton instance and its internal state config_manager_1.ConfigManager.instance = undefined; const instance = new config_manager_1.ConfigManager(); instance.configPromise = null; instance.config = null; await expect(config_manager_1.ConfigManager.getInstance()).rejects.toThrow('Failed to load config'); }); it('should throw error when getting config before loading', async () => { // Create a new instance without loading config const newInstance = new config_manager_1.ConfigManager(); expect(() => newInstance.getConfig()).toThrow('Config not loaded'); }); });