Changeset 75f2897 in Klonkt for test/standard-shapes.test.js
- Timestamp:
- 08/10/2026 07:33:52 AM (4 weeks ago)
- Branches:
- main
- Children:
- aae5881
- Parents:
- 0db3c72
- File:
-
- 1 edited
-
test/standard-shapes.test.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
test/standard-shapes.test.js
r0db3c72 r75f2897 83 83 assert.equal(AP.quoteObject('rommel'), undefined); 84 84 }); 85 86 // ── En dan het weghalen (shaer-nmw, tweede helft) ──────────────────── 87 // 88 // Bewijzen dat de standaardvorm ERBIJ staat is de helft; de andere helft is dat 89 // het dialect er niet meer NAAST staat. Zonder deze wacht sluipt een 90 // shaer:author zo weer een nieuwe leg in en spreken we stilletjes weer onze 91 // eigen taal. Daarom door de echte route, want daar wordt de vorm beslist. 92 test('de C2S-leg spreekt geen dialect meer waar de standaard het regelt', async (t) => { 93 const crypto = await import('crypto'); 94 const express = (await import('express')).default; 95 const db = (await import('../src/config/database.js')).default; 96 const routes = (await import('../src/routes/activitypub.js')).default; 97 98 db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)') 99 .run('u1', 'u1', 'u1@t', 'x', 'god'); 100 db.prepare('INSERT INTO sites (id, slug, title, owner_id, is_primary) VALUES (?,?,?,?,1)') 101 .run('s1', 'kind', 'kind', 'u1'); 102 db.prepare(`INSERT INTO ap_timeline (id, slug, author_uri, author_name, author_handle, author_icon, 103 reblog_name, reblog_handle, content) 104 VALUES ('https://elders/n1', 'kind', 'https://elders/u/til', 'Tante Til', '@til@elders', 105 'https://elders/til.png', 'Esmee', '@es@elders', '<p>hoi</p>')`).run(); 106 107 const bearer = 'test-token-' + 'b'.repeat(24); 108 db.prepare('INSERT INTO oauth_tokens (token_hash, client_id, user_id, site_slug, scope) VALUES (?,?,?,?,?)') 109 .run(crypto.createHash('sha256').update(bearer).digest('base64url'), 'c', 'u1', 'kind', 'read write'); 110 111 const app = express(); 112 app.use(routes); 113 const server = app.listen(0); 114 t.after(() => server.close()); 115 await new Promise((r) => server.once('listening', r)); 116 const doc = await (await fetch(`http://127.0.0.1:${server.address().port}/ap/users/kind/inbox`, 117 { headers: { Authorization: `Bearer ${bearer}` } })).json(); 118 119 const tekst = JSON.stringify(doc); 120 // Op de SLEUTEL, niet op een stuk tekst: 'shaer:quote' zit ook in 121 // shaer:quoteCards, en dat is een poortnaam die blijft. Een te grove zeef 122 // zou hier rood staan om iets dat klopt -- of erger, groen om iets dat niet 123 // klopt. 124 for (const weg of ['shaer:author', 'shaer:booster', 'shaer:quote', 'shaer:embed']) { 125 assert.ok(!tekst.includes(`"${weg}":`), `${weg} hoort weg te zijn`); 126 } 127 // Wat WEL mag blijven, en waarom: per-lezer-interactiestatus heeft in AS2 128 // geen tegenhanger (Mastodon lost het in zijn eigen REST-API op), en de 129 // FEP-633c-termen zijn bewust van ons en in standaardisatie. 130 assert.ok(tekst.includes('shaer:liked'), 'interactiestatus blijft, die heeft geen standaard'); 131 132 const item = doc.orderedItems.find((i) => i.object.id === 'https://elders/n1'); 133 assert.equal(item.type, 'Announce', 'een boost is de wrapper, niet een zijkanaal'); 134 assert.equal(item.object.attributedTo.name, 'Tante Til', 'en de byline zit in attributedTo'); 135 assert.equal(item.object.attributedTo.preferredUsername, 'til'); 136 });
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)