import { describe, expect, it } from
"vitest" ;
import { parsePostContent } from
"./post.js" ;
describe(
"parsePostContent" , () => {
it(
"renders title and styled text as markdown" , () => {
const content = JSON.stringify({
title:
"Daily *Plan*" ,
content: [
[
{ tag:
"text" , text:
"Bold" , style: { bold:
true } },
{ tag:
"text" , text:
" " },
{ tag:
"text" , text:
"Italic" , style: { italic:
true } },
{ tag:
"text" , text:
" " },
{ tag:
"text" , text:
"Underline" , style: { underline:
true } },
{ tag:
"text" , text:
" " },
{ tag:
"text" , text:
"Strike" , style: { strikethrough:
true } },
{ tag:
"text" , text:
" " },
{ tag:
"text" , text:
"Code" , style: { code:
true , bold:
true } },
],
],
});
const result = parsePostContent(content);
expect(result.textContent).toBe(
"Daily \\*Plan\\*\n\n**Bold** *Italic* <u>Underline</u> ~~Strike~~ `Code`" ,
);
expect(result.imageKeys).toEqual([]);
expect(result.mentionedOpenIds).toEqual([]);
});
it(
"renders links and mentions" , () => {
const content = JSON.stringify({
title:
"" ,
content: [
[
{ tag:
"a" , text:
"Docs [v2]" , href:
"https://example.com/guide(a) " },
{ tag:
"text" , text:
" " },
{ tag:
"at" , user_name:
"alice_bob" },
{ tag:
"text" , text:
" " },
{ tag:
"at" , open_id:
"ou_123" },
{ tag:
"text" , text:
" " },
{ tag:
"a" , href:
"https://example.com/no-text " },
],
],
});
const result = parsePostContent(content);
expect(result.textContent).toBe(
"[Docs \\[v2\\]](https://example.com/guide(a)) @alice\\_bob @ou\\_123 [https://example.com/no\\-text](https://example.com/no-text)",
);
expect(result.mentionedOpenIds).toEqual([
"ou_123" ]);
});
it(
"inserts image placeholders and collects image keys" , () => {
const content = JSON.stringify({
title:
"" ,
content: [
[
{ tag:
"text" , text:
"Before " },
{ tag:
"img" , image_key:
"img_1" },
{ tag:
"text" , text:
" after" },
],
[{ tag:
"img" , image_key:
"img_2" }],
],
});
const result = parsePostContent(content);
expect(result.textContent).toBe(
"Before ![image] after\n![image]" );
expect(result.imageKeys).toEqual([
"img_1" ,
"img_2" ]);
expect(result.mentionedOpenIds).toEqual([]);
});
it(
"supports locale wrappers" , () => {
const wrappedByPost = JSON.stringify({
post: {
zh_cn: {
title:
"标题" ,
content: [[{ tag:
"text" , text:
"内容A" }]],
},
},
});
const wrappedByLocale = JSON.stringify({
zh_cn: {
title:
"标题" ,
content: [[{ tag:
"text" , text:
"内容B" }]],
},
});
expect(parsePostContent(wrappedByPost)).toEqual({
textContent:
"标题\n\n内容A" ,
imageKeys: [],
mediaKeys: [],
mentionedOpenIds: [],
});
expect(parsePostContent(wrappedByLocale)).toEqual({
textContent:
"标题\n\n内容B" ,
imageKeys: [],
mediaKeys: [],
mentionedOpenIds: [],
});
});
});
Messung V0.5 in Prozent C=95 H=98 G=96
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-05)
¤
*© Formatika GbR, Deutschland