Ersteller statt letztem Antwortendem lesen

Ein Antrag hing bei einem Spieler, der ihn weder geschrieben noch
kommentiert hatte. Die Ursache steht im HTML der Boarduebersicht: Der
Ersteller "-Daniel-" hat sein Konto geloescht und steht dort ohne
Profil-Link. Der einzige Profil-Link der Zeile gehoerte damit dem letzten
Antwortenden - und genau den nahm der Parser, weil er nach dem ersten Treffer
im ganzen Zeilenblock suchte.

Jetzt wird die Zeile vor der Spalte "letzter Beitrag" abgeschnitten und
zuerst in der Zelle gesucht, die den Ersteller fuehrt. Erst wenn dort kein
Link steht, gilt der blosse Text - so wie es bei einem geloeschten Konto der
Fall ist. Auf vier Stichprobenseiten des Archivs trifft das fuenf von achtzig
Threads; hochgerechnet liegen im Bestand also rund drei Dutzend falsch.

Die falschen Zuordnungen bleiben nicht stehen: Aendert sich der Ersteller
eines bekannten Threads, wird seine Zuordnung neu bestimmt - aber nur, wenn
die bisherige von selbst zustande kam. Wer von Hand zugeordnet hat, wusste
mehr als der Abgleich, das bleibt unangetastet. Die Abschlussmeldung nennt,
wie viele Threads dabei gewandert sind.
This commit is contained in:
2026-09-21 17:06:55 +02:00
parent fe89032c03
commit 2b78a972bc
8 changed files with 183 additions and 9 deletions
+12 -2
View File
@@ -13,13 +13,23 @@ describe('Board-Übersicht lesen', () => {
const threads = parseBoard(BOARD);
it('liest die Threads der Liste', () => {
assert.equal(threads.length, 6);
assert.equal(threads.length, 7);
assert.deepEqual(
threads.map((t) => t.threadId),
[7001, 7002, 7004, 7005, 7003, 7006],
[7001, 7002, 7004, 7005, 7003, 7006, 7007],
);
});
it('verwechselt den letzten Antwortenden nicht mit dem Ersteller', () => {
// Der Ersteller hat sein Konto geloescht und steht ohne Profillink da.
// Der letzte Antwortende hat eines - wer nach dem ersten Profillink in
// der Zeile greift, schreibt den Antrag dem Falschen zu.
const fremd = threads.find((t) => t.threadId === 7007);
assert.equal(fremd?.authorName, '-Verschwunden-');
assert.equal(fremd?.authorForumId, null, 'er hat kein Konto mehr');
assert.equal(fremd?.authorProfileUrl, null);
});
it('liest das Datum des Antrags, nicht das der letzten Antwort', () => {
const erster = threads.find((t) => t.threadId === 7001);
assert.equal(erster?.postedAt?.toISOString(), '2025-03-04T18:22:05.000Z');