83 lines
2.8 KiB
JavaScript
83 lines
2.8 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 {
|
|
createConversationPackagePublicHtmlHydrator,
|
|
registerPublicHtmlArtifactsForConversationPackage,
|
|
} from './mindspace-conversation-package-public-html.mjs';
|
|
|
|
test('registerPublicHtmlArtifactsForConversationPackage records existing public html files', async () => {
|
|
const h5Root = await fs.mkdtemp(path.join(os.tmpdir(), 'mindspace-public-html-helper-'));
|
|
const publishDir = path.join(h5Root, 'MindSpace', 'user-1');
|
|
await fs.mkdir(path.join(publishDir, 'public'), { recursive: true });
|
|
await fs.writeFile(path.join(publishDir, 'public', 'landing.html'), '<html>ok</html>', 'utf8');
|
|
|
|
const recorded = [];
|
|
const registry = {
|
|
async readManifestForSession() {
|
|
return null;
|
|
},
|
|
async ensurePackage() {
|
|
return { id: 'pkg-1' };
|
|
},
|
|
async recordArtifact(payload) {
|
|
recorded.push(payload);
|
|
},
|
|
async writeManifestForSession() {
|
|
return { ok: true };
|
|
},
|
|
};
|
|
|
|
const result = await registerPublicHtmlArtifactsForConversationPackage({
|
|
conversationPackageRegistry: registry,
|
|
h5Root,
|
|
env: { H5_PUBLIC_BASE_URL: 'https://example.com' },
|
|
user: { id: 'user-1' },
|
|
publishDir,
|
|
sessionId: 'session-1',
|
|
relativePaths: ['public/landing.html'],
|
|
});
|
|
|
|
assert.equal(result.length, 1);
|
|
assert.equal(recorded.length, 1);
|
|
assert.equal(recorded[0].packageId, 'pkg-1');
|
|
assert.equal(recorded[0].canonicalUrl, 'https://example.com/MindSpace/user-1/public/landing.html');
|
|
});
|
|
|
|
test('createConversationPackagePublicHtmlHydrator resolves snapshot artifacts through shared registration helper', async () => {
|
|
const h5Root = await fs.mkdtemp(path.join(os.tmpdir(), 'mindspace-public-html-hydrator-'));
|
|
const publishDir = path.join(h5Root, 'MindSpace', 'user-1');
|
|
await fs.mkdir(path.join(publishDir, 'public'), { recursive: true });
|
|
await fs.writeFile(path.join(publishDir, 'public', 'landing.html'), '<html>ok</html>', 'utf8');
|
|
|
|
const calls = [];
|
|
const hydrator = createConversationPackagePublicHtmlHydrator({
|
|
h5Root,
|
|
resolveSessionSnapshot: async () => ({
|
|
session: { name: 'Chat publish' },
|
|
messages: [
|
|
{
|
|
role: 'assistant',
|
|
content: [{ type: 'text', text: 'See public/landing.html' }],
|
|
},
|
|
],
|
|
}),
|
|
registerPublicHtmlArtifactsForConversation: async (payload) => {
|
|
calls.push(payload);
|
|
return payload.artifactRefs;
|
|
},
|
|
});
|
|
|
|
const result = await hydrator({
|
|
user: { id: 'user-1' },
|
|
sessionId: 'session-1',
|
|
});
|
|
|
|
assert.equal(result.length, 1);
|
|
assert.equal(calls.length, 1);
|
|
assert.equal(calls[0].publishDir, publishDir);
|
|
assert.equal(calls[0].artifactRefs[0].relativePath, 'public/landing.html');
|
|
});
|