Files
2026-10-29 11:57:29 +01:00

107 lines
4.0 KiB
JavaScript

// Generated, do not edit. sha256:3ce212b10cde11e15f4155e3be716fe82cb375098c6eff82a6ff3030ea67f950
import { describe, it, beforeEach, mock } from 'node:test';
import assert from 'node:assert/strict';
let opgeslagen;
let bewaardeWaarde;
let leesFout = false;
mock.module('../../client/data/preferences.js', {
namedExports: {
async getPref(scope, key, fallback) {
if (leesFout) throw new Error('database weg');
return bewaardeWaarde === undefined ? fallback : bewaardeWaarde;
},
async setPref(scope, key, value) { opgeslagen = { scope, key, value }; },
},
});
const { expanders } = await import('../../client/ui/expand.js');
beforeEach(() => { opgeslagen = undefined; bewaardeWaarde = undefined; leesFout = false; });
describe('expanders: de standaard en de keuze', () => {
it('volgt de standaard zolang de gebruiker niets koos', async () => {
const e = await expanders('ai', { connect: true, dryRun: false });
assert.equal(e.open('connect'), true);
assert.equal(e.open('dryRun'), false);
});
it('laat de keuze van de gebruiker vóór de standaard gaan', async () => {
bewaardeWaarde = { connect: false, dryRun: true };
const e = await expanders('ai', { connect: true, dryRun: false });
assert.equal(e.open('connect'), false, 'de gebruiker klapte dit kader dicht');
assert.equal(e.open('dryRun'), true, 'en dit kader open');
});
it('vult aan met de standaard voor een kader dat nog niet bewaard is', async () => {
bewaardeWaarde = { connect: false };
const e = await expanders('ai', { connect: true, dryRun: true });
assert.equal(e.open('dryRun'), true);
});
it('valt terug op de standaard als het lezen mislukt', async () => {
leesFout = true;
const e = await expanders('ai', { connect: true });
assert.equal(e.open('connect'), true, 'view-state mag een pagina niet tegenhouden');
});
it('negeert een bewaarde waarde die geen object is', async () => {
bewaardeWaarde = 'kapot';
const e = await expanders('ai', { connect: true });
assert.equal(e.open('connect'), true);
});
});
describe('expanders: de attributen voor de markup', () => {
it('zet open alleen bij een open kader', async () => {
bewaardeWaarde = { connect: true, dryRun: false };
const e = await expanders('ai', {});
assert.equal(e.attr('connect'), 'data-expand="connect" open');
assert.equal(e.attr('dryRun'), 'data-expand="dryRun"');
});
it('draagt de naam mee, want daarop wordt de stand onthouden', async () => {
const e = await expanders('ai', {});
assert.match(e.attr('watDanOok'), /data-expand="watDanOok"/);
});
});
describe('expanders: het wegschrijven', () => {
function nepKader(naam, open) {
const luisteraars = [];
return {
dataset: { expand: naam },
open,
addEventListener(soort, fn) { if (soort === 'toggle') luisteraars.push(fn); },
klap(nieuw) { this.open = nieuw; luisteraars.forEach(fn => fn()); },
};
}
const nepHost = kaders => ({ querySelectorAll: () => kaders });
it('schrijft de hele stand weg onder de paginasleutel', async () => {
const e = await expanders('ai', { connect: true, dryRun: false });
const kader = nepKader('dryRun', false);
e.bind(nepHost([kader]));
kader.klap(true);
assert.equal(opgeslagen.scope, 'expand');
assert.equal(opgeslagen.key, 'ai');
assert.deepEqual(opgeslagen.value, { connect: true, dryRun: true },
'de andere kaders horen mee te gaan, anders wist elke klap de rest');
});
it('luistert op toggle en niet op een klik, zodat het toetsenbord ook telt', async () => {
const e = await expanders('ai', {});
const kader = nepKader('connect', false);
let soorten = [];
kader.addEventListener = (soort, fn) => { soorten.push(soort); if (soort === 'toggle') fn(); };
e.bind(nepHost([kader]));
assert.deepEqual(soorten, ['toggle']);
});
it('doet niets bij een host die er niet is', async () => {
const e = await expanders('ai', {});
assert.doesNotThrow(() => e.bind(null));
});
});