import test from 'node:test'; import assert from 'node:assert/strict'; import { slugFromPageTitle } from './mindspace-chat-plaza.mjs'; import { MINDSPACE_SERVER_ADAPTER_BINDINGS } from './mindspace-server-adapter-contract.mjs'; test('adapter contract exposes findPageBySourceMessage for quick plaza', () => { assert.ok(MINDSPACE_SERVER_ADAPTER_BINDINGS.pageService.includes('findPageBySourceMessage')); }); test('slugFromPageTitle falls back to page when title has no ascii', () => { assert.equal(slugFromPageTitle('春江花月夜', '1c99b83b-0454-474f-a5d2-129d34506a32'), 'page-1c99b83b'); }); test('slugFromPageTitle keeps ascii slug and page suffix', () => { assert.equal(slugFromPageTitle('Travel Guide 2026', 'abcd-1234-5678-9012'), 'travel-guide-2026-abcd1234'); }); test('quickPlazaFromPublicHtml rejects non-public html paths', async () => { await assert.rejects( () => import('./mindspace-chat-plaza.mjs').then(({ quickPlazaFromPublicHtml }) => quickPlazaFromPublicHtml({ user: { id: 'user-1' }, relativePath: 'pages/demo.html', mindSpacePages: {}, mindSpacePublications: {}, plazaPosts: {}, publishDir: '/tmp/publish', }), ), (error) => error?.code === 'invalid_public_html_path', ); }); test('getQuickPlazaFromPublicHtmlStatus reports published plaza posts', async () => { const { getQuickPlazaFromPublicHtmlStatus } = await import('./mindspace-chat-plaza.mjs'); const result = await getQuickPlazaFromPublicHtmlStatus({ user: { id: 'user-1' }, relativePath: 'public/demo.html', mindSpacePages: { async findPlazaContextByWorkspacePath(userId, relativePath) { assert.equal(userId, 'user-1'); assert.equal(relativePath, 'public/demo.html'); return { pageId: 'page-1', publicationId: 'pub-1', postId: 'post-1', postStatus: 'published', }; }, }, mindSpacePublications: {}, plazaPosts: {}, }); assert.equal(result.published, true); assert.equal(result.post.id, 'post-1'); }); test('quickPlazaFromPublicHtml blocks duplicate plaza posts for the same workspace html', async () => { const { quickPlazaFromPublicHtml } = await import('./mindspace-chat-plaza.mjs'); await assert.rejects( () => quickPlazaFromPublicHtml({ user: { id: 'user-1' }, relativePath: 'public/demo.html', mindSpacePages: { async findPlazaContextByWorkspacePath() { return { pageId: 'page-chat', publicationId: 'pub-chat', postId: 'post-chat', postStatus: 'published', }; }, }, mindSpacePublications: {}, plazaPosts: {}, publishDir: '/tmp/publish', }), (error) => error?.code === 'ALREADY_PUBLISHED' && error?.details?.post_id === 'post-chat', ); });