deckhearth/test/lib/card-embed.test.js
varutasu 8f09ed1ef6
feat(scanner): Layer-0 visual catalog search (Phase 3) (#160)
Add pgvector embeddings on cards, server-side cohere/embed-v4.0 via AI
Gateway, kNN identify route, and L0→L1→L2 client orchestration with
empty-index fast escalate and id-cursor backfill job.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-14 21:46:39 -05:00

35 lines
1.1 KiB
JavaScript

import { describe, expect, it, vi, afterEach } from 'vitest';
import { embedCardImage, formatEmbeddingForPg } from '../../lib/card-embed.js';
describe('formatEmbeddingForPg', () => {
it('formats vectors for pgvector literals', () => {
expect(formatEmbeddingForPg([0.1, 0.2, 0.3])).toBe('[0.10000000,0.20000000,0.30000000]');
});
});
describe('embedCardImage', () => {
afterEach(() => {
vi.unstubAllGlobals();
delete process.env.AI_GATEWAY_API_KEY;
});
it('throws when AI_GATEWAY_API_KEY is missing', async () => {
await expect(embedCardImage('data:image/jpeg;base64,abc')).rejects.toThrow(
'AI_GATEWAY_API_KEY is not configured'
);
});
it('returns embedding values from the gateway response', async () => {
process.env.AI_GATEWAY_API_KEY = 'test-key';
vi.stubGlobal(
'fetch',
vi.fn(async () => ({
ok: true,
json: async () => ({ data: [{ embedding: [0.5, 0.25] }] }),
}))
);
const embedding = await embedCardImage('data:image/jpeg;base64,abc');
expect(embedding).toEqual([0.5, 0.25]);
});
});