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 { createMindSpaceServiceFacade } from './mindspace-service.mjs'; import { createLocalMindSpaceStorageAdapter } from './mindspace-storage-adapter.mjs'; test('createMindSpaceServiceFacade requires a storage adapter', () => { assert.throws( () => createMindSpaceServiceFacade({ publicBaseUrl: 'https://m.tkmind.cn' }), (error) => error.code === 'missing_mindspace_storage_adapter', ); }); test('MindSpace service facade coordinates package storage and public URLs without raw paths', async () => { const root = await fs.mkdtemp(path.join(os.tmpdir(), 'mindspace-service-')); const service = createMindSpaceServiceFacade({ storageAdapter: createLocalMindSpaceStorageAdapter(root), publicBaseUrl: 'https://m.tkmind.cn', }); const packageRecord = service.createConversationPackage({ id: 'cp_session-1', userId: 'user-1', sessionId: 'session-1', title: '项目周报', now: 1000, }); assert.equal(packageRecord.storagePrefix, 'users/user-1/conversations/session-1'); assert.equal( service.resolvePackageStorageKey({ packageRecord, relativePath: 'public/report.html' }), 'users/user-1/conversations/session-1/public/report.html', ); const writeResult = await service.putPackageObject({ packageRecord, relativePath: 'public/report.html', body: '

Report

', }); assert.equal(writeResult.key, 'users/user-1/conversations/session-1/public/report.html'); const body = await service.getPackageObject({ packageRecord, relativePath: 'public/report.html' }); assert.equal(body.toString('utf8'), '

Report

'); assert.deepEqual( (await service.listPackageObjects({ packageRecord })).map((item) => item.key), ['users/user-1/conversations/session-1/public/report.html'], ); assert.equal( service.createPublicPageUrl({ ownerKey: 'user-1', filename: 'report.html' }), 'https://m.tkmind.cn/MindSpace/user-1/public/report.html', ); }); test('MindSpace service facade builds manifests from package artifacts', async () => { const root = await fs.mkdtemp(path.join(os.tmpdir(), 'mindspace-service-')); const service = createMindSpaceServiceFacade({ storageAdapter: createLocalMindSpaceStorageAdapter(root), publicBaseUrl: 'https://m.tkmind.cn', }); const packageRecord = service.createConversationPackage({ id: 'cp_session-1', userId: 'user-1', sessionId: 'session-1', now: 1000, }); const artifact = service.createConversationArtifact({ id: 'ca_1', packageId: packageRecord.id, artifactKind: 'public_html', displayName: 'report.html', storageKey: 'users/user-1/conversations/session-1/public/report.html', canonicalUrl: service.createPublicPageUrl({ ownerKey: 'user-1', filename: 'report.html' }), now: 2000, }); const manifest = service.buildConversationManifest({ packageRecord, artifacts: [artifact], }); assert.equal(manifest.packageId, 'cp_session-1'); assert.equal(manifest.artifacts[0].kind, 'public_html'); assert.equal( manifest.artifacts[0].canonicalUrl, 'https://m.tkmind.cn/MindSpace/user-1/public/report.html', ); });