import { describe, expect, it } from
"vitest" ;
import { extractTextFromChatContent } from
"./chat-content.js" ;
describe(
"shared/chat-content" , () => {
it(
"normalizes plain string content" , () => {
expect(extractTextFromChatContent(
" hello\nworld " )).toBe(
"hello world" );
});
it(
"extracts only text blocks from array content" , () => {
expect(
extractTextFromChatContent([
{ type:
"text" , text:
" hello " },
{ type:
"image_url" , image_url:
"https://example.com " },
{ type:
"text" , text:
"world" },
{ text:
"ignored without type" },
null ,
]),
).toBe(
"hello world" );
});
it(
"applies sanitizers and custom join/normalization hooks" , () => {
expect(
extractTextFromChatContent(
"Here [Tool Call: foo (ID: 1)] ok" , {
sanitizeText: (text) => text.replace(/\[Tool Call:[^\]]+\]\s*/g,
"" ),
}),
).toBe(
"Here ok" );
expect(
extractTextFromChatContent(
[
{ type:
"text" , text:
" hello " },
{ type:
"text" , text:
"world " },
],
{
sanitizeText: (text) => text.trim(),
joinWith:
"\n" ,
normalizeText: (text) => text.trim(),
},
),
).toBe(
"hello\nworld" );
expect(
extractTextFromChatContent(
[
{ type:
"text" , text:
"keep" },
{ type:
"text" , text:
"drop" },
],
{
sanitizeText: (text) => (text ===
"drop" ?
" " : text),
},
),
).toBe(
"keep" );
});
it(
"returns null for unsupported or empty content" , () => {
expect(extractTextFromChatContent(
123 )).toBeNull();
expect(extractTextFromChatContent([{ type:
"text" , text:
" " }])).toBeNull();
expect(
extractTextFromChatContent(
" " , {
sanitizeText: () =>
"" ,
}),
).toBeNull();
});
it(
"tolerates sanitize and normalize hooks that return non-string values" , () => {
expect(
extractTextFromChatContent(
"hello" , {
sanitizeText: () => undefined as unknown as string,
}),
).toBeNull();
expect(
extractTextFromChatContent([{ type:
"text" , text:
"hello" }], {
sanitizeText: () =>
42 as unknown as string,
}),
).toBe(
"42" );
expect(
extractTextFromChatContent(
"hello" , {
normalizeText: () => undefined as unknown as string,
}),
).toBeNull();
});
});
Messung V0.5 in Prozent C=99 H=100 G=99
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland