import { describe, it, expect, vi, afterEach } from 'vitest'; import { chatPublic } from '../local-client'; describe('chatPublic', () => { afterEach(() => { vi.unstubAllGlobals(); }); it('turns a network/CORS-level failure into an actionable message naming the Base URL', async () => { vi.stubGlobal('fetch', vi.fn().mockRejectedValue(new TypeError('Failed to fetch'))); await expect( chatPublic('https://platform.deepseek.com/', 'sk-test', 'deepseek-chat', [ { role: 'user', content: 'hi' }, ]), ).rejects.toThrow(/Could not reach https:\/\/platform\.deepseek\.com\/chat\/completions/); }); it('still reports the provider-returned status when the request completes', async () => { vi.stubGlobal( 'fetch', vi.fn().mockResolvedValue({ ok: false, status: 401, json: async () => ({}) }), ); await expect( chatPublic('https://api.deepseek.com', 'sk-bad', 'deepseek-chat', [ { role: 'user', content: 'hi' }, ]), ).rejects.toThrow('Provider returned 401'); }); it('returns the message content on success', async () => { vi.stubGlobal( 'fetch', vi.fn().mockResolvedValue({ ok: true, status: 200, json: async () => ({ choices: [{ message: { content: 'hello there' } }] }), }), ); await expect( chatPublic('https://api.deepseek.com', 'sk-good', 'deepseek-chat', [ { role: 'user', content: 'hi' }, ]), ).resolves.toBe('hello there'); }); });