- Timestamp:
- 09/30/2026 07:27:05 AM (4 hours ago)
- Branches:
- main
- Children:
- 19e28ce
- Parents:
- 86cfa1a
- File:
-
- 1 edited
-
test/search-fediverse.test.js (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
test/search-fediverse.test.js
r86cfa1a rfd8faf5 26 26 const searchMod = await import('../src/routes/search.js'); 27 27 const router = searchMod.default; 28 const { lookupUri } = searchMod;28 const { lookupUri, lookupHandle } = searchMod; 29 29 30 30 db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)') … … 55 55 gevraagd.push(['actor', uri]); 56 56 actorOpties.push(opts || {}); 57 if (!uri.includes('/u/')) return null; 57 const actorUri = uri === '@oma@elders.test' ? 'https://elders.test/u/oma' : uri; 58 if (!actorUri.includes('/u/')) return null; 58 59 return { 59 actor_uri: uri, actor_name: 'Oma', actor_handle: '@oma@elders.test',60 actor_url: uri, actor_icon: 'https://elders.test/avatar.png', inbox: uri + '/inbox',60 actor_uri: actorUri, actor_name: 'Oma', actor_handle: '@oma@elders.test', 61 actor_url: actorUri, actor_icon: 'https://elders.test/avatar.png', inbox: actorUri + '/inbox', 61 62 }; 62 63 }; … … 105 106 assert.equal(status, 200); 106 107 assert.deepEqual(gevraagd, [], 'een zoekterm hoort geen netwerkverzoek te worden'); 107 assert.ok(!html.includes('s earch-remote'), 'en er hoort geen fediverse-blok te staan');108 assert.ok(!html.includes('sr-fediverse'), 'en er hoort geen fediverse-blok te staan'); 108 109 }); 109 110 … … 113 114 assert.ok(html.includes('Een bericht van ver weg'), 'de inhoud hoort er te staan'); 114 115 assert.ok(html.includes('@oma@elders.test'), 'en van wie het is'); 115 // De functies van authorize_interaction, op de zoekpagina. 116 for (const actie of ['/authorize_interaction/like', '/authorize_interaction/boost', '/authorize_interaction/report']) { 116 // Waarderen en boosten kan ter plekke; antwoorden en melden op de volle 117 // interactiepagina. De zoekpagina ziet er sinds 30-9 precies zo uit als het 118 // live vak, dus ook hier de compacte kaart. 119 for (const actie of ['/authorize_interaction/like', '/authorize_interaction/boost']) { 117 120 assert.ok(html.includes(`action="${actie}"`), `${actie} ontbreekt`); 118 121 } 119 assert.ok(html.includes('action="/authorize_interaction"'), 'het antwoordvenster ontbreekt'); 122 assert.ok(html.includes('/authorize_interaction?uri=https%3A%2F%2Felders.test%2Fnotes%2F1&reply=1'), 123 'antwoorden wijst naar de volle pagina, met het venster open'); 120 124 }); 121 125 … … 131 135 assert.equal(status, 200); 132 136 assert.equal(gevraagd.length, 2, 'beide vormen zijn geprobeerd'); 133 assert.ok( html.includes('search-remote'), 'het blok staat er, met de melding erin');134 assert.ok(html.includes('search- page-form'), 'en de zoekpaginazelf is niet weggevallen');137 assert.ok(/sr-fediverse[\s\S]*class="sr-note"/.test(html), 'het blok staat er, met de melding erin'); 138 assert.ok(html.includes('search-bar-form'), 'en de zoekbalk zelf is niet weggevallen'); 135 139 }); 136 140 … … 203 207 const preview = async (q) => { 204 208 gevraagd = []; opties = []; 205 const r = await fetch(`http://127.0.0.1:${poort}/search/re mote?q=${encodeURIComponent(q)}`, { signal: AbortSignal.timeout(10000) });209 const r = await fetch(`http://127.0.0.1:${poort}/search/results?q=${encodeURIComponent(q)}`, { signal: AbortSignal.timeout(10000) }); 206 210 return { status: r.status, html: await r.text(), cache: r.headers.get('cache-control') }; 207 211 }; … … 240 244 try { 241 245 const { status, html } = await preview('https://elders.test/notes/1'); 242 // 204 en geen 403: voor een bezoeker is een geplakte link gewoon een243 // zoekterm, en de zoekbalk valt dan terug op de gewone suggesties.244 assert.equal(status, 20 4);246 // Voor een bezoeker is een geplakte link gewoon een zoekterm: hij krijgt 247 // de gewone resultaten en de zin waarom er verder niets staat. 248 assert.equal(status, 200); 245 249 assert.deepEqual(gevraagd, [], 'zonder rechten hoort er geen enkel verzoek uit te gaan'); 246 assert. equal(html, '');250 assert.ok(!html.includes('/authorize_interaction/like'), 'en er staan geen knoppen'); 247 251 } finally { 248 252 ingelogd = true; … … 252 256 test('een zoekterm in de preview haalt niets op', async () => { 253 257 const { status } = await preview('soundfabrics.nl'); 254 assert.equal(status, 20 4);255 assert.deepEqual(gevraagd, [] );258 assert.equal(status, 200, 'gewoon zoeken'); 259 assert.deepEqual(gevraagd, [], 'maar niets ophalen'); 256 260 }); 257 261 … … 323 327 }); 324 328 329 // ── Eén zoekvlak: de pagina en het live vak zijn hetzelfde ───────────────── 330 // 331 // Robins ontwerp van 30-9: de zoekbalk en het vak eronder zijn het hele 332 // zoeken, en /search?q=... ziet er hetzelfde uit. Dat is alleen waar zolang 333 // beide dezelfde render gebruiken; deze toets vangt het moment dat ze uit 334 // elkaar gaan lopen. 335 336 test('de pagina en het live vak tonen dezelfde resultaten, teken voor teken', async () => { 337 const pagina = (await zoek('https://elders.test/notes/1')).html; 338 const vak = (await preview('https://elders.test/notes/1')).html.trim(); 339 assert.ok(vak.startsWith('<div class="sr">'), 'het vak levert de resultaten-render'); 340 assert.ok(pagina.includes(vak), 'de pagina bevat exact dezelfde render als het live vak'); 341 }); 342 343 test('een lege vraag in het live vak levert niets en haalt niets op', async () => { 344 const { status } = await preview('x'); 345 assert.equal(status, 204); 346 assert.deepEqual(gevraagd, []); 347 }); 348 349 // ── WebFinger: @naam@server in de zoekbalk ─────────────────────────────────── 350 351 test('een handle wordt herkend, een naam of zin niet', () => { 352 assert.equal(lookupHandle('@oma@elders.test'), '@oma@elders.test'); 353 assert.equal(lookupHandle('oma@Elders.Test'), '@oma@elders.test', 'zonder @ vooraan, zoals Mastodon'); 354 assert.equal(lookupHandle(' @oma.v_d-berg@sub.elders.test '), '@oma.v_d-berg@sub.elders.test'); 355 assert.equal(lookupHandle('@oma'), null, 'een naam om naar te zoeken, geen adres'); 356 assert.equal(lookupHandle('@oma@localhost'), null, 'een server zonder domeinnaam'); 357 assert.equal(lookupHandle('oma @elders.test'), null, 'een spatie maakt er een zoekopdracht van'); 358 assert.equal(lookupHandle('https://elders.test/@oma'), null, 'een adres is een adres, geen handle'); 359 }); 360 361 test('een handle haalt het profiel op, ondertekend, zonder eerst een post te proberen', async () => { 362 actorOpties = []; 363 const { html } = await preview('@oma@elders.test'); 364 assert.deepEqual(gevraagd, [['actor', '@oma@elders.test']], 'alleen het profiel: een handle is nooit een post'); 365 assert.equal(actorOpties[0] && actorOpties[0].asSlug, 'robo', 'het profiel achter de handle gaat ondertekend'); 366 assert.ok(html.includes('action="/authorize_interaction/follow"'), 'met de volgknop'); 367 assert.ok(html.includes('https://elders.test/u/oma'), 'voor het profiel dat WebFinger opleverde'); 368 }); 369 370 test('een handle op de zoekpagina geeft hetzelfde profiel', async () => { 371 const { html } = await zoek('oma@elders.test'); 372 assert.ok(html.includes('action="/authorize_interaction/follow"')); 373 }); 374 375 test('niet ingelogd levert een handle geen enkel verzoek op', async () => { 376 ingelogd = false; 377 try { 378 const { status, html } = await preview('@oma@elders.test'); 379 assert.equal(status, 200); 380 assert.deepEqual(gevraagd, [], 'geen WebFinger en geen profiel'); 381 assert.ok(!html.includes('/authorize_interaction/follow')); 382 } finally { 383 ingelogd = true; 384 } 385 }); 386
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)