Files
memind/mindspace-server-adapter.test.mjs
T
2026-07-12 08:12:15 +08:00

61 lines
2.1 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
assertMindSpaceServerAdapterContract,
createMindSpaceServerAdapter,
resolveMindSpaceServerAdapterKind,
} from './mindspace-server-adapter.mjs';
test('resolveMindSpaceServerAdapterKind defaults to local and rejects unknown kinds', () => {
assert.equal(resolveMindSpaceServerAdapterKind({}), 'local');
assert.equal(resolveMindSpaceServerAdapterKind({ MINDSPACE_SERVER_ADAPTER: 'REMOTE' }), 'remote');
assert.throws(
() => resolveMindSpaceServerAdapterKind({ MINDSPACE_SERVER_ADAPTER: 'legacy' }),
/Unsupported MINDSPACE_SERVER_ADAPTER/,
);
});
test('createMindSpaceServerAdapter returns a contract-complete local adapter by default', () => {
const adapter = createMindSpaceServerAdapter({
pool: {
query: async () => {
throw new Error('not implemented in unit test');
},
},
h5Root: '/tmp/h5',
env: {
MINDSPACE_STORAGE_ROOT: '/srv/mindspace-data',
H5_PUBLIC_BASE_URL: 'https://example.com',
},
maxFileBytes: 4096,
publicPageLimit: 3,
resolveUserIdForAgentSession: async () => 'user-1',
resolveWorkspaceRoot: async () => '/tmp/workspace',
logger: { log() {}, warn() {}, error() {} },
});
assert.equal(adapter.kind, 'local');
assert.equal(adapter.implementationStatus, 'ready');
assert.equal(assertMindSpaceServerAdapterContract(adapter), adapter);
});
test('createMindSpaceServerAdapter exposes a remote stub that fails fast when selected', () => {
const adapter = createMindSpaceServerAdapter({
env: {
MINDSPACE_SERVER_ADAPTER: 'remote',
MINDSPACE_REMOTE_BASE_URL: 'https://mindspace.example.com',
},
logger: { log() {}, warn() {}, error() {} },
});
assert.equal(adapter.kind, 'remote');
assert.equal(adapter.implementationStatus, 'scaffold');
assert.equal(assertMindSpaceServerAdapterContract(adapter), adapter);
assert.equal(adapter.assertReady(), true);
assert.deepEqual(adapter.startBackgroundJobs(), {
publicationCleanup: null,
agentWorker: null,
workspaceMaintenance: null,
});
});