import { generateDescriptions } from './openaiClient' const mockFetch = jest.fn() global.fetch = mockFetch const mockResponse = (content: string) => ({ ok: true, json: async () => ({ choices: [{ message: { content } }] }), }) describe('generateDescriptions', () => { beforeEach(() => { process.env.OPENAI_API_KEY = 'sk-test' mockFetch.mockReset() }) it('retourne shortDesc et longDesc depuis OpenAI', async () => { mockFetch .mockResolvedValueOnce(mockResponse('

Description courte

')) .mockResolvedValueOnce(mockResponse('

Description longue

')) const result = await generateDescriptions({ title: 'Perceuse', rawDescription: 'Une perceuse', comment: '', vendor: 'BOSCH', famille: 'OUTILLAGE', }) expect(result.shortDesc).toBe('

Description courte

') expect(result.longDesc).toBe('

Description longue

') expect(mockFetch).toHaveBeenCalledTimes(2) }) it('lance les deux requêtes en parallèle', async () => { mockFetch.mockResolvedValue(mockResponse('

ok

')) await generateDescriptions({ title: 'T', rawDescription: '', comment: '', vendor: '', famille: '' }) expect(mockFetch).toHaveBeenCalledTimes(2) }) it('lance une erreur si OPENAI_API_KEY manquant', async () => { delete process.env.OPENAI_API_KEY await expect(generateDescriptions({ title: 'T', rawDescription: '', comment: '', vendor: '', famille: '' })) .rejects.toThrow('OPENAI_API_KEY') }) it('lance une erreur si la réponse OpenAI est non-ok', async () => { mockFetch.mockResolvedValue({ ok: false, status: 429, text: async () => 'rate limited' }) await expect(generateDescriptions({ title: 'T', rawDescription: '', comment: '', vendor: '', famille: '' })) .rejects.toThrow('429') }) })