Changeset 44c9f3f in Klonkt for test/feed-wait.test.js


Ignore:
Timestamp:
08/07/2026 09:37:59 AM (5 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
31e63d1
Parents:
e5fc801 (diff), d14bf1c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge feed-state: de merksteen als koppeltabel (shaer-n05)

Brengt d14bf1c binnen: feedCursor leest ap_feed_state in plaats van MAX(rowid)
over vier tabellen. main had e5fc801 (gate-melding in de Guardian PWA); die twee
raken elkaar alleen in feedCursor en de export-lijst.

Schone merge, geen conflict. Nagekeken op de gemergde boom: de oude
MAX(rowid)-cursor komt nul keer meer voor, de gate-melding en zijn test zijn
intact, en ap_seen_notes (shaer-e9g) staat er nog in beide bestanden. Suite
551/551 op de gemergde boom, gedraaid en niet alleen gelezen.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/feed-wait.test.js

    re5fc801 r44c9f3f  
    5757    assert.notEqual(AP.feedCursor('me'), voor, `${naam} hoort de merksteen te bewegen`);
    5858  }
     59});
     60
     61test('een BEWERKING beweegt hem ook', () => {
     62  // De reden dat de merksteen niet meer op MAX(rowid) leunt. Een Update schrijft
     63  // dezelfde rij, dus de rowid bleef staan en een wachtende client sliep door.
     64  db.prepare("INSERT INTO ap_timeline (id, slug, author_uri, content) VALUES ('bw','me','https://r.test/u/a','<p>oud</p>')").run();
     65  const voor = AP.feedCursor('me');
     66  db.prepare("UPDATE ap_timeline SET content = '<p>nieuw</p>' WHERE id = 'bw'").run();
     67  assert.notEqual(AP.feedCursor('me'), voor);
     68});
     69
     70test('en een VERWIJDERING, ook als het niet de laatste is', () => {
     71  db.prepare("INSERT INTO ap_timeline (id, slug, author_uri, content) VALUES ('later','me','https://r.test/u/a','<p>x</p>')").run();
     72  const voor = AP.feedCursor('me');
     73  db.prepare("DELETE FROM ap_timeline WHERE id = 'bw'").run();
     74  assert.notEqual(AP.feedCursor('me'), voor, 'anders blijft een verwijderde post staan tot je toevallig ververst');
     75});
     76
     77test('maar een LIKE of BOOST van jezelf niet', () => {
     78  // De val waar dit bijna in liep: een like schrijft ap_timeline.liked en een 🔁
     79  // schrijft .boosted. Zonder de UPDATE OF-kolomlijst zou je eigen like het
     80  // bericht als BEWERKT merken en elke wachtende client wekken.
     81  const voor = AP.feedCursor('me');
     82  db.prepare("UPDATE ap_timeline SET liked = 1 WHERE id = 'later'").run();
     83  db.prepare("UPDATE ap_timeline SET boosted = 1 WHERE id = 'later'").run();
     84  db.prepare("UPDATE ap_interactions SET acted_like = 1 WHERE post_id = 'p1'").run();
     85  assert.equal(AP.feedCursor('me'), voor, 'je eigen reactie is geen nieuws');
     86});
     87
     88test('een INSERT OR IGNORE die niets doet beweegt hem niet', () => {
     89  const voor = AP.feedCursor('me');
     90  db.prepare("INSERT OR IGNORE INTO ap_timeline (id, slug, author_uri, content) VALUES ('later','me','https://r.test/u/a','<p>x</p>')").run();
     91  assert.equal(AP.feedCursor('me'), voor);
     92});
     93
     94test('de teller loopt nooit achteruit', () => {
     95  // Met MAX(rowid) zakte hij terug zodra de nieuwste rij verdween, en dan denkt
     96  // een client dat er niets gebeurd is.
     97  const hoog = parseInt(AP.feedCursor('me'), 10);
     98  db.prepare('DELETE FROM ap_timeline WHERE slug = ?').run('me');
     99  assert.ok(parseInt(AP.feedCursor('me'), 10) >= hoog);
     100});
     101
     102test('en hij vertelt WAT er veranderd is', () => {
     103  // Dit is wat een revisieteller niet kan en deze tabel gratis meegeeft: de
     104  // "bewerkt"-markering hoeft er later geen eigen bouwsel voor te worden.
     105  const stand = (uri) => (AP.feedChangesSince('me', 0).find((r) => r.object_uri === uri) || {}).kind;
     106
     107  db.prepare("INSERT INTO ap_timeline (id, slug, author_uri, content) VALUES ('vers','me','https://r.test/u/a','<p>x</p>')").run();
     108  assert.equal(stand('vers'), 'new');
     109
     110  db.prepare("UPDATE ap_timeline SET content = '<p>anders</p>' WHERE id = 'vers'").run();
     111  assert.equal(stand('vers'), 'updated');
     112
     113  db.prepare("DELETE FROM ap_timeline WHERE id = 'vers'").run();
     114  assert.equal(stand('vers'), 'deleted');
     115});
     116
     117test('het is een STAND en geen logboek: bewerkt-en-toen-weg leest als weg', () => {
     118  // Een rij per bericht, niet een rij per gebeurtenis. Vijf keer bewerken blijft
     119  // één rij, en dat is waarom er niets te snoeien valt. Mijn eerste test ging uit
     120  // van een log en viel daar terecht over.
     121  const alles = AP.feedChangesSince('me', 0);
     122  const perUri = new Set(alles.map((r) => r.object_uri));
     123  assert.equal(alles.length, perUri.size, 'geen enkel bericht komt twee keer voor');
    59124});
    60125
Note: See TracChangeset for help on using the changeset viewer.