Changeset 861c228 in Klonkt for test/archive-audio.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/archive-audio.test.js

    r9f9b45f r861c228  
    234234});
    235235
     236test('ook een zip-import buigt links naar de bronpost om', () => {
     237  // Robin: "het moet wel gebeuren bij migratie direct ook". Een zip-import is
     238  // net zo goed een verhuizing, dus dezelfde regel.
     239  leeg();
     240  try { db.prepare('DELETE FROM posts').run(); } catch { /* leeg */ }
     241  db.prepare(`INSERT INTO posts (id, site_id, author_id, slug, title, content, status, published_at)
     242              VALUES ('pl1','s1','u1','tiktik','TikTik','<p><a href="https://oud.test/tiktik?fc=2">luister</a></p>','published','2026-01-01T10:00:00Z')`).run();
     243  const uit = AX.buildArchive('me');
     244
     245  db.prepare('DELETE FROM posts').run();
     246  // De import doet alsof het archief van oud.test komt; deze site is oud.test
     247  // niet, dus de links moeten om.
     248  const files = new Map(uit.files);
     249  const man = JSON.parse(files.get('manifest.json').toString('utf8'));
     250  man.origin = 'https://oud.test';
     251  files.set('manifest.json', Buffer.from(JSON.stringify(man)));
     252
     253  const r = AI.importArchive(files, { slug: 'me', origin: 'https://nieuw.test' });
     254  const c = db.prepare("SELECT content FROM posts WHERE slug = 'tiktik'").get().content;
     255  assert.ok(c.includes('href="/tiktik?fc=2"'), `omgebogen naar hier, kreeg: ${c}`);
     256  assert.ok(!c.includes('oud.test'), 'niets wijst meer naar de bron');
     257  assert.equal(r.linksBijgetrokken, 1, 'en het verslag zegt het');
     258});
     259
    236260test.after(() => { try { fs.rmSync(TMP, { recursive: true, force: true }); } catch { /* niets */ } });
Note: See TracChangeset for help on using the changeset viewer.