From f0d4b6d5666ab8940c6cac440a1ab054889f424d Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 12 Jun 2026 08:09:35 +0000 Subject: [PATCH] fix: nbsp-Dekodierung + Malformed-Input-Test im Truth-Parser (Review Task 5) Co-Authored-By: Claude Fable 5 --- src/server/signals/truth.test.ts | 8 ++++++++ src/server/signals/truth.ts | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/server/signals/truth.test.ts b/src/server/signals/truth.test.ts index 8087b7d..4c1c514 100644 --- a/src/server/signals/truth.test.ts +++ b/src/server/signals/truth.test.ts @@ -15,6 +15,14 @@ describe('parseTruthFeed', () => { expect(posts[0].text).toContain('Bitcoin is going to the MOON'); expect(posts[0].text).not.toContain('

'); }); + test('überspringt malformed Items, leerer Input → []', () => { + expect(parseTruthFeed('')).toEqual([]); + const bad = ` +Fri, 12 Jun 2026 01:49:56 +0000ohne Link +https://trumpstruth.org/statuses/3kein Datumx +`; + expect(parseTruthFeed(bad)).toEqual([]); + }); }); describe('matchCoins', () => { diff --git a/src/server/signals/truth.ts b/src/server/signals/truth.ts index a4f6bf8..48793cf 100644 --- a/src/server/signals/truth.ts +++ b/src/server/signals/truth.ts @@ -21,7 +21,7 @@ export function parseTruthFeed(xml: string): TruthPost[] { const text = descRaw .replace(/^$/g, '') .replace(/<[^>]+>/g, ' ') - .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, "'") + .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, "'").replace(/ /g, ' ') .replace(/\s+/g, ' ') .trim(); posts.push({ url, ts, text });