Changeset 861c228 in Klonkt for test/fep1580-migration.test.js


Ignore:
Timestamp:
08/14/2026 01:43:59 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
dc802b4
Parents:
9f9b45f
Message:

Gebakken links wijzen voortaan naar hier, in beide routes

Robin: de gebakken tracklinks moeten de nieuwe links worden. Terecht, en ik had
ze te makkelijk afgedaan als "geen plaatje, dus niet mijn probleem". Het zijn
tijdbommen: buildNote zet https://oud/<slug>#track-<id> en ?fc=2 in de content,
en zodra dat domein opgezegd wordt staan er dode links in je eigen berichten.

Ze kunnen nu ook echt om, en dat is te danken aan "altijd behouden" van
vanmiddag: slug en track-id zijn hier hetzelfde, dus alleen de host hoeft eraf
en het fragment klopt vanzelf.

DE REGEL: alleen ombuigen voor een slug die hier ECHT bestaat. Wijst een link
naar iets dat we niet hebben, dan blijft hij naar de oude site wijzen. Een
verwijzing naar een pagina die er nog is, is beter dan een 404 op de nieuwe.

Pas aan het EIND van de ronde, want dan pas weten we welke slugs binnen zijn.
Bij een verse ingest zou de helft van de links nog niet te beoordelen zijn.

EN IN BEIDE ROUTES ("het moet wel gebeuren bij migratie direct ook"). Een
zip-import is net zo goed een verhuizing. Daar draait het binnen dezelfde
transactie: half bijgetrokken is erger dan niet.

Changed files:
src/services/MigrationService.js

  • postLinksBijtrekken(), geexporteerd zodat de zip hem ook kan draaien
  • aangeroepen zodra alle berichten binnen zijn

src/services/ArchiveImportService.js

  • dezelfde stap aan het eind van de import, in de transactie
  • rapportveld linksBijgetrokken

src/views/pages/admin-migrate.ejs

  • in het import- en het ophaalverslag

src/services/i18n.js

  • mig.r_links_fixed in nl/en/de

test/fep1580-migration.test.js

  • fragment en querystring blijven heel, een onbekende slug blijft met rust

test/archive-audio.test.js

  • dezelfde eis voor de zip-route

remarks: /media, /audio en /ap worden overgeslagen; die lopen via hun eigen weg.
Suite 1000 groen, tegenproef op allebei de routes.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/fep1580-migration.test.js

    r9f9b45f r861c228  
    577577});
    578578
     579test('links naar de bronpost buigen om naar hier, in dezelfde ronde', async () => {
     580  // De gebakken "luister op"-links: buildNote zet
     581  // https://oud/<slug>#track-<id> en ?fc=2 in de content. Die bleven naar de
     582  // oude site wijzen, en dat is een tijdbom: zodra dat domein weg is staan er
     583  // dode links in je eigen berichten. Slugs en track-ids blijven behouden, dus
     584  // de fragmenten kloppen vanzelf zodra de host eraf is.
     585  const s = site({ aliases: [BRON] });
     586  const OUD = 'https://oud.example';
     587  const kaart = new Map([
     588    [BRON, { id: BRON, type: 'Person', movedTo: IK, outbox: `${BRON}/outbox` }],
     589    [`${BRON}/outbox`, { type: 'OrderedCollection', totalItems: 2, first: `${BRON}/outbox?page=1` }],
     590    [`${BRON}/outbox?page=1`, { type: 'OrderedCollectionPage', orderedItems: [
     591      note(`${BRON}/notes/tiktik`, { url: `${OUD}/tiktik`, content:
     592        `<p>🎵 <a href="${OUD}/tiktik#track-t1">TikTik</a> — <a href="${OUD}/tiktik?fc=2">luister</a></p>` }),
     593      // een link naar iets dat we NIET hebben blijft met rust
     594      note(`${BRON}/notes/ander`, { url: `${OUD}/ander`, content:
     595        `<p>zie <a href="${OUD}/bestaat-hier-niet">daar</a></p>` }),
     596    ] }],
     597  ]);
     598  const r = await stil(() => Mig.ingestFromSource(s, { deps: {
     599    getJson: async (_s, url) => kaart.get(url) || null,
     600    noteId: (b, id) => `${b}/ap/notes/${id}`,
     601    noteVisibility: AP.noteVisibility,
     602  } }));
     603  assert.equal(r.posts, 2);
     604  const tik = db.prepare("SELECT content FROM posts WHERE slug = 'tiktik'").get().content;
     605  assert.ok(tik.includes('href="/tiktik#track-t1"'), `fragment blijft heel, kreeg: ${tik}`);
     606  assert.ok(tik.includes('href="/tiktik?fc=2"'), 'en de querystring ook');
     607  assert.ok(!tik.includes('oud.example'), 'er wijst niets meer naar de oude site');
     608  const ander = db.prepare("SELECT content FROM posts WHERE slug = 'ander'").get().content;
     609  assert.ok(ander.includes(`${OUD}/bestaat-hier-niet`),
     610    'een link naar iets dat hier niet bestaat blijft staan: beter de oude site dan een 404 op de nieuwe');
     611  assert.equal(r.linksBijgetrokken, 1);
     612});
     613
    579614test('een bericht dat je zelf hebt verwijderd komt bij een tweede ronde terug', async () => {
    580615  // Robin: "ik kan handmatig deze keer de posts verwijderen en opnieuw ophalen."
Note: See TracChangeset for help on using the changeset viewer.