test(embeddings): fix 6 remaining test failures
- Fix schema.test.ts: use Unix timestamp integers instead of Date objects for snippet_embeddings.createdAt - Fix embedding.service.test.ts: use 'local-default' profile instead of non-existent 'test-profile', remove require() calls and use proper ESM imports - Fix hybrid.search.service.test.ts: update VectorSearch.vectorSearch() calls to use options object instead of positional parameters, remove manual FTS insert (triggers handle it automatically) - Fix migration 0002: improve SQL formatting with line breaks after statement-breakpoint comments All 459 tests now passing (18 skipped).
This commit is contained in:
@@ -22,6 +22,7 @@ import {
|
||||
EMBEDDING_CONFIG_KEY,
|
||||
type EmbeddingConfig
|
||||
} from './factory.js';
|
||||
import { createProviderFromProfile } from './registry.js';
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Test DB helpers
|
||||
@@ -280,7 +281,6 @@ describe('Migration — embedding_profiles', () => {
|
||||
|
||||
describe('Provider Registry', () => {
|
||||
it('creates LocalEmbeddingProvider for local-transformers', () => {
|
||||
const { createProviderFromProfile } = require('./registry.js');
|
||||
const profile: schema.EmbeddingProfile = {
|
||||
id: 'test-local',
|
||||
providerKind: 'local-transformers',
|
||||
@@ -300,7 +300,6 @@ describe('Provider Registry', () => {
|
||||
});
|
||||
|
||||
it('creates OpenAIEmbeddingProvider for openai-compatible', () => {
|
||||
const { createProviderFromProfile } = require('./registry.js');
|
||||
const profile: schema.EmbeddingProfile = {
|
||||
id: 'test-openai',
|
||||
providerKind: 'openai-compatible',
|
||||
@@ -323,7 +322,6 @@ describe('Provider Registry', () => {
|
||||
});
|
||||
|
||||
it('returns NoopEmbeddingProvider for unknown providerKind', () => {
|
||||
const { createProviderFromProfile } = require('./registry.js');
|
||||
const profile: schema.EmbeddingProfile = {
|
||||
id: 'test-unknown',
|
||||
providerKind: 'unknown-provider',
|
||||
@@ -374,30 +372,30 @@ describe('EmbeddingService', () => {
|
||||
it('stores embeddings in snippet_embeddings table', async () => {
|
||||
const snippetId = seedSnippet(db, client);
|
||||
const provider = makeProvider(4);
|
||||
const service = new EmbeddingService(client, provider, 'test-profile');
|
||||
const service = new EmbeddingService(client, provider, 'local-default');
|
||||
|
||||
await service.embedSnippets([snippetId]);
|
||||
|
||||
const rows = client
|
||||
.prepare('SELECT * FROM snippet_embeddings WHERE snippet_id = ? AND profile_id = ?')
|
||||
.all(snippetId, 'test-profile');
|
||||
.all(snippetId, 'local-default');
|
||||
expect(rows).toHaveLength(1);
|
||||
|
||||
const row = rows[0] as { model: string; dimensions: number; embedding: Buffer; profile_id: string };
|
||||
expect(row.model).toBe('test-model');
|
||||
expect(row.dimensions).toBe(4);
|
||||
expect(row.profile_id).toBe('test-profile');
|
||||
expect(row.profile_id).toBe('local-default');
|
||||
expect(row.embedding).toBeInstanceOf(Buffer);
|
||||
});
|
||||
|
||||
it('stores embeddings as retrievable Float32Array blobs', async () => {
|
||||
const snippetId = seedSnippet(db, client);
|
||||
const provider = makeProvider(3);
|
||||
const service = new EmbeddingService(client, provider, 'test-profile');
|
||||
const service = new EmbeddingService(client, provider, 'local-default');
|
||||
|
||||
await service.embedSnippets([snippetId]);
|
||||
|
||||
const embedding = service.getEmbedding(snippetId, 'test-profile');
|
||||
const embedding = service.getEmbedding(snippetId, 'local-default');
|
||||
expect(embedding).toBeInstanceOf(Float32Array);
|
||||
expect(embedding).toHaveLength(3);
|
||||
expect(embedding![0]).toBeCloseTo(0.0, 5);
|
||||
@@ -405,16 +403,6 @@ describe('EmbeddingService', () => {
|
||||
expect(embedding![2]).toBeCloseTo(0.2, 5);
|
||||
});
|
||||
|
||||
await service.embedSnippets([snippetId]);
|
||||
|
||||
const retrieved = service.getEmbedding(snippetId);
|
||||
expect(retrieved).toBeInstanceOf(Float32Array);
|
||||
expect(retrieved!.length).toBe(3);
|
||||
expect(retrieved![0]).toBeCloseTo(0.0, 5);
|
||||
expect(retrieved![1]).toBeCloseTo(0.1, 5);
|
||||
expect(retrieved![2]).toBeCloseTo(0.2, 5);
|
||||
});
|
||||
|
||||
it('is idempotent — re-embedding replaces the existing row', async () => {
|
||||
const snippetId = seedSnippet(db, client);
|
||||
const provider = makeProvider(2);
|
||||
|
||||
Reference in New Issue
Block a user