- Timestamp:
- 08/25/2026 08:00:40 PM (2 weeks ago)
- Branches:
- main
- Children:
- 76290bf
- Parents:
- cb1bd82
- Location:
- test
- Files:
-
- 3 edited
-
c2s-title.test.js (modified) (2 diffs)
-
migrate-page.test.js (modified) (2 diffs)
-
mixtape-ui.test.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
test/c2s-title.test.js
rcb1bd82 r78b8e58 51 51 }); 52 52 53 test('zonder name blijft alles zoals het was: lege titel, geen kopregel', async () => { 54 const r = await maak({ content: '<p>gewoon een note</p>' }); 55 assert.equal(r.status, 201); 56 const post = db.prepare('SELECT * FROM posts WHERE id = ?').get(r.id); 53 test('geen echte titel blijft een lege titel: zonder name, en met alleen witruimte', async () => { 54 // Een regel met twee kanten (samengevoegd 25-8): wat er niet is, wordt niet 55 // verzonnen -- of het veld nu ontbreekt of alleen witruimte draagt. 56 const zonder = await maak({ content: '<p>gewoon een note</p>' }); 57 assert.equal(zonder.status, 201); 58 const post = db.prepare('SELECT * FROM posts WHERE id = ?').get(zonder.id); 57 59 assert.equal(post.title, '', 'geen name is een lege titel, geen undefined of null'); 58 60 const note = AP.buildNote('https://test.example', site, post); 59 assert.ok(!/<strong>/.test(note.content.split('</p>')[0] + '</p>') || !post.title, 'geen verzonnen kopregel'); 61 assert.ok(!note.content.startsWith('<p><strong>'), 'geen verzonnen kopregel'); 62 63 const wit = await maak({ name: ' ', content: '<p>z</p>' }); 64 const witPost = db.prepare('SELECT title FROM posts WHERE id = ?').get(wit.id); 65 assert.equal(witPost.title, '', 'witruimte trimt weg tot leeg'); 66 const witNote = AP.buildNote('https://test.example', site, db.prepare('SELECT * FROM posts WHERE id = ?').get(wit.id)); 67 assert.ok(!witNote.content.startsWith('<p><strong>'), 'en er komt geen lege kopregel'); 60 68 }); 61 69 … … 79 87 }); 80 88 81 test('een titel met alleen witruimte is geen titel', async () => {82 const r = await maak({ name: ' ', content: '<p>z</p>' });83 const post = db.prepare('SELECT title FROM posts WHERE id = ?').get(r.id);84 assert.equal(post.title, '', 'witruimte trimt weg tot leeg');85 const note = AP.buildNote('https://test.example', site, post);86 assert.ok(!note.content.startsWith('<p><strong>'), 'en er komt geen lege kopregel');87 }); -
test/migrate-page.test.js
rcb1bd82 r78b8e58 39 39 40 40 test('de volgorde op de pagina volgt de verhuizing: claimen eerst, aankondigen laatst', () => { 41 // Volgorde is hier INHOUD, geen layout (25-8): wie deze stappen in de 42 // verkeerde volgorde doet, breekt zijn verhuizing -- de pagina IS het 43 // stappenplan. Daarom mag deze positietoets blijven waar andere sneuvelden. 44 // De losse toets dat het stappenplan "bovenaan, voor de knoppen" staat is 45 // hierin opgegaan: dat het er IS hoort erbij, waar het staat niet. 41 46 const ejs = fs.readFileSync('src/views/pages/admin-migrate.ejs', 'utf8'); 47 assert.ok(ejs.indexOf('mig-steps') > -1, 'er hoort een stappenplan te staan'); 42 48 const alias = ejs.indexOf('name="ap_aliases"'); 43 49 const halen = ejs.indexOf('/admin/migrate/pull'); … … 67 73 68 74 // ── Het stappenplan ─────────────────────────────────────────────── 69 70 test('het stappenplan zet de volgorde vast die niemand raadt', () => {71 const ejs = fs.readFileSync('src/views/pages/admin-migrate.ejs', 'utf8');72 const plan = ejs.indexOf('mig-steps');73 const alias = ejs.indexOf('name="ap_aliases"');74 assert.ok(plan > -1, 'er hoort een stappenplan te staan');75 assert.ok(plan < alias, 'en bovenaan, voor de knoppen die het beschrijft');76 });77 75 78 76 test('"hier" draait om als je vanaf de vertrekkende kant kijkt', async () => { -
test/mixtape-ui.test.js
rcb1bd82 r78b8e58 88 88 // Het teken zat eerst in de tekst; nu staat er een echte cassette getekend en 89 89 // is het woord genoeg. De eis blijft dezelfde: hij noemt zichzelf goed. 90 assert.match(html, /class="tape-kind">Mixtape</, 'een mixtape hoort zichzelf zo te noemen'); 90 // Zonder de klassenaam erbij (25-8): WAAR het woord staat is layout, DAT het 91 // er staat is het besluit. De bron-regex-toets op de labelmap is weg om 92 // dezelfde reden: die toetste deze regel nog een keer, maar dan op de 93 // spelling van de code. 94 assert.match(html, />Mixtape</, 'een mixtape hoort zichzelf zo te noemen'); 91 95 assert.doesNotMatch(html, /💿 Album/, 'en niet het jasje van een album te dragen'); 92 });93 94 test('de renderer kiest zijn label niet meer met een tweewegkeuze', () => {95 const bron = fs.readFileSync('src/services/AudioEmbedService.js', 'utf8');96 assert.doesNotMatch(bron, /kind === 'playlist' \? '📃 Playlist' : '💿 Album'/,97 'die vorm gaf een mixtape het jasje van een album');98 assert.match(bron, /mixtape: '📼 Mixtape'/);99 96 }); 100 97 … … 110 107 const html = AudioEmbedService.embedPlaylistShortcodes('<p>[[playlist:tape]]</p>', (id) => (id === 'tape' ? pl : null)); 111 108 109 // Alleen de haken waar tape.js zich aan vastpakt (.post-tape, data-tape-go): 110 // dat is het contract tussen markup en module. De spoelen zelf zijn decor en 111 // worden hier sinds 25-8 niet meer geteld -- hoe de cassette eruitziet is 112 // layout, dat hij bedienbaar is niet. 112 113 assert.match(html, /class="post-tape"/); 113 assert.match(html, /tape-reel--left/, 'twee spoelen, anders is het geen cassette');114 assert.match(html, /tape-reel--right/);115 114 assert.match(html, /data-tape-go="back"/, 'terugspoelen'); 116 115 assert.match(html, /data-tape-go="fwd"/, 'vooruitspoelen');
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)