Files
AtreidesAssetsFree/tests/ui/vrije-ruimte.test.mjs
T

80 lines
3.1 KiB
JavaScript
Raw Normal View History

2026-10-29 11:57:29 +01:00
// Generated, do not edit. sha256:1729f1063610ec96b3aae049d2a0af2d802f2e19ff07d46ca27d855e2891faac
import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { freeRunAt, fittingCatalog, placeInRun } from '../../client/dashboard/free-space.js';
import { DASHBOARD } from '../../shared/config.js';
const LAYOUT = [
{ x: 0, y: 0, w: 3, h: 3 },
{ x: 6, y: 0, w: 4, h: 2 },
{ x: 6, y: 2, w: 4, h: 5 },
];
const hoogte = it => it.h;
describe('freeRunAt', () => {
it('geeft het vrije stuk tussen twee widgets, met de kolom onder de muis', () => {
assert.deepEqual(freeRunAt(LAYOUT, 4, 0, hoogte), { x: 3, y: 0, w: 3, col: 4 });
});
it('loopt door tot de rand van het raster', () => {
assert.deepEqual(freeRunAt(LAYOUT, 11, 1, hoogte), { x: 10, y: 1, w: 2, col: 11 });
});
it('telt de hoogte van een widget mee: rij 4 is links vrij, maar niet over de hoge widget heen', () => {
assert.deepEqual(freeRunAt(LAYOUT, 0, 4, hoogte), { x: 0, y: 4, w: 6, col: 0 });
});
it('geeft niets op een bezette plek, ook niet in de laatste rij van een widget', () => {
assert.equal(freeRunAt(LAYOUT, 1, 2, hoogte), null);
assert.equal(freeRunAt(LAYOUT, 7, 6, hoogte), null);
});
it('onder de hele indeling is de rij helemaal vrij', () => {
assert.deepEqual(freeRunAt(LAYOUT, 5, 7, hoogte), { x: 0, y: 7, w: DASHBOARD.GRID_COLUMNS, col: 5 });
});
it('geeft niets buiten het raster', () => {
assert.equal(freeRunAt(LAYOUT, -1, 0, hoogte), null);
assert.equal(freeRunAt(LAYOUT, DASHBOARD.GRID_COLUMNS, 0, hoogte), null);
assert.equal(freeRunAt(LAYOUT, 4, -1, hoogte), null);
});
});
describe('fittingCatalog', () => {
const typen = Object.entries(DASHBOARD.WIDGETS).sort((a, b) => a[1].defaultSpan - b[1].defaultSpan);
const [smal, smalDef] = typen[0];
const [breed, breedDef] = typen[typen.length - 1];
const CATALOGUS = [{ type: smal }, { type: breed }, { type: 'bestaat-niet' }];
it('biedt alleen aan wat in de vrije breedte past', () => {
assert.ok(smalDef.defaultSpan < breedDef.defaultSpan, 'de registry heeft geen twee breedtes meer');
const run = { x: 0, y: 0, w: smalDef.defaultSpan, col: 0 };
assert.deepEqual(fittingCatalog(CATALOGUS, run).map(c => c.type), [smal]);
});
it('precies even breed past nog', () => {
const run = { x: 0, y: 0, w: breedDef.defaultSpan, col: 0 };
assert.deepEqual(fittingCatalog(CATALOGUS, run).map(c => c.type), [smal, breed]);
});
it('laat een type weg dat de registry niet kent', () => {
const run = { x: 0, y: 0, w: DASHBOARD.GRID_COLUMNS, col: 0 };
assert.ok(!fittingCatalog(CATALOGUS, run).some(c => c.type === 'bestaat-niet'));
});
});
describe('placeInRun', () => {
const run = { x: 2, y: 5, w: 6, col: 4 };
it('zet de widget onder de muis', () => {
assert.deepEqual(placeInRun(run, 2), { x: 4, y: 5 });
});
it('schuift hem terug als hij rechts over het vrije stuk heen zou gaan', () => {
assert.deepEqual(placeInRun({ ...run, col: 7 }, 3), { x: 5, y: 5 });
});
it('blijft binnen het stuk, ook als de muis links ervan stond', () => {
assert.deepEqual(placeInRun({ ...run, col: 0 }, 3), { x: 2, y: 5 });
});
});