Changeset 75f2897 in Klonkt for test/thread.test.js
- Timestamp:
- 08/10/2026 07:33:52 AM (4 weeks ago)
- Branches:
- main
- Children:
- aae5881
- Parents:
- 0db3c72
- File:
-
- 1 edited
-
test/thread.test.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
test/thread.test.js
r0db3c72 r75f2897 52 52 ]; 53 53 54 // De echte fetch, voordat de stub hem overneemt: de route-test onderaan doet 55 // een ECHT verzoek aan een testserver op localhost, en dat mag de stub niet 56 // beantwoorden met zijn 404. 57 const echteFetch = globalThis.fetch; 58 54 59 globalThis.fetch = async (url) => { 55 60 const u = String(url); … … 69 74 assert.equal(uit.notes.length, 2); 70 75 // Oudste eerst: een gesprek lees je van boven naar beneden. 71 assert.equal(uit.notes[0] ['shaer:author'].name, 'tante');72 assert.equal(uit.notes[1] ['shaer:author'].name, 'vreemde');76 assert.equal(uit.notes[0].attributedTo.name, 'tante'); 77 assert.equal(uit.notes[1].attributedTo.name, 'vreemde'); 73 78 // De sanitizer heeft het script eruit gehaald, de tekst mag blijven. 74 79 assert.ok(!uit.notes[1].content.includes('<script'), 'script weggeschoond'); … … 96 101 const kring = AP.filterThreadToCircle('pupil', uit.notes); 97 102 assert.equal(kring.notes.length, 1); 98 assert.equal(kring.notes[0]['shaer:author'].name, 'tante'); 103 // Ook de zeef zelf leest de ingesloten actor: een kale vergelijking op 104 // attributedTo zou hier stil ALLES wegfilteren. 105 assert.equal(kring.notes[0].attributedTo.name, 'tante'); 99 106 // De vreemde is er, en dat mag gezegd: geteld, niet stil weggelaten. 100 107 assert.equal(kring.hidden, 1); … … 143 150 globalThis.fetch = vorige; 144 151 }); 152 153 // ── Door de route heen, want daar wordt de vorm beslist ────────────── 154 // 155 // De byline van een antwoord verhuisde naar de ingesloten attributedTo 156 // (shaer-nmw). Deze leg had geen route-dekking, en juist hier zit de 157 // emoji-poort die IN die byline knipt -- knipt hij in het oude veld, dan 158 // gebeurt er stil niets meer. 159 test('de thread-route geeft de byline in attributedTo, en de emoji-poort knipt daarin', async (t) => { 160 const crypto = await import('crypto'); 161 const express = (await import('express')).default; 162 const routes = (await import('../src/routes/activitypub.js')).default; 163 164 const bearer = 'test-token-' + 'c'.repeat(24); 165 db.prepare('INSERT INTO oauth_tokens (token_hash, client_id, user_id, site_slug, scope) VALUES (?,?,?,?,?)') 166 .run(crypto.createHash('sha256').update(bearer).digest('base64url'), 'c', 'u1', 'kind', 'read write'); 167 168 const app = express(); 169 app.use(routes); 170 const server = app.listen(0); 171 t.after(() => server.close()); 172 await new Promise((r) => server.once('listening', r)); 173 const haal = async () => (await (await echteFetch( 174 `http://127.0.0.1:${server.address().port}/ap/users/kind/thread?object=${encodeURIComponent(BRON)}`, 175 { headers: { Authorization: `Bearer ${bearer}` } })).json()); 176 177 const doc = await haal(); 178 assert.ok(!JSON.stringify(doc).includes('"shaer:author":'), 'geen dialect meer op deze leg'); 179 const vanTante = doc.orderedItems.find((n) => n.id.endsWith('/replies/2')); 180 assert.equal(vanTante.attributedTo.name, 'tante', 'de byline zit in attributedTo'); 181 assert.equal(vanTante.attributedTo.preferredUsername, 'tante'); 182 assert.ok((vanTante.tag || []).some((x) => x.type === 'Emoji'), 'open poort: de emoji van het antwoord blijft'); 183 184 // Poort dicht: FEP-9098 zit in de tag van de ingesloten actor, dus daar 185 // hoort geknipt te worden -- en het antwoord zelf houdt zijn eigen emoji 186 // niet meer over. 187 db.prepare("UPDATE sites SET gate_custom_emoji = 0 WHERE slug = 'kind'").run(); 188 db.prepare("INSERT INTO ap_guardianships (slug, other_uri, role, status) VALUES ('kind', ?, 'guardian', 'accepted')") 189 .run('https://203.0.113.20/users/tante'); 190 const dicht = await haal(); 191 const na = dicht.orderedItems.find((n) => n.id.endsWith('/replies/2')); 192 assert.ok(!(na.tag || []).some((x) => x.type === 'Emoji'), 'dichte poort: geen emoji meer'); 193 assert.ok(!na.attributedTo.tag, 'ook niet in de byline'); 194 });
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)