98 lines
2.3 KiB
JavaScript
98 lines
2.3 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import fs from 'node:fs/promises';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
import test from 'node:test';
|
|
import {
|
|
parseMemoryV2ScaffoldArgs,
|
|
runMemoryV2ScaffoldCli,
|
|
} from './scaffold-memory-v2-backend.mjs';
|
|
|
|
function writableBuffer() {
|
|
let value = '';
|
|
return {
|
|
write(chunk) {
|
|
value += String(chunk);
|
|
},
|
|
value() {
|
|
return value;
|
|
},
|
|
};
|
|
}
|
|
|
|
test('parseMemoryV2ScaffoldArgs parses scaffold options', () => {
|
|
assert.deepEqual(
|
|
parseMemoryV2ScaffoldArgs([
|
|
'--name',
|
|
'qdrant',
|
|
'--category',
|
|
'semantic',
|
|
'--role',
|
|
'scale-out',
|
|
'--capability',
|
|
'resolve',
|
|
'--flag',
|
|
'MEMORY_QDRANT_ENABLED',
|
|
'--out',
|
|
'memory-v2-qdrant.mjs',
|
|
'--write',
|
|
]),
|
|
{
|
|
name: 'qdrant',
|
|
category: 'semantic',
|
|
role: 'scale-out',
|
|
capabilities: ['resolve'],
|
|
flag: 'MEMORY_QDRANT_ENABLED',
|
|
out: 'memory-v2-qdrant.mjs',
|
|
write: true,
|
|
help: false,
|
|
},
|
|
);
|
|
});
|
|
|
|
test('runMemoryV2ScaffoldCli dry-run prints adapter source', async () => {
|
|
const stdout = writableBuffer();
|
|
const result = await runMemoryV2ScaffoldCli({
|
|
argv: [
|
|
'--name',
|
|
'qdrant',
|
|
'--category',
|
|
'semantic',
|
|
'--capability',
|
|
'resolve',
|
|
],
|
|
stdout,
|
|
});
|
|
|
|
assert.equal(result.mode, 'dry-run');
|
|
assert.match(stdout.value(), /export function createQdrantMemoryBackend/);
|
|
assert.match(stdout.value(), /name: 'qdrant'/);
|
|
});
|
|
|
|
test('runMemoryV2ScaffoldCli writes new adapter and refuses overwrite', async () => {
|
|
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'memory-v2-scaffold-'));
|
|
const stdout = writableBuffer();
|
|
const argv = [
|
|
'--name',
|
|
'mem0',
|
|
'--category',
|
|
'extraction',
|
|
'--capability',
|
|
'write',
|
|
'--capability',
|
|
'compact',
|
|
'--write',
|
|
];
|
|
|
|
const result = await runMemoryV2ScaffoldCli({ argv, stdout, cwd: tmpDir });
|
|
const written = await fs.readFile(path.join(tmpDir, 'memory-v2-mem0.mjs'), 'utf8');
|
|
|
|
assert.equal(result.mode, 'write');
|
|
assert.match(stdout.value(), /Memory V2 backend scaffold created/);
|
|
assert.match(written, /export function createMem0MemoryBackend/);
|
|
await assert.rejects(
|
|
() => runMemoryV2ScaffoldCli({ argv, stdout: writableBuffer(), cwd: tmpDir }),
|
|
/Refusing to overwrite/,
|
|
);
|
|
});
|