Files
memind/scripts/smoke-memory-v2-qdrant.test.mjs
T
2026-07-03 09:46:03 +08:00

95 lines
2.3 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
parseMemoryQdrantSmokeArgs,
runMemoryQdrantSmokeCli,
} from './smoke-memory-v2-qdrant.mjs';
function writableBuffer() {
let value = '';
return {
write(chunk) {
value += String(chunk);
},
value() {
return value;
},
};
}
test('parseMemoryQdrantSmokeArgs defaults to read-only smoke settings', () => {
assert.deepEqual(parseMemoryQdrantSmokeArgs([], {}), {
collection: 'memind_memory',
vector: [1, 0, 0],
limit: 1,
urlEnv: 'MEMORY_QDRANT_URL',
apiKeyEnv: 'MEMORY_QDRANT_API_KEY',
timeoutMs: 3000,
help: false,
});
});
test('parseMemoryQdrantSmokeArgs maps options', () => {
assert.deepEqual(
parseMemoryQdrantSmokeArgs([
'--collection',
'memind_memory_canary',
'--vector',
'0.1,0.2,0.3',
'--limit',
'3',
'--url-env',
'QDRANT_URL',
'--api-key-env',
'QDRANT_KEY',
'--timeout-ms',
'500',
], {}),
{
collection: 'memind_memory_canary',
vector: [0.1, 0.2, 0.3],
limit: 3,
urlEnv: 'QDRANT_URL',
apiKeyEnv: 'QDRANT_KEY',
timeoutMs: 500,
help: false,
},
);
});
test('runMemoryQdrantSmokeCli requires explicit Qdrant URL', async () => {
await assert.rejects(
() => runMemoryQdrantSmokeCli({ env: {}, stdout: writableBuffer() }),
/MEMORY_QDRANT_URL/,
);
});
test('runMemoryQdrantSmokeCli performs read-only search', async () => {
const stdout = writableBuffer();
const calls = [];
const report = await runMemoryQdrantSmokeCli({
argv: ['--collection', 'memind_memory', '--vector', '1,0,0', '--limit', '2'],
env: {
MEMORY_QDRANT_URL: 'http://127.0.0.1:6333',
MEMORY_QDRANT_API_KEY: 'secret',
},
stdout,
async fetchImpl(url, options) {
calls.push({ url, options });
return {
ok: true,
async json() {
return { result: [{ id: 'p1' }, { id: 'p2' }] };
},
};
},
});
const output = JSON.parse(stdout.value());
assert.equal(report.ok, true);
assert.equal(output.readOnly, true);
assert.equal(output.resultCount, 2);
assert.equal(calls.length, 1);
assert.equal(JSON.parse(calls[0].options.body).with_payload, true);
});