| 1 | // Welk soort uitgave is een post? (shaer-cyg)
|
|---|
| 2 | //
|
|---|
| 3 | // De regel gaat over IDENTITEIT en niet over tellen: een post neemt het type
|
|---|
| 4 | // van zijn muziek over als hij precies EEN muzikale eenheid bevat. Zijn het er
|
|---|
| 5 | // meer, dan is de post een post die naar muziek verwijst en houden de
|
|---|
| 6 | // collecties hun eigen identiteit -- en vervalt de reden om de posttitel en
|
|---|
| 7 | // -cover te lenen.
|
|---|
| 8 | import { test } from 'node:test';
|
|---|
| 9 | import assert from 'node:assert/strict';
|
|---|
| 10 |
|
|---|
| 11 | process.env.DATABASE_PATH = ':memory:';
|
|---|
| 12 | process.env.PUBLIC_BASE_URL = 'https://test.example';
|
|---|
| 13 |
|
|---|
| 14 | const dbMod = await import('../src/config/database.js');
|
|---|
| 15 | dbMod.initializeDatabase();
|
|---|
| 16 | const { postMusicType } = await import('../src/services/music/index.js');
|
|---|
| 17 |
|
|---|
| 18 | test('geen muziek: geen type', () => {
|
|---|
| 19 | assert.equal(postMusicType('<p>gewoon een bericht</p>'), null);
|
|---|
| 20 | assert.equal(postMusicType(''), null);
|
|---|
| 21 | assert.equal(postMusicType(null), null);
|
|---|
| 22 | });
|
|---|
| 23 |
|
|---|
| 24 | test('losse tracks worden een playlist, en lenen de metadata van de post', () => {
|
|---|
| 25 | const r = postMusicType('Twee nieuwe: [[track:a]] en [[track:b]]');
|
|---|
| 26 | assert.equal(r.type, 'playlist');
|
|---|
| 27 | assert.deepEqual(r.tracks, ['a', 'b']);
|
|---|
| 28 | assert.equal(r.leentMetadata, true);
|
|---|
| 29 | });
|
|---|
| 30 |
|
|---|
| 31 | test('ook EEN losse track wordt een playlist', () => {
|
|---|
| 32 | // Naar buiten toe is er dan altijd een collectie om naar te wijzen. Dat
|
|---|
| 33 | // "Playlist" boven een enkel nummer gek leest is een weergavekwestie.
|
|---|
| 34 | assert.equal(postMusicType('[[track:a]]').type, 'playlist');
|
|---|
| 35 | });
|
|---|
| 36 |
|
|---|
| 37 | test('een playlist blijft een playlist', () => {
|
|---|
| 38 | const r = postMusicType('Nieuw: [[playlist:nachtlicht]]');
|
|---|
| 39 | assert.equal(r.type, 'playlist');
|
|---|
| 40 | assert.deepEqual(r.collectie, { soort: 'playlist', id: 'nachtlicht' });
|
|---|
| 41 | assert.equal(r.leentMetadata, true);
|
|---|
| 42 | });
|
|---|
| 43 |
|
|---|
| 44 | test('een album-insluiting is ook een collectie, en telt als album', () => {
|
|---|
| 45 | // Robins regel noemde alleen playlists; [[album:naam]] groepeert net zo goed
|
|---|
| 46 | // tracks. Hem als losse tracks tellen zou een albumpost tot playlist maken.
|
|---|
| 47 | const r = postMusicType('Luister [[album:De Plaat]]');
|
|---|
| 48 | assert.equal(r.type, 'album');
|
|---|
| 49 | assert.deepEqual(r.collectie, { soort: 'album', naam: 'De Plaat' });
|
|---|
| 50 | });
|
|---|
| 51 |
|
|---|
| 52 | test('een collectie MET losse tracks is een album, en die losse zijn bonus', () => {
|
|---|
| 53 | const r = postMusicType('[[playlist:nachtlicht]] plus [[track:x]] en [[track:y]]');
|
|---|
| 54 | assert.equal(r.type, 'album');
|
|---|
| 55 | assert.equal(r.collectie.id, 'nachtlicht');
|
|---|
| 56 | assert.deepEqual(r.bonus, ['x', 'y'], 'geen rommelrestje maar bonus-tracks');
|
|---|
| 57 | assert.deepEqual(r.tracks, [], 'de losse zitten in bonus, niet twee keer');
|
|---|
| 58 | assert.equal(r.leentMetadata, true);
|
|---|
| 59 | });
|
|---|
| 60 |
|
|---|
| 61 | test('TWEE collecties: de post blijft een post en leent niets', () => {
|
|---|
| 62 | const r = postMusicType('[[playlist:een]] en ook [[playlist:twee]]');
|
|---|
| 63 | assert.equal(r.type, 'post');
|
|---|
| 64 | assert.equal(r.collecties.length, 2);
|
|---|
| 65 | assert.equal(r.leentMetadata, false,
|
|---|
| 66 | 'bij twee is de post niet meer de drager van EEN identiteit');
|
|---|
| 67 | });
|
|---|
| 68 |
|
|---|
| 69 | test('twee collecties van verschillende soort tellen ook als twee', () => {
|
|---|
| 70 | const r = postMusicType('[[playlist:een]] naast [[album:De Plaat]]');
|
|---|
| 71 | assert.equal(r.type, 'post');
|
|---|
| 72 | assert.equal(r.collecties.length, 2);
|
|---|
| 73 | });
|
|---|
| 74 |
|
|---|
| 75 | test('dezelfde insluiting twee keer is EEN collectie', () => {
|
|---|
| 76 | // Anders maakt een herhaalde shortcode van een albumpost stilletjes een
|
|---|
| 77 | // gewone post.
|
|---|
| 78 | const r = postMusicType('[[playlist:een]] ... en nog eens [[playlist:een]]');
|
|---|
| 79 | assert.equal(r.type, 'playlist');
|
|---|
| 80 | assert.equal(r.collectie.id, 'een');
|
|---|
| 81 | });
|
|---|
| 82 |
|
|---|
| 83 | test('dezelfde track twee keer telt ook maar een keer', () => {
|
|---|
| 84 | assert.deepEqual(postMusicType('[[track:a]] [[track:a]] [[track:b]]').tracks, ['a', 'b']);
|
|---|
| 85 | });
|
|---|