import { beforeEach, describe, expect, it, vi } from 'vitest';
import type OpenAI from 'openai';
import { OpenAIClient } from '../src/clients/openaiClient.js';
const createMock = vi.fn();
const fakeOpenAI = {
chat: {
completions: {
create: createMock,
},
},
} as unknown as OpenAI;
describe('OpenAIClient', () => {
beforeEach(() => {
createMock.mockReset();
});
it('returns normalized result from OpenAI response', async () => {
createMock.mockResolvedValueOnce({
choices: [
{
message: {
content: 'hello world',
},
},
],
usage: { prompt_tokens: 5, completion_tokens: 7, total_tokens: 12 },
});
const client = new OpenAIClient(fakeOpenAI);
const result = await client.chat({ model: 'gpt-test', messages: [] });
expect(result).toEqual({
content: 'hello world',
promptTokens: 5,
completionTokens: 7,
totalTokens: 12,
});
});
it('throws when OpenAI returns empty response', async () => {
createMock.mockResolvedValueOnce({ choices: [] });
const client = new OpenAIClient(fakeOpenAI);
await expect(client.chat({ model: 'gpt-test', messages: [] })).rejects.toThrow('OpenAI returned an empty response');
});
});