teach/test/assignment-composer.test.js
Ramon 043831e1dd
All checks were successful
dev - build & deploy naar test / build-and-deploy (push) Successful in 1m28s
feat: make assignments independent from boards
2026-07-25 22:15:52 +02:00

49 lines
2.3 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
test('leerkracht bouwt visueel een reeks en geeft die in één actie aan meerdere doelgroepen', async () => {
const [cast, admin, css, core, ...wordWidgets] = await Promise.all([
readFile('public/js/cast.js', 'utf8'),
readFile('public/js/admin.js', 'utf8'),
readFile('public/css/teach.css', 'utf8'),
readFile('public/js/core.js', 'utf8'),
readFile('public/js/widgets/letters.js', 'utf8'),
readFile('public/js/widgets/flits.js', 'utf8'),
readFile('public/js/widgets/hak.js', 'utf8'),
readFile('public/js/widgets/ball.js', 'utf8'),
]);
assert.match(cast, /castShareKind\s*=\s*"path"/);
assert.match(cast, /castSelectedTargets\s*=\s*new Set/);
assert.match(cast, /assignmentLibraryWidgets\(\)[\s\S]*REGISTRY\.filter/);
assert.match(cast, /castThemeCatalog[\s\S]*languageThemeList[\s\S]*THEMES\[LANG\]/);
assert.match(cast, /cast-widget-card/);
assert.match(cast, /castPathSteps\.push/);
assert.match(cast, /slice\(0,12-castPathSteps\.length\)/);
assert.match(cast, /widgetType:step\.widgetType[\s\S]*theme:castThemePayload/);
assert.doesNotMatch(cast, /currentBoardWidgets/);
assert.match(cast, /castPupilCoveredByClass/);
assert.match(cast, /Promise\.allSettled\(targets\.map/);
assert.match(cast, /castSendSelected/);
assert.match(admin, /assignment-composer-cta[\s\S]*btnCast/);
assert.match(css, /cast-widget-grid[\s\S]*cast-path-step[\s\S]*cast-target-grid/);
assert.match(css, /cast-sendbar\{position:sticky/);
assert.match(css, /@media \(max-width:700px\)[\s\S]*cast-composer-sheet/);
for (const widget of wordWidgets) {
assert.match(widget, /assignmentWords/);
assert.match(widget, /assignmentThemeName/);
assert.match(widget, /srcSel\.disabled=true/);
}
for (const key of [
'castIntro', 'castLibrarySubtitle', 'castKindPath', 'castLiveStateHint',
'castWidgetLibrary', 'castSequenceOrder', 'castTheme', 'castThemeNone',
'castBuiltInThemes', 'castOwnThemes', 'castIndependentStep',
'castAudienceTitle', 'castSelectVisible', 'castSend', 'castSent',
'castNeedPath', 'castNeedTarget', 'castOpenComposer',
]) {
assert.equal(core.split(`${key}:`).length - 1, 2, `${key} moet tweetalig zijn`);
}
});