| 1 | // Uitgavevelden op een album-playlist (shaer-756s, stap 1).
|
|---|
| 2 | //
|
|---|
| 3 | // Twee kolommen die ALLEEN bij kind='album' horen: een volledige
|
|---|
| 4 | // uitgavedatum en een MusicBrainz release-id. Ze bestaan omdat hun
|
|---|
| 5 | // AlbumSerializer `released` als DateField leest en wij alleen `year` hadden --
|
|---|
| 6 | // en een jaartal als 2024-01-01 versturen is een dag verzinnen.
|
|---|
| 7 | //
|
|---|
| 8 | // Wat hier vooral getest wordt is wat er NIET binnenkomt. Het scherm verbergt
|
|---|
| 9 | // de velden bij een afspeellijst, maar de API ligt open (de post-editor gebruikt
|
|---|
| 10 | // hem ook), en een scherm is geen bewaking.
|
|---|
| 11 | import { test } from 'node:test';
|
|---|
| 12 | import assert from 'node:assert/strict';
|
|---|
| 13 |
|
|---|
| 14 | process.env.DATABASE_PATH = ':memory:';
|
|---|
| 15 |
|
|---|
| 16 | const dbMod = await import('../src/config/database.js');
|
|---|
| 17 | const db = dbMod.default;
|
|---|
| 18 | dbMod.initializeDatabase();
|
|---|
| 19 | const { default: PlaylistService } = await import('../src/services/PlaylistService.js');
|
|---|
| 20 |
|
|---|
| 21 | db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
|
|---|
| 22 | .run('u1', 'u1', 'u1@t', 'x', 'god');
|
|---|
| 23 | db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)')
|
|---|
| 24 | .run('s1', 'band', 'De Band', 'u1');
|
|---|
| 25 |
|
|---|
| 26 | const rij = (id) => db.prepare('SELECT * FROM playlists WHERE id = ?').get(id);
|
|---|
| 27 |
|
|---|
| 28 | test('een album bewaart een volledige datum en een release-id', () => {
|
|---|
| 29 | const id = PlaylistService.create('s1', {
|
|---|
| 30 | title: 'De Plaat', kind: 'album',
|
|---|
| 31 | release_date: '2024-03-15', mb_release_id: '5441C29D-3602-4898-B1A1-B77FA23B8E50',
|
|---|
| 32 | });
|
|---|
| 33 | const r = rij(id);
|
|---|
| 34 | assert.equal(r.release_date, '2024-03-15');
|
|---|
| 35 | assert.equal(r.mb_release_id, '5441c29d-3602-4898-b1a1-b77fa23b8e50', 'mbid gaat naar kleine letters');
|
|---|
| 36 | });
|
|---|
| 37 |
|
|---|
| 38 | test('een halve datum wordt NIET aangevuld', () => {
|
|---|
| 39 | // Dit is de hele reden dat het veld bestaat naast `year`. Zou hij hier
|
|---|
| 40 | // 2024-01-01 van maken, dan stond er een dag op de federatie die niemand
|
|---|
| 41 | // heeft ingevoerd.
|
|---|
| 42 | for (const slecht of ['2024', '2024-03', '15-03-2024', 'maart 2024', '']) {
|
|---|
| 43 | const id = PlaylistService.create('s1', { title: `T${slecht || 'leeg'}`, kind: 'album', release_date: slecht });
|
|---|
| 44 | assert.equal(rij(id).release_date, null, `"${slecht}" had geweigerd moeten worden`);
|
|---|
| 45 | }
|
|---|
| 46 | });
|
|---|
| 47 |
|
|---|
| 48 | test('een bestaande maar onmogelijke datum wordt geweigerd', () => {
|
|---|
| 49 | // Date rolt 2024-02-31 stilletjes door naar 2 maart; dan sla je iets anders
|
|---|
| 50 | // op dan er ingetypt is.
|
|---|
| 51 | const id = PlaylistService.create('s1', { title: 'Onmogelijk', kind: 'album', release_date: '2024-02-31' });
|
|---|
| 52 | assert.equal(rij(id).release_date, null);
|
|---|
| 53 | });
|
|---|
| 54 |
|
|---|
| 55 | test('een onzin-release-id wordt geweigerd', () => {
|
|---|
| 56 | const id = PlaylistService.create('s1', { title: 'Onzin', kind: 'album', mb_release_id: 'niet-een-mbid' });
|
|---|
| 57 | assert.equal(rij(id).mb_release_id, null);
|
|---|
| 58 | });
|
|---|
| 59 |
|
|---|
| 60 | test('een AFSPEELLIJST krijgt ze niet, ook niet als je ze meestuurt', () => {
|
|---|
| 61 | const id = PlaylistService.create('s1', {
|
|---|
| 62 | title: 'De Mix', kind: 'playlist',
|
|---|
| 63 | release_date: '2024-03-15', mb_release_id: '5441c29d-3602-4898-b1a1-b77fa23b8e50',
|
|---|
| 64 | });
|
|---|
| 65 | const r = rij(id);
|
|---|
| 66 | assert.equal(r.release_date, null);
|
|---|
| 67 | assert.equal(r.mb_release_id, null);
|
|---|
| 68 | });
|
|---|
| 69 |
|
|---|
| 70 | test('omschakelen naar afspeellijst MAAKT ze leeg', () => {
|
|---|
| 71 | // Anders houdt een album dat je tot mixtape ombouwt zijn uitgavedatum, en
|
|---|
| 72 | // duikt die weer op zodra iemand hem terugzet.
|
|---|
| 73 | const id = PlaylistService.create('s1', {
|
|---|
| 74 | title: 'Wordt Mix', kind: 'album', release_date: '2024-03-15',
|
|---|
| 75 | mb_release_id: '5441c29d-3602-4898-b1a1-b77fa23b8e50',
|
|---|
| 76 | });
|
|---|
| 77 | assert.equal(rij(id).release_date, '2024-03-15');
|
|---|
| 78 | PlaylistService.update('s1', id, { kind: 'playlist' }); // zegt niets over de velden
|
|---|
| 79 | const r = rij(id);
|
|---|
| 80 | assert.equal(r.release_date, null, 'uitgavedatum bleef staan op een afspeellijst');
|
|---|
| 81 | assert.equal(r.mb_release_id, null);
|
|---|
| 82 | });
|
|---|
| 83 |
|
|---|
| 84 | test('bijwerken zonder de velden te noemen laat ze met rust', () => {
|
|---|
| 85 | const id = PlaylistService.create('s1', { title: 'Blijft', kind: 'album', release_date: '2024-03-15' });
|
|---|
| 86 | PlaylistService.update('s1', id, { title: 'Blijft Ook' });
|
|---|
| 87 | assert.equal(rij(id).release_date, '2024-03-15');
|
|---|
| 88 | });
|
|---|
| 89 |
|
|---|
| 90 | test('get en list geven de velden door, en houden ze leeg bij een afspeellijst', () => {
|
|---|
| 91 | const a = PlaylistService.create('s1', { title: 'Uitgave', kind: 'album', release_date: '2024-03-15' });
|
|---|
| 92 | assert.equal(PlaylistService.get('s1', a).release_date, '2024-03-15');
|
|---|
| 93 | const inLijst = PlaylistService.list('s1').find((p) => p.id === a);
|
|---|
| 94 | assert.equal(inLijst.release_date, '2024-03-15');
|
|---|
| 95 |
|
|---|
| 96 | // Rechtstreeks in de kolom zetten op een afspeellijst -- zoals een oude rij
|
|---|
| 97 | // eruit zou kunnen zien. Het leespad hoort dat niet door te geven.
|
|---|
| 98 | const m = PlaylistService.create('s1', { title: 'Mix2', kind: 'playlist' });
|
|---|
| 99 | db.prepare("UPDATE playlists SET release_date = '2024-01-01' WHERE id = ?").run(m);
|
|---|
| 100 | assert.equal(PlaylistService.get('s1', m).release_date, '');
|
|---|
| 101 | });
|
|---|