28 lines
1.7 KiB
JavaScript
28 lines
1.7 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {readFileSync} from 'node:fs';
|
|
import {execFileSync} from 'node:child_process';
|
|
import {slides} from '../presentations/less-prompting-more-shipping/slides.mjs';
|
|
const read=p=>readFileSync(p,'utf8');
|
|
test('deck preserves assignment coverage, 35+15 timing and traceable notes',()=>{
|
|
assert.equal(slides.length,19); assert.equal(new Set(slides.map(s=>s.id)).size,19);
|
|
assert.equal(slides.slice(0,17).reduce((n,s)=>n+s.minutes,0),35);
|
|
assert.equal(slides[17].minutes,15); assert.equal(slides[18].minutes,0);
|
|
for(const s of slides){assert(s.sources.length);assert(s.notes.length>250);assert(s.body.length);}
|
|
for(const id of ['months-one-two','months-three-four','months-five-six','measures','month-six','beyond']) assert(slides.some(s=>s.id===id));
|
|
for(const id of ['experiment','inconclusive','stop']) assert.match(slides.find(s=>s.id===id).body,/fictional/i);
|
|
assert.match(slides.find(s=>s.id==='qualification').notes,/separately authorizes/);
|
|
});
|
|
test('build emits local pinned Reveal assets, stable IDs and no production CDN',()=>{
|
|
execFileSync(process.execPath,['scripts/build-presentations.mjs']);
|
|
const dir='static/presentations/less-prompting-more-shipping'; const html=read(`${dir}/index.html`);
|
|
assert.equal((html.match(/<section /g)||[]).length,19);
|
|
assert.equal((html.match(/class="notes"/g)||[]).length,19);
|
|
assert(!/https?:\/\//.test(html));
|
|
assert.match(html,/href="\.\.\/\.\.\/strategy\/target-operating-model\/"/);
|
|
assert.match(read(`${dir}/assets/reveal.js`),/5\.2\.1/);
|
|
assert.match(read(`${dir}/runtime.js`),/hash:true/);
|
|
assert.equal(JSON.parse(read('package.json')).dependencies['reveal.js'],'5.2.1');
|
|
assert.match(read('src/pages/index.tsx'),/Open presentation/);
|
|
});
|