70 lines
2.6 KiB
JavaScript
70 lines
2.6 KiB
JavaScript
"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');
|
|
});
|
|
});
|