Changeset f894be5 in Klonkt for test/fep1580-migration.test.js
- Timestamp:
- 08/14/2026 01:20:51 AM (4 weeks ago)
- Branches:
- main
- Children:
- 9f9b45f
- Parents:
- 5a49eba
- File:
-
- 1 edited
-
test/fep1580-migration.test.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
test/fep1580-migration.test.js
r5a49eba rf894be5 458 458 }); 459 459 460 test('de outbox-keten wordt gevolgd, ook als de kale collectie zelf items draagt', async () => { 461 // Robins 18 van 35. Klonkts kale outbox draagt first EN een kopie van 462 // pagina 1 (Pleroma eiste ooit een first, sindsdien staan ze er allebei). 463 // De ingest zag items, sloeg first over, vond daarna geen next (dat veld 464 // bestaat alleen op echte pagina's) en dacht klaar te zijn. Zonder een 465 // waarschuwing, en dat was het ergste deel. 466 const s = site({ aliases: [BRON] }); 467 const maak = (i) => note(`${BRON}/notes/n${i}`); 468 const p1 = Array.from({ length: 20 }, (_, i) => maak(i + 1)); 469 const p2 = Array.from({ length: 8 }, (_, i) => maak(i + 21)); 470 const kaart = new Map([ 471 [BRON, { id: BRON, type: 'Person', movedTo: IK, outbox: `${BRON}/outbox` }], 472 // de valstrik: totalItems, first, EN de eerste twintig inline 473 [`${BRON}/outbox`, { type: 'OrderedCollection', totalItems: 28, first: `${BRON}/outbox?page=1`, orderedItems: p1 }], 474 [`${BRON}/outbox?page=1`, { type: 'OrderedCollectionPage', next: `${BRON}/outbox?page=2`, orderedItems: p1 }], 475 [`${BRON}/outbox?page=2`, { type: 'OrderedCollectionPage', orderedItems: p2 }], 476 ]); 477 const r = await stil(() => Mig.ingestFromSource(s, { deps: { 478 getJson: async (_s, url) => kaart.get(url) || null, 479 noteId: (b, id) => `${b}/ap/notes/${id}`, 480 noteVisibility: AP.noteVisibility, 481 } })); 482 assert.equal(r.posts, 28, 'alle pagina\'s, niet alleen de kopie op de kale collectie'); 483 }); 484 485 test('een niet opgehaalde pagina wordt GEMELD, niet verzwegen', async () => { 486 const s = site({ aliases: [BRON] }); 487 const p1 = Array.from({ length: 20 }, (_, i) => note(`${BRON}/notes/n${i + 1}`)); 488 const kaart = new Map([ 489 [BRON, { id: BRON, type: 'Person', movedTo: IK, outbox: `${BRON}/outbox` }], 490 [`${BRON}/outbox`, { type: 'OrderedCollection', totalItems: 28, first: `${BRON}/outbox?page=1` }], 491 [`${BRON}/outbox?page=1`, { type: 'OrderedCollectionPage', next: `${BRON}/outbox?page=2`, orderedItems: p1 }], 492 // pagina 2 antwoordt niet (rate limit, netwerkstoring, wat dan ook) 493 ]); 494 const r = await stil(() => Mig.ingestFromSource(s, { deps: { 495 getJson: async (_s, url) => kaart.get(url) || null, 496 noteId: (b, id) => `${b}/ap/notes/${id}`, 497 noteVisibility: AP.noteVisibility, 498 } })); 499 assert.equal(r.posts, 20); 500 assert.ok(r.waarschuwingen.some((w) => /28 items en er zijn er 20/.test(w)), 501 'stil minder ophalen dan de bron meldt is hoe 18 van 35 wekenlang op klaar had gestaan'); 502 }); 503 504 test('een plaatje in de tekst wordt gedownload en de verwijzing wordt relatief', async () => { 505 // Robins hotlinks. En de valkuil die de eerste versie half liet werken: de 506 // regex stond als STRING in een template literal, \s werd een kale s, en 507 // elke URL met een s erin (post-images!) knapte af. Vandaar de assert op de 508 // VOLLEDIGE url, letter voor letter. 509 const s = site({ aliases: [BRON] }); 510 const IMG = `${BRON.replace('/ap/users/robo', '')}/media/post-images/plaatje-strak.png`; 511 const kaart = new Map([ 512 [BRON, { id: BRON, type: 'Person', movedTo: IK, outbox: `${BRON}/outbox` }], 513 [`${BRON}/outbox`, { type: 'OrderedCollection', totalItems: 1, first: `${BRON}/outbox?page=1` }], 514 [`${BRON}/outbox?page=1`, { type: 'OrderedCollectionPage', orderedItems: [ 515 note(`${BRON}/notes/pi`, { content: `<p>kijk</p><a href="${IMG}"><img src="${IMG}"></a>` }), 516 ] }], 517 ]); 518 const opgehaald = []; 519 const geschreven = []; 520 const r = await stil(() => Mig.ingestFromSource(s, { deps: { 521 getJson: async (_s, url) => kaart.get(url) || null, 522 noteId: (b, id) => `${b}/ap/notes/${id}`, 523 noteVisibility: AP.noteVisibility, 524 mediaRoot: '/nep/media', audioRoot: '/nep/audio', 525 signHeaders: () => ({ Signature: 'nep' }), 526 safeFetch: async (url) => { opgehaald.push(url); return { ok: true, arrayBuffer: async () => Buffer.from('png'), headers: { get: () => 'image/png' } }; }, 527 fs: { mkdirSync() {}, writeFileSync: (pad) => geschreven.push(pad), statSync() { throw new Error('ENOENT'); } }, 528 path, 529 } })); 530 assert.equal(r.posts, 1); 531 assert.deepEqual(opgehaald, [IMG], 'de VOLLEDIGE url, niet een afgekapt stuk'); 532 assert.deepEqual(geschreven, ['/nep/media/post-images/plaatje-strak.png'], 'op het pad van de bron'); 533 const c = db.prepare("SELECT content FROM posts WHERE site_id = 's1'").get().content; 534 assert.ok(c.includes('src="/media/post-images/plaatje-strak.png"'), `relatief herschreven, kreeg: ${c}`); 535 assert.ok(!c.includes('oud.example'), 'en er hotlinkt niets meer naar de bron'); 536 }); 537 460 538 test('een bericht dat je zelf hebt verwijderd komt bij een tweede ronde terug', async () => { 461 539 // Robin: "ik kan handmatig deze keer de posts verwijderen en opnieuw ophalen."
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)