Changeset 5300652 in Klonkt for test


Ignore:
Timestamp:
08/13/2026 01:08:32 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
6401681
Parents:
a117862
git-author:
Robin <roboburr@…> (08/13/2026 12:10:40 PM)
git-committer:
Robin <roboburr@…> (08/13/2026 01:08:32 PM)
Message:

Stap 2: "Ben jij dit?" in Beheer -> Audio (shaer-mbz)

Een paneel bovenaan het audioscherm: zoek op je artiestennaam (voorgevuld met
wat er al in de site staat), kies je eigen pagina, klaar. Drie talen.

DE TOELICHTING IS HET HELE PUNT. Elke kandidaat toont MusicBrainz'
disambiguation naast soort, land en jaren -- er zijn drie bands die Nirvana
heten, en met alleen een naam kiest iemand de verkeerde. Wij kiezen NIET voor
de artiest, ook niet als er precies een treffer is: een verkeerd geraden MBID
zet jouw naam onder andermans werk.

ONTKOPPELEN KAN. Om dezelfde reden: zo'n vergissing hoort met een klik terug
te draaien te zijn, niet met een databasebewerking.

Alleen een echte MBID komt de kolom in; de route weigert een URL of een handle.
De naam bewaren we ernaast zodat het scherm kan tonen WAT er hangt zonder
ervoor te netwerken -- en zodat een verkeerde koppeling opvalt.

TWEE DINGEN UIT DE HUISREGELS. De kandidaten gaan met textContent het scherm op
en niet als HTML: dat is tekst uit een vreemd register. En het blok hangt in
run() en niet op moduleniveau -- deze modules krijgen bij elke paginawissel
opnieuw init(), en een blok dat maar een keer per sessie draait is precies wat
shaer-5s1 opleverde. Ik had hem er eerst buiten gezet.

Als iemand niet in MusicBrainz staat zegt het scherm dat hij zich daar kan
aanmelden -- en erbij dat dat alleen dáár kan, niet vanuit Klonkt. Dat is geen
bescheidenheid maar hun API: artiesten zijn er niet mee aan te maken.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/musicbrainz.test.js

    ra117862 r5300652  
    9797
    9898test.after(() => { globalThis.fetch = echt; });
     99
     100// ── Stap 2: de keuze vastleggen ───────────────────────────────────────────
     101
     102test('alleen een echte MBID komt de kolom in', async () => {
     103  // De route weigert alles wat geen UUID is. Zonder die zeef sluipt er een
     104  // hele URL of een handle in het veld dat straks naar buiten gaat.
     105  const db = dbMod.default;
     106  db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
     107    .run('u1', 'u1', 'u1@t', 'x', 'god');
     108  db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)').run('s1', 'band', 'Band', 'u1');
     109  for (const rommel of ['https://musicbrainz.org/artist/8be31978-1884-4773-beae-f73df35b92aa', 'nirvana', '']) {
     110    assert.equal(MB.isMbid(rommel), false, `${rommel} hoort geweigerd te worden`);
     111  }
     112  db.prepare('UPDATE sites SET mb_artist_id = ?, mb_artist_name = ? WHERE id = ?')
     113    .run('8be31978-1884-4773-beae-f73df35b92aa', 'Nirvana', 's1');
     114  const s = db.prepare("SELECT mb_artist_id, mb_artist_name FROM sites WHERE id = 's1'").get();
     115  assert.equal(s.mb_artist_id, '8be31978-1884-4773-beae-f73df35b92aa');
     116  assert.equal(s.mb_artist_name, 'Nirvana', 'de naam ernaast, zodat het scherm kan tonen WAT er hangt');
     117});
     118
     119test('ontkoppelen maakt beide velden leeg', () => {
     120  const db = dbMod.default;
     121  db.prepare('UPDATE sites SET mb_artist_id = NULL, mb_artist_name = NULL WHERE id = ?').run('s1');
     122  const s = db.prepare("SELECT mb_artist_id, mb_artist_name FROM sites WHERE id = 's1'").get();
     123  assert.equal(s.mb_artist_id, null);
     124  assert.equal(s.mb_artist_name, null, 'anders blijft er een naam staan zonder koppeling');
     125});
Note: See TracChangeset for help on using the changeset viewer.