106 lines
4.0 KiB
JavaScript
106 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));
|
||
|
|
});
|
||
|
|
});
|