Changeset 3bbf73d in Klonkt for test/conversations.test.js


Ignore:
Timestamp:
08/10/2026 02:43:16 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
f0a33e1
Parents:
f549cf5
Message:

Alleen namen: het Nederlands van vandaag terug naar Engels

shaer-8ms zegt het al: Engelse namen, Nederlands commentaar waar dat helpt. Ik
ben er vandaag opnieuw van afgedreven en zet dat recht voordat er meer bovenop
komt -- gatesFor, messageItem, sentItem, conversationItems, ownHandle,
CONVERSATION_UNION, MESSAGE_COLUMNS, cursorOf, en de locals eromheen
(rows/more/oldest/direction/incoming/heads/self/size).

Geen gedrag, alleen namen, en daarom een eigen commit: die is na te lopen.
851/851 groen voor en na. Het commentaar blijft Nederlands.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/conversations.test.js

    rf549cf5 r3bbf73d  
    2626const VREEMDE = 'https://elders/u/vreemde';
    2727
    28 const binnen = (uri, van, stamp) =>
     28const arrived = (uri, van, stamp) =>
    2929  db.prepare(`INSERT INTO ap_mentions (slug, object_uri, actor_uri, actor_name, content, published)
    3030              VALUES ('kind', ?, ?, 'iemand', '<p>hoi</p>', ?)`).run(uri, van, stamp);
    31 const verstuurd = (id, naar, stamp, visibility = 'direct') =>
     31const sent = (id, naar, stamp, visibility = 'direct') =>
    3232  db.prepare(`INSERT INTO ap_outbox (id, site_slug, post_id, to_actor, to_actors, content, visibility, created_at)
    3333              VALUES (?, 'kind', 'p1', ?, ?, '<p>terug</p>', ?, ?)`)
     
    3535
    3636// Een DRUK gesprek met oma: genoeg om in de oude lezing de rest weg te drukken.
    37 for (let i = 0; i < 80; i++) binnen(`https://elders/n/oma-${i}`, OMA, `2026-08-09T10:${String(i % 60).padStart(2, '0')}:00Z`);
     37for (let i = 0; i < 80; i++) arrived(`https://elders/n/oma-${i}`, OMA, `2026-08-09T10:${String(i % 60).padStart(2, '0')}:00Z`);
    3838// En een stil gesprek met tante, ouder dan al die drukte.
    39 binnen('https://elders/n/tante-1', TANTE, '2026-08-01T09:00:00Z');
    40 verstuurd('mijn-1', TANTE, '2026-08-01T09:30:00Z');
     39arrived('https://elders/n/tante-1', TANTE, '2026-08-01T09:00:00Z');
     40sent('mijn-1', TANTE, '2026-08-01T09:30:00Z');
    4141// Een PUBLIEK antwoord aan een vreemde is geen gesprek.
    42 verstuurd('mijn-publiek', VREEMDE, '2026-08-09T12:00:00Z', 'public');
     42sent('mijn-publiek', VREEMDE, '2026-08-09T12:00:00Z', 'public');
    4343
    4444test('de oude lezing verliest tante achter een druk gesprek -- dat is de bug', () => {
     
    4949
    5050test('een rij per tegenpartij, hoe druk de drukste ook is', () => {
    51   const koppen = AP.conversationHeads('kind');
    52   assert.deepEqual(koppen.map((k) => k.other), [OMA, TANTE], 'nieuwste gesprek eerst, allebei aanwezig');
     51  const heads = AP.conversationHeads('kind');
     52  assert.deepEqual(heads.map((k) => k.other), [OMA, TANTE], 'nieuwste gesprek eerst, allebei aanwezig');
    5353});
    5454
     
    5858
    5959test('het gesprek draagt beide kanten onder EEN limiet', () => {
    60   const g = AP.conversationHistory('kind', TANTE, { limit: 60 });
    61   assert.equal(g.rijen.length, 2);
    62   assert.deepEqual(g.rijen.map((r) => r.richting), ['uit', 'in'], 'nieuwste eerst, mijn antwoord bovenaan');
    63   assert.equal(g.meer, false);
     60  const talk = AP.conversationHistory('kind', TANTE, { limit: 60 });
     61  assert.equal(talk.rows.length, 2);
     62  assert.deepEqual(talk.rows.map((r) => r.direction), ['out', 'in'], 'nieuwste eerst, mijn antwoord bovenaan');
     63  assert.equal(talk.more, false);
    6464});
    6565
     
    6767  // De 80 berichten van oma delen stempels (i % 60), en dat is met opzet:
    6868  // twee berichten in dezelfde seconde is bij DM's een gesprek, geen randgeval.
    69   const eerste = AP.conversationHistory('kind', OMA, { limit: 30 });
    70   assert.equal(eerste.rijen.length, 30);
    71   assert.equal(eerste.meer, true, 'er is meer, en dat mag de client weten');
     69  const first = AP.conversationHistory('kind', OMA, { limit: 30 });
     70  assert.equal(first.rows.length, 30);
     71  assert.equal(first.more, true, 'er is meer, en dat mag de client weten');
    7272
    73   const tweede = AP.conversationHistory('kind', OMA, { limit: 30, before: eerste.oudste });
    74   assert.equal(tweede.rijen.length, 30);
    75   // Geen overlap en geen gat: de tweede pagina begint waar de eerste ophield.
    76   const ids = new Set(eerste.rijen.map((r) => r.ref));
    77   assert.ok(tweede.rijen.every((r) => !ids.has(r.ref)), 'geen dubbele');
     73  const second = AP.conversationHistory('kind', OMA, { limit: 30, before: first.oldest });
     74  assert.equal(second.rows.length, 30);
     75  // Geen overlap en geen gat: de second pagina begint waar de first ophield.
     76  const ids = new Set(first.rows.map((r) => r.ref));
     77  assert.ok(second.rows.every((r) => !ids.has(r.ref)), 'geen dubbele');
    7878
    79   const derde = AP.conversationHistory('kind', OMA, { limit: 30, before: tweede.oudste });
    80   assert.equal(derde.rijen.length, 20, 'de staart');
    81   assert.equal(derde.meer, false, 'en dan is het op');
     79  const third = AP.conversationHistory('kind', OMA, { limit: 30, before: second.oldest });
     80  assert.equal(third.rows.length, 20, 'de staart');
     81  assert.equal(third.more, false, 'en dan is het op');
    8282  // Alles bij elkaar: precies 80, geen dubbele en niets overgeslagen. Met een
    8383  // cursor op alleen de stempel zou de grensseconde hier stil wegvallen.
    84   const alles = new Set([...eerste.rijen, ...tweede.rijen, ...derde.rijen].map((r) => r.ref));
    85   assert.equal(alles.size, 80, 'elke berichtje precies een keer');
     84  const allRefs = new Set([...first.rows, ...second.rows, ...third.rows].map((r) => r.ref));
     85  assert.equal(allRefs.size, 80, 'elke berichtje precies een keer');
    8686});
    8787
     
    101101  t.after(() => server.close());
    102102  await new Promise((r) => server.once('listening', r));
    103   const haal = async (pad) => {
     103  const get = async (pad) => {
    104104    const r = await fetch(`http://127.0.0.1:${server.address().port}${pad}`,
    105105      { headers: { Authorization: `Bearer ${bearer}` } });
     
    108108  const slug = '/ap/users/kind';
    109109
    110   const g = await haal(`${slug}/conversations`);
    111   assert.equal(g.status, 200);
    112   assert.equal(g.body.totalItems, 2, 'oma en tante, en niet de publieke vreemde');
     110  const list = await get(`${slug}/conversations`);
     111  assert.equal(list.status, 200);
     112  assert.equal(list.body.totalItems, 2, 'oma en tante, en niet de publieke vreemde');
    113113  // De byline zit in de ingesloten actor, net als overal sinds shaer-nmw.
    114   assert.ok(g.body.orderedItems.every((i) => i.object.attributedTo));
     114  assert.ok(list.body.orderedItems.every((i) => i.object.attributedTo));
    115115
    116   const eerste = await haal(`${slug}/messages?with=${encodeURIComponent(OMA)}&limit=30`);
    117   assert.equal(eerste.body.orderedItems.length, 30);
    118   assert.ok(eerste.body.next, 'er is meer, en de standaardvorm zegt het');
    119   assert.ok(eerste.body.next.includes('limit=30'), 'de paginagrootte reist mee');
     116  const first = await get(`${slug}/messages?with=${encodeURIComponent(OMA)}&limit=30`);
     117  assert.equal(first.body.orderedItems.length, 30);
     118  assert.ok(first.body.next, 'er is meer, en de standaardvorm zegt het');
     119  assert.ok(first.body.next.includes('limit=30'), 'de paginagrootte reist mee');
    120120
    121121  // De next-link volgen doet wat hij belooft: geen dubbele, en uiteindelijk op.
    122   const pad2 = eerste.body.next.replace(/^https?:\/\/[^/]+/, '');
    123   const tweede = await haal(pad2);
    124   const eersteIds = new Set(eerste.body.orderedItems.map((i) => i.object.id));
    125   assert.ok(tweede.body.orderedItems.every((i) => !eersteIds.has(i.object.id)), 'geen overlap');
    126   const derde = await haal(tweede.body.next.replace(/^https?:\/\/[^/]+/, ''));
    127   assert.equal(derde.body.orderedItems.length, 20);
    128   assert.equal(derde.body.next, undefined, 'op is op, en dat staat er ook');
     122  const path2 = first.body.next.replace(/^https?:\/\/[^/]+/, '');
     123  const second = await get(path2);
     124  const firstIds = new Set(first.body.orderedItems.map((i) => i.object.id));
     125  assert.ok(second.body.orderedItems.every((i) => !firstIds.has(i.object.id)), 'geen overlap');
     126  const third = await get(second.body.next.replace(/^https?:\/\/[^/]+/, ''));
     127  assert.equal(third.body.orderedItems.length, 20);
     128  assert.equal(third.body.next, undefined, 'op is op, en dat staat er ook');
    129129
    130130  // Een gesprek draagt beide kanten; het eigen antwoord aan tante hoort erbij.
    131   const tante = await haal(`${slug}/messages?with=${encodeURIComponent(TANTE)}`);
    132   assert.equal(tante.body.orderedItems.length, 2);
    133   assert.ok(tante.body.orderedItems.some((i) => i.actor === 'https://klonkt.test/ap/users/kind'), 'mijn eigen kant zit erin');
     131  const withAunt = await get(`${slug}/messages?with=${encodeURIComponent(TANTE)}`);
     132  assert.equal(withAunt.body.orderedItems.length, 2);
     133  assert.ok(withAunt.body.orderedItems.some((i) => i.actor === 'https://klonkt.test/ap/users/kind'), 'mijn eigen kant zit erin');
    134134
    135   const stuk = await haal(`${slug}/messages?with=nonsens`);
    136   assert.equal(stuk.status, 400, 'geen actor-uri, geen gesprek');
     135  const broken = await get(`${slug}/messages?with=nonsens`);
     136  assert.equal(broken.status, 400, 'geen actor-uri, geen gesprek');
    137137});
Note: See TracChangeset for help on using the changeset viewer.