Changeset 7875a80 in Klonkt for test/messages.test.js


Ignore:
Timestamp:
08/06/2026 01:56:08 AM (5 weeks ago)
Author:
Claude (agent) <aiclaude@…>
Branches:
main
Children:
0448e34
Parents:
04aca12
git-author:
Robin <roboburr@…> (08/06/2026 01:55:53 AM)
git-committer:
Claude (agent) <aiclaude@…> (08/06/2026 01:56:08 AM)
Message:

Berichten toont gesprekken: Berichten, Gesprekken en Verzonden vouwen samen

Berichten had zes chips, waarvan drie over hetzelfde gesprek gingen. Een
uitwisseling viel daardoor uit elkaar: wat jij stuurde stond onder Verzonden,
wat je terugkreeg onder Berichten of Gesprekken, en om een draad te volgen moest
je tussen chips heen en weer. Dat waren geen aparte pagina's maar client-side
filters over een enkele lijst, dus het probleem zat in het model, niet in de
weergave.

Antwoorden, mentions en je eigen verzonden berichten vouwen nu samen tot draden.
De sleutel: hangt het bericht aan een post van jou, dan is dat de draad --
ontvangen antwoorden kennen hun post via de join op posts, verzonden antwoorden
via ap_outbox.post_slug, en dat is dezelfde sleutel. Hangt het aan niets van jou
(een mention), dan loopt de draad per tegenpartij. De post wint van de persoon:
twee mensen onder dezelfde post voeren een gesprek, geen twee.

De context hoort bij de draad. Gaat het gesprek over een post, dan staat de link
ernaartoe in de kop, want zonder die context is een los antwoord in een lijst
niet te plaatsen. Binnen de draad leest het van oud naar nieuw, en jouw eigen
bijdragen staan aan de andere kant van de lijn zodat je de beurten ziet zonder
namen te lezen.

Likes, boosts, follows, reports en poll-uitslagen blijven losse regels: dat is
geen gesprek. De chips gaan van zes naar vier: Alles, Gesprekken, Activiteit,
Moderatie.

Twee dingen die daarbij moesten:

  • listOutbox selecteert post_slug (stond in de tabel, werd niet gelezen).
  • De filter kijkt naar ':scope > .msg-item', want de bubbels in een draad zijn geen zelfstandige regels meer; zoeken indexeert een draad op zijn hele tekst in plaats van op de eerste bubbel.

De titel van de post blijft leeg zolang hij onbekend is in plaats van terug te
vallen op de slug: het nieuwste bericht in een draad is vaak je eigen antwoord,
en dat kent alleen de slug -- zou die de titel worden, dan kon het ontvangen
antwoord eronder de echte titel niet meer invullen.

Getest tegen dev.klonkt.com: de groepering en de template gedraaid op de echte
database daar, en op een kopie ervan met een nagebouwd gesprek (twee ontvangen
antwoorden, jouw antwoord ertussen, plus een like). Dat levert een draad van
drie berichten op volgorde met de post als context, terwijl de like een losse
regel blijft. Suite 408/408.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/messages.test.js

    r04aca12 r7875a80  
    22// in één stroom, groepeert opeenvolgende likes/boosts op dezelfde post, en geeft
    33// visibility door (voor de privé-badge). Besluit Robin+Bart 2026-07-16.
     4//
     5// Sinds Berichten gesprekken toont vouwen antwoorden, mentions en je eigen
     6// verzonden berichten samen tot draden (zie messages-conversations.test.js voor
     7// de groepeerlogica zelf); likes, boosts en follows blijven losse regels.
    48//
    59// Run: npm test   (= node --test)
     
    4246const msgs = AP.getMessages('me', 50);
    4347
    44 test('eigen outbound reply zit als "sent" in de stroom (nieuwste eerst)', () => {
    45   const sent = msgs.find((m) => m.type === 'sent');
     48test('eigen outbound reply en het ontvangen antwoord staan in EEN draad', () => {
     49  const thread = msgs.find((m) => m.type === 'thread');
     50  assert.ok(thread, 'draad ontbreekt');
     51  assert.equal(msgs[0], thread, 'de draad met het nieuwste bericht hoort bovenaan');
     52  const sent = thread.messages.find((m) => m.type === 'sent');
    4653  assert.ok(sent, 'sent-item ontbreekt');
    4754  assert.equal(sent.outboxId, 'out1');
    4855  assert.equal(sent.to_handle, '@dana@r.test');
    49   assert.equal(msgs[0].type, 'sent', 'nieuwste item hoort bovenaan');
     56  // Hier gaat het om: Dana's antwoord en het jouwe zaten in aparte chips
     57  // (Gesprekken en Verzonden) en staan nu op volgorde in dezelfde draad.
     58  assert.deepEqual(thread.messages.map((m) => m.type), ['reply', 'sent']);
     59  assert.equal(thread.post.slug, 'mijn-post');
    5060});
    5161
     
    5868
    5969test('privé-reply draagt visibility voor de badge en heeft post-context', () => {
    60   const reply = msgs.find((m) => m.type === 'reply');
     70  const thread = msgs.find((m) => m.type === 'thread');
     71  const reply = thread.messages.find((m) => m.type === 'reply');
    6172  assert.equal(reply.visibility, 'direct');
    6273  assert.equal(reply.post_slug, 'mijn-post');
    6374  assert.equal(reply.post_title, 'Mijn post');
     75  // De context hangt ook aan de draad zelf: die voedt de link in de kop.
     76  assert.deepEqual(thread.post, { slug: 'mijn-post', title: 'Mijn post' });
    6477});
    6578
Note: See TracChangeset for help on using the changeset viewer.