- Timestamp:
- 08/16/2026 02:03:14 PM (3 weeks ago)
- Branches:
- main
- Children:
- 7090fd2
- Parents:
- d68ee3a
- File:
-
- 1 edited
-
test/ap-fw-track.test.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
test/ap-fw-track.test.js
rd68ee3a raebde2b 55 55 }); 56 56 57 test('geen album zolang het bij ons geen object is', () => { 58 // Een tekstkolom als URI meesturen is een adres beloven dat niet bestaat. 59 assert.equal(audio('t1').track.album, undefined); 57 test('een track zonder uitgave draagt GEEN album', () => { 58 // Dit stond er in stap 1 als "nog geen album, want we hebben er geen object 59 // voor". Sinds stap 2 hebben we dat wel -- de album-playlist -- en is de regel 60 // scherper: geen uitgave, geen veld. De tekstkolom `album` op de track blijft 61 // buiten de draad, want dat is een label en geen adres. 62 db.prepare("INSERT INTO media (id, site_id, filename, storage_path, mime_type, size) VALUES ('m9','s1','los.mp3','a/los.mp3','audio/mpeg',10)").run(); 63 db.prepare("INSERT INTO audio_tracks (id, site_id, title, album, media_id, fedi_open) VALUES ('t9','s1','Losse track','Een Albumnaam','m9',1)").run(); 64 const a = audio('t9'); 65 assert.equal(a.track.album, undefined, 'een albumNAAM is geen album'); 66 assert.equal(a.album, undefined); 60 67 }); 61 68 … … 136 143 db.prepare("UPDATE sites SET mb_artist_id = NULL WHERE id = 's1'").run(); 137 144 }); 145 146 // ── het album ingesloten (shaer-756s, stap 2) ──────────────────────── 147 // 148 // Hun TrackSerializer heeft `album = AlbumSerializer()`: een OBJECT met name, 149 // published en een eigen artist_credit. Een kale URI expandeert naar een knoop 150 // met alleen een @id en valt daar af -- dat is precies waarom Emissary's tracks 151 // bij Funkwhale ook stranden. 152 153 db.prepare(`INSERT INTO playlists (id, site_id, title, artist, year, cover_url, kind, release_date, mb_release_id, created_at) 154 VALUES ('de-plaat','s1','De Plaat','De Band',2024,'/media/hoes.jpg','album','2024-03-15','7c5a9b2e-1111-4222-8333-944455556666','2026-01-01T00:00:00Z')`).run(); 155 db.prepare("INSERT INTO playlist_tracks (playlist_id, track_id, position) VALUES ('de-plaat','t1',1)").run(); 156 // t2 zit in een MIXTAPE en hoort dus geen album te krijgen. 157 db.prepare("INSERT INTO playlists (id, site_id, title, kind) VALUES ('de-mix','s1','De Mix','playlist')").run(); 158 db.prepare("INSERT INTO playlist_tracks (playlist_id, track_id, position) VALUES ('de-mix','t2',1)").run(); 159 160 test('een track op een uitgave draagt het album als OBJECT', () => { 161 const a = audio('t1'); 162 const al = a.track.album; 163 assert.ok(al && typeof al === 'object', 'album is geen object'); 164 assert.equal(al.type, 'Album'); 165 assert.equal(al.id, `${BASE}/ap/users/band/playlists/de-plaat`, 'het id is de bestaande collectie'); 166 assert.equal(al.name, 'De Plaat'); 167 assert.ok(al.published, 'MusicEntitySerializer eist published'); 168 assert.equal(al.released, '2024-03-15'); 169 assert.equal(al.musicbrainzId, '7c5a9b2e-1111-4222-8333-944455556666'); 170 assert.ok(Array.isArray(al.artist_credit) && al.artist_credit.length >= 1, 'album zonder artist_credit'); 171 assert.equal(al.image.type, 'Image'); 172 // Ook als URI op de Audio zelf -- Funkwhale 2.0 en Emissary doen dat allebei. 173 assert.equal(a.album, al.id); 174 }); 175 176 test('een track in een MIXTAPE krijgt geen album', () => { 177 // Een afspeellijst is geen uitgave. Zou hij hier een album krijgen, dan was 178 // het onderscheid album/playlist decoratie. 179 const a = audio('t2'); 180 assert.equal(a.track.album, undefined); 181 assert.equal(a.album, undefined); 182 }); 183 184 test('track en album delen dezelfde artiest', () => { 185 // Twee keer los bouwen is hoe ze uit elkaar gaan lopen; er is een functie. 186 const a = audio('t1'); 187 assert.deepEqual(a.track.artist_credit[0].artist, a.track.album.artist_credit[0].artist); 188 }); 189 190 test('de playlist-collectie draagt de albumvelden, met type als STRING', () => { 191 const pl = db.prepare("SELECT * FROM playlists WHERE id = 'de-plaat'").get(); 192 const col = AP.buildPlaylistCollection(BASE, site, pl, AP.playlistOpenTracks('de-plaat')); 193 assert.equal(typeof col.type, 'string', 'een array breekt lezers die type als tekst uitpakken'); 194 assert.equal(col.type, 'OrderedCollection'); 195 assert.equal(col.released, '2024-03-15'); 196 assert.equal(col.musicbrainzId, '7c5a9b2e-1111-4222-8333-944455556666'); 197 assert.ok(col.artist_credit); 198 }); 199 200 test('een mixtape-collectie krijgt GEEN albumvelden', () => { 201 const pl = db.prepare("SELECT * FROM playlists WHERE id = 'de-mix'").get(); 202 const col = AP.buildPlaylistCollection(BASE, site, pl, AP.playlistOpenTracks('de-mix')); 203 assert.equal(col.released, undefined); 204 assert.equal(col.artist_credit, undefined); 205 });
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)