feat: finalize mindspace service extraction phase a
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import path from 'node:path';
|
||||
import test from 'node:test';
|
||||
import {
|
||||
buildMindSpacePublicRoutePath,
|
||||
buildMindSpaceWorkspaceRef,
|
||||
buildMindSpacePublicUrlForUser,
|
||||
createMindSpaceLocalRuntime,
|
||||
resolveMindSpaceAgentWorkspaceCapability,
|
||||
resolveMindSpacePublishRoot,
|
||||
resolveMindSpaceRuntimeConfig,
|
||||
resolveMindSpaceServerRuntimeOptions,
|
||||
resolveMindSpaceStorageRoot,
|
||||
resolveMindSpaceUserPublishDir,
|
||||
} from './mindspace-runtime-config.mjs';
|
||||
|
||||
test('resolveMindSpaceStorageRoot uses env override when present', () => {
|
||||
const root = resolveMindSpaceStorageRoot('/tmp/h5', { MINDSPACE_STORAGE_ROOT: '/srv/mindspace-data' });
|
||||
assert.equal(root, path.resolve('/srv/mindspace-data'));
|
||||
});
|
||||
|
||||
test('resolveMindSpaceRuntimeConfig returns storage root and public base url', () => {
|
||||
const config = resolveMindSpaceRuntimeConfig('/tmp/h5', {
|
||||
MINDSPACE_STORAGE_ROOT: '/srv/mindspace-data',
|
||||
H5_PUBLIC_BASE_URL: 'https://example.com/',
|
||||
});
|
||||
assert.deepEqual(config, {
|
||||
storageRoot: path.resolve('/srv/mindspace-data'),
|
||||
publicBaseUrl: 'https://example.com',
|
||||
});
|
||||
});
|
||||
|
||||
test('resolveMindSpaceServerRuntimeOptions centralizes runtime roots, limits, and worker settings', () => {
|
||||
const config = resolveMindSpaceServerRuntimeOptions('/tmp/h5', {
|
||||
MINDSPACE_STORAGE_ROOT: '/srv/mindspace-data',
|
||||
H5_PUBLIC_BASE_URL: 'https://example.com/',
|
||||
MINDSPACE_SERVER_ADAPTER: 'remote',
|
||||
MINDSPACE_MAX_FILE_BYTES: '8192',
|
||||
MINDSPACE_FREE_AI_DAILY_LIMIT: '12',
|
||||
MINDSPACE_FREE_PUBLIC_PAGE_LIMIT: '8',
|
||||
MINDSPACE_FREE_MONTHLY_VIEW_LIMIT: '2048',
|
||||
MINDSPACE_EXPERIENCE_ENABLED: 'false',
|
||||
MINDSPACE_AGENT_WORKER_ENABLED: 'true',
|
||||
MINDSPACE_AGENT_WORKER_CONCURRENCY: '0',
|
||||
MINDSPACE_AGENT_WORKER_POLL_MS: '150',
|
||||
MINDSPACE_AGENT_WORKER_STALE_MS: '5000',
|
||||
MINDSPACE_AGENT_SSE_POLL_MS: '120',
|
||||
MINDSPACE_REMOTE_BASE_URL: 'https://mindspace.example.com/',
|
||||
MINDSPACE_REMOTE_AUTH_TOKEN: 'secret-token',
|
||||
MINDSPACE_REMOTE_OPERATION_BASE_PATH: '/internal/mindspace-adapter',
|
||||
MINDSPACE_REMOTE_TIMEOUT_MS: '500',
|
||||
});
|
||||
assert.deepEqual(config, {
|
||||
storageRoot: path.resolve('/srv/mindspace-data'),
|
||||
publicBaseUrl: 'https://example.com',
|
||||
adapterKind: 'remote',
|
||||
publishRoot: path.resolve('/tmp/h5/MindSpace'),
|
||||
maxFileBytes: 8192,
|
||||
aiDailyLimit: 12,
|
||||
publicPageLimit: 8,
|
||||
monthlyViewLimit: 2048,
|
||||
experienceEnabled: false,
|
||||
agentWorker: {
|
||||
enabled: true,
|
||||
concurrency: 1,
|
||||
pollMs: 200,
|
||||
staleMs: 10_000,
|
||||
ssePollMs: 500,
|
||||
},
|
||||
remote: {
|
||||
baseUrl: 'https://mindspace.example.com/',
|
||||
authToken: 'secret-token',
|
||||
operationBasePath: '/internal/mindspace-adapter',
|
||||
timeoutMs: 1000,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
test('runtime config resolves publish roots through a single helper', () => {
|
||||
assert.equal(resolveMindSpacePublishRoot('/tmp/h5'), path.resolve('/tmp/h5/MindSpace'));
|
||||
assert.equal(
|
||||
resolveMindSpaceUserPublishDir('/tmp/h5', { id: 'user-1' }),
|
||||
path.resolve('/tmp/h5/MindSpace/user-1'),
|
||||
);
|
||||
});
|
||||
|
||||
test('buildMindSpacePublicUrlForUser uses runtime public base url config', () => {
|
||||
assert.equal(
|
||||
buildMindSpacePublicUrlForUser({
|
||||
h5Root: '/tmp/h5',
|
||||
env: { H5_PUBLIC_BASE_URL: 'https://example.com/' },
|
||||
user: { id: 'user-1' },
|
||||
relativePath: 'public/report.html',
|
||||
}),
|
||||
'https://example.com/MindSpace/user-1/public/report.html',
|
||||
);
|
||||
});
|
||||
|
||||
test('buildMindSpacePublicRoutePath normalizes route assembly', () => {
|
||||
assert.equal(buildMindSpacePublicRoutePath('user-1'), '/MindSpace/user-1/');
|
||||
assert.equal(
|
||||
buildMindSpacePublicRoutePath('user-1', ['public', 'report 1.html']),
|
||||
'/MindSpace/user-1/public/report%201.html',
|
||||
);
|
||||
});
|
||||
|
||||
test('agent workspace capability keeps legacy sandbox root and adds future workspace ref', () => {
|
||||
const capability = resolveMindSpaceAgentWorkspaceCapability({
|
||||
h5Root: '/tmp/h5',
|
||||
env: { GOOSED_SANDBOX_PUBLISH_ROOT: '/srv/goosed-mindspace' },
|
||||
user: { id: 'user-1' },
|
||||
});
|
||||
assert.equal(capability.workspaceRoot, path.resolve('/tmp/h5/MindSpace/user-1'));
|
||||
assert.equal(capability.sandboxRoot, path.resolve('/srv/goosed-mindspace/user-1'));
|
||||
assert.equal(capability.workspaceRef, buildMindSpaceWorkspaceRef({ id: 'user-1' }));
|
||||
});
|
||||
|
||||
test('createMindSpaceLocalRuntime builds a local storage-backed facade', async () => {
|
||||
const runtime = createMindSpaceLocalRuntime({
|
||||
h5Root: '/tmp/h5',
|
||||
env: {
|
||||
MINDSPACE_STORAGE_ROOT: '/srv/mindspace-data',
|
||||
H5_PUBLIC_BASE_URL: 'https://example.com',
|
||||
},
|
||||
});
|
||||
assert.equal(runtime.storageRoot, path.resolve('/srv/mindspace-data'));
|
||||
assert.equal(runtime.publicBaseUrl, 'https://example.com');
|
||||
assert.equal(runtime.storageAdapter.kind, 'local-fs');
|
||||
assert.equal(
|
||||
runtime.serviceFacade.createPublicPageUrl({ ownerKey: 'user-1', filename: 'report.html' }),
|
||||
'https://example.com/MindSpace/user-1/public/report.html',
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user