Changeset 39a9d21 in Klonkt for test/ap-playlist.test.js


Ignore:
Timestamp:
08/08/2026 04:50:48 AM (5 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
fb22f78
Parents:
bdcb3a3
git-author:
Robin <roboburr@…> (08/08/2026 04:47:48 AM)
git-committer:
Robin <roboburr@…> (08/08/2026 04:50:48 AM)
Message:

Onze tracks zijn eersterangs Audio-objecten (shaer-0nh, stap 3)

De spiegel van wat sinds bdcb3a3 inkomend werkt. Onze muziek zat alleen als
naamloze bijlage in een Note: iets dat bestaat zolang je het omhullende object
vasthoudt. Nu is een track een DING met een eigen id, los op te halen, en in
twee playlists hetzelfde ding.

DE ACTOR-COLLECTIE IS DE KANONIEKE PLEK, niet de playlist (Robins vraag). Een
playlist is een keuze uit wat de artiest heeft uitgebracht; de collectie is dat
geheel. Een track die in geen enkele playlist stond was tot nu toe onzichtbaar
voor de federatie -- die staat er nu wel in.

GET /ap/users/:slug/tracks alles wat opengezet is
GET /ap/users/:slug/tracks/:id een track, met eigen @context
streams tracks eerst, dan playlists

url wordt een Link-array: de mediaType hoort bij de link, niet bij het
object. Zo doet Funkwhale het, en zo leest onze eigen inbox het sinds bdcb3a3 --
een andere Klonkt kan onze tracks dus als track opnemen in plaats van als
bijlage.

GEEN text/html-link erin. Klonkt heeft geen trackpagina: een track wordt getoond
binnen een post, en een post over vijf nummers is niet de pagina van dit ene
nummer. Liever geen link dan een link die iets anders belooft.

De poortregel loopt door: een gesloten track geeft 404, dezelfde "afwezig, niet
leeg" als in de collectie, zodat het bestaan van een gated nummer niet uit een
ander antwoord valt af te leiden.

ONDERWEG OPGERUIMD. De mediaType-afleiding stond twee keer functie-lokaal, met
een commentaar dat ze "dezelfde afleiding" waren. Dat was niet zo: de ene kende
video, de andere alleen beeld. Nu een kaart, op moduleniveau, met de volledige
map -- gedragsgelijk voor buildNote en een superset voor de playlist.

7 tests.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/ap-playlist.test.js

    rbdcb3a3 r39a9d21  
    7979  for (const a of body.orderedItems) {
    8080    assert.equal(a.type, 'Audio');
    81     assert.match(a.url, /^https:\/\/test\.example\/audio\/stream\//);
    82     assert.equal(a.mediaType, 'audio/mpeg');
     81    // Sinds stap 3: een eigen id, en url als Link-array -- de mediaType hoort
     82    // bij de link, niet bij het object.
     83    assert.match(a.id, /^https:\/\/test\.example\/ap\/users\/band\/tracks\//);
     84    assert.ok(Array.isArray(a.url), 'url is een Link-array');
     85    assert.match(a.url[0].href, /^https:\/\/test\.example\/audio\/stream\//);
     86    assert.equal(a.url[0].mediaType, 'audio/mpeg');
    8387  }
    8488  assert.equal(body.orderedItems[0].duration, 'PT215S');
Note: See TracChangeset for help on using the changeset viewer.