"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const gemini_1 = require("../../src/engine/gemini"); const generative_ai_1 = require("@google/generative-ai"); const config_1 = require("../../src/commands/config"); describe('Gemini', () => { let gemini; let mockConfig; let mockGoogleGenerativeAi; let mockGenerativeModel; let mockExit; const noop = (...args) => { }; const mockGemini = () => { mockConfig = (0, config_1.getConfig)(); gemini = new gemini_1.GeminiEngine({ apiKey: mockConfig.OCO_API_KEY, model: mockConfig.OCO_MODEL }); }; const oldEnv = process.env; beforeEach(() => { jest.resetModules(); process.env = { ...oldEnv }; jest.mock('@google/generative-ai'); jest.mock('../src/commands/config'); jest.mock('@clack/prompts', () => ({ intro: jest.fn(), outro: jest.fn() })); mockExit = jest.spyOn(process, 'exit').mockImplementation(); mockConfig = (0, config_1.getConfig)(); mockConfig.OCO_AI_PROVIDER = config_1.OCO_AI_PROVIDER_ENUM.GEMINI; mockConfig.OCO_API_KEY = 'mock-api-key'; mockConfig.OCO_MODEL = 'gemini-1.5-flash'; mockGoogleGenerativeAi = new generative_ai_1.GoogleGenerativeAI(mockConfig.OCO_API_KEY); mockGenerativeModel = mockGoogleGenerativeAi.getGenerativeModel({ model: mockConfig.OCO_MODEL }); }); afterEach(() => { gemini = undefined; }); afterAll(() => { mockExit.mockRestore(); process.env = oldEnv; }); it.skip('should exit process if OCO_GEMINI_API_KEY is not set and command is not config', () => { process.env.OCO_GEMINI_API_KEY = undefined; process.env.OCO_AI_PROVIDER = 'gemini'; mockGemini(); expect(mockExit).toHaveBeenCalledWith(1); }); it('should generate commit message', async () => { const mockGenerateContent = jest .fn() .mockResolvedValue({ response: { text: () => 'generated content' } }); mockGenerativeModel.generateContent = mockGenerateContent; mockGemini(); const messages = [ { role: 'system', content: 'system message' }, { role: 'assistant', content: 'assistant message' } ]; jest .spyOn(gemini, 'generateCommitMessage') .mockImplementation(async () => 'generated content'); const result = await gemini.generateCommitMessage(messages); expect(result).toEqual('generated content'); }); });