import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; import { embedText, padTo, OllamaError } from '../../lib/ai/ollama.js'; beforeEach(() => { global.fetch = vi.fn(async () => new Response( JSON.stringify({ embedding: new Array(768).fill(0.1) }), { status: 200, headers: { 'content-type': 'application/json' }} )); }); afterEach(() => vi.restoreAllMocks()); describe('ollama.embedText', () => { it('returns 768-dim vector', async () => { const v = await embedText('hello'); expect(v).toHaveLength(768); expect(v[0]).toBeCloseTo(0.1, 5); }); it('throws OllamaError on non-200', async () => { global.fetch = vi.fn(async () => new Response('boom', { status: 502 })); await expect(embedText('x')).rejects.toThrow(OllamaError); }); }); describe('padTo', () => { it('pads short vectors with zeros', () => { const v = padTo([1, 2, 3], 5); expect(v).toEqual([1, 2, 3, 0, 0]); }); it('truncates long vectors', () => { expect(padTo([1, 2, 3, 4, 5], 3)).toEqual([1, 2, 3]); }); it('returns same on exact length', () => { expect(padTo([1, 2], 2)).toEqual([1, 2]); }); });