Merge Memory V2 runtime facade
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import {
|
||||
buildPgvectorSmokeRows,
|
||||
runPgvectorMemorySmoke,
|
||||
} from './memory-v2-pgvector-smoke.mjs';
|
||||
|
||||
test('buildPgvectorSmokeRows creates deterministic retrieval fixture', () => {
|
||||
const fixture = buildPgvectorSmokeRows({ dimensions: 4 });
|
||||
|
||||
assert.equal(fixture.userId, 'memory-v2-smoke-user');
|
||||
assert.deepEqual(fixture.query, [1, 0, 0, 0]);
|
||||
assert.equal(fixture.rows.length, 2);
|
||||
assert.equal(fixture.rows[0].content, fixture.expectedTopText);
|
||||
assert.deepEqual(fixture.rows[1].embedding, [0, 0, 0, 1]);
|
||||
});
|
||||
|
||||
test('runPgvectorMemorySmoke inserts fixture, resolves nearest memory, and cleans up', async () => {
|
||||
const calls = [];
|
||||
const pool = {
|
||||
async query(sql, params = []) {
|
||||
calls.push({ sql, params });
|
||||
if (/SELECT id, content, type, created_at/.test(sql)) {
|
||||
return {
|
||||
rows: [
|
||||
{
|
||||
id: 10,
|
||||
content: 'memory-v2 smoke near vector',
|
||||
type: 'smoke',
|
||||
score: 1,
|
||||
created_at: '2026-07-03T00:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
content: 'memory-v2 smoke far vector',
|
||||
type: 'smoke',
|
||||
score: 0,
|
||||
created_at: '2026-07-03T00:00:00.000Z',
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
return { rows: [] };
|
||||
},
|
||||
};
|
||||
|
||||
const result = await runPgvectorMemorySmoke({
|
||||
pool,
|
||||
tableName: 'memory_embeddings',
|
||||
dimensions: 3,
|
||||
});
|
||||
|
||||
assert.equal(result.ok, true);
|
||||
assert.equal(result.inserted, 2);
|
||||
assert.equal(result.topMemory.text, 'memory-v2 smoke near vector');
|
||||
assert.equal(calls.filter((call) => /INSERT INTO/.test(call.sql)).length, 2);
|
||||
assert.equal(calls.some((call) => /DELETE FROM/.test(call.sql)), true);
|
||||
});
|
||||
|
||||
test('runPgvectorMemorySmoke can ensure schema before smoke', async () => {
|
||||
const calls = [];
|
||||
const pool = {
|
||||
async query(sql, params = []) {
|
||||
calls.push({ sql, params });
|
||||
if (/SELECT id, content, type, created_at/.test(sql)) {
|
||||
return {
|
||||
rows: [{
|
||||
id: 1,
|
||||
content: 'memory-v2 smoke near vector',
|
||||
type: 'smoke',
|
||||
}],
|
||||
};
|
||||
}
|
||||
return { rows: [] };
|
||||
},
|
||||
};
|
||||
|
||||
const result = await runPgvectorMemorySmoke({
|
||||
pool,
|
||||
tableName: 'memory_embeddings',
|
||||
dimensions: 3,
|
||||
createSchema: true,
|
||||
createExtension: true,
|
||||
});
|
||||
|
||||
assert.equal(result.ok, true);
|
||||
assert.match(calls[0].sql, /CREATE EXTENSION IF NOT EXISTS vector/);
|
||||
assert.equal(calls.some((call) => /CREATE TABLE IF NOT EXISTS/.test(call.sql)), true);
|
||||
});
|
||||
|
||||
test('runPgvectorMemorySmoke validates identifiers and dimensions', async () => {
|
||||
await assert.rejects(
|
||||
() => runPgvectorMemorySmoke({
|
||||
pool: { async query() {} },
|
||||
tableName: 'memory_embeddings;DROP',
|
||||
}),
|
||||
/Invalid PostgreSQL identifier/,
|
||||
);
|
||||
await assert.rejects(
|
||||
() => runPgvectorMemorySmoke({
|
||||
pool: { async query() {} },
|
||||
dimensions: 0,
|
||||
}),
|
||||
/Invalid pgvector smoke dimensions/,
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user