review-copilot
Version:
ReviewCopilot - AI-powered code review assistant with customizable prompts
86 lines (85 loc) • 2.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const base_provider_1 = require("../providers/base-provider");
const openai_1 = __importDefault(require("openai"));
jest.mock('openai', () => {
return jest.fn().mockImplementation(() => ({}));
});
jest.mock('chalk', () => ({
blue: jest.fn((str) => str),
}));
class TestProvider extends base_provider_1.BaseProvider {
async review(prompt, content) {
return 'test review';
}
}
describe('BaseProvider', () => {
const mockConfig = {
provider: 'openai',
apiKey: 'test-key',
model: 'gpt-4o-mini',
baseURL: 'https://api.openai.com/v1',
defaultHeaders: {
'X-Custom-Header': 'test',
},
timeout: 30000,
};
let consoleSpy;
let mockOpenAI;
beforeEach(() => {
jest.clearAllMocks();
mockOpenAI = openai_1.default;
consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
});
afterEach(() => {
if (consoleSpy) {
consoleSpy.mockRestore();
}
});
afterAll(() => {
jest.restoreAllMocks();
});
it('should initialize OpenAI client with config', () => {
new TestProvider(mockConfig);
expect(mockOpenAI).toHaveBeenCalledWith({
apiKey: mockConfig.apiKey,
baseURL: mockConfig.baseURL,
defaultHeaders: mockConfig.defaultHeaders,
timeout: mockConfig.timeout,
});
});
it('should use default headers if not provided', () => {
const configWithoutHeaders = { ...mockConfig };
delete configWithoutHeaders.defaultHeaders;
new TestProvider(configWithoutHeaders);
expect(mockOpenAI).toHaveBeenCalledWith(expect.objectContaining({
defaultHeaders: {
'Content-Type': 'application/json',
},
}));
});
it('should use default timeout if not provided', () => {
const configWithoutTimeout = { ...mockConfig };
delete configWithoutTimeout.timeout;
new TestProvider(configWithoutTimeout);
expect(mockOpenAI).toHaveBeenCalledWith(expect.objectContaining({
timeout: 60000,
}));
});
it('should mask API key in logs', () => {
new TestProvider(mockConfig);
expect(consoleSpy).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
apiKey: expect.stringContaining('***'),
}));
});
it('should handle undefined API key in logs', () => {
const configWithoutApiKey = { ...mockConfig, apiKey: '' };
new TestProvider(configWithoutApiKey);
expect(consoleSpy).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
apiKey: undefined,
}));
});
});