Files
memind/mindspace-chat-plaza.test.mjs
john e2ad3bf62b feat(mindspace): 公开页分享组件、workspace 路径与 Plaza 发布增强
- 新增 public share widget 与 workspace relative path 解析
- 增强 publications/chat-plaza 发布链路与缩略图 demo
- 补充 schema、cover 检查脚本与回归测试

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 23:14:41 +08:00

84 lines
2.9 KiB
JavaScript

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',
);
});