feat(mindspace): 公开页分享组件、workspace 路径与 Plaza 发布增强
- 新增 public share widget 与 workspace relative path 解析 - 增强 publications/chat-plaza 发布链路与缩略图 demo - 补充 schema、cover 检查脚本与回归测试 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -14,3 +14,70 @@ test('slugFromPageTitle falls back to page when title has no ascii', () => {
|
||||
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',
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user