Files
AtreidesAssetsFree/tests/ui/table-view-cfg.test.mjs
T

84 lines
3.9 KiB
JavaScript
Raw Normal View History

2026-10-29 11:57:29 +01:00
// Generated, do not edit. sha256:343dcdbc15ae356dbb8783f015151f9b7adeb88cf1b2d498ee256dd978f6bd8e
import { describe, it, beforeEach, mock } from 'node:test';
import assert from 'node:assert/strict';
const opslag = new Map();
const sleutel = (scope, key) => `${scope}::${key}`;
mock.module('../../client/data/_rpc.js', {
namedExports: {
async rpc(module, functie, ...args) {
if (module !== 'preferences') throw new Error(`onverwachte module in deze test: ${module}`);
if (functie === 'getPref') {
const [scope, key, fallback] = args;
return opslag.has(sleutel(scope, key)) ? opslag.get(sleutel(scope, key)) : fallback;
}
if (functie === 'setPref') {
const [scope, key, waarde] = args;
opslag.set(sleutel(scope, key), waarde);
return null;
}
throw new Error(`onverwachte functie in deze test: ${functie}`);
},
decodeer: v => v,
setRowGuard() {},
rowGuardAan: () => false,
},
});
const { tableViewCfg } = await import('../../client/data/preferences.js');
beforeEach(() => opslag.clear());
describe('tableViewCfg', () => {
it('geeft de meegegeven standaardsortering als er nog niets bewaard is', async () => {
const cfg = await tableViewCfg('trades', { key: 'occurredAt', dir: 'desc' });
assert.deepEqual(cfg.sort, { key: 'occurredAt', dir: 'desc' });
assert.equal(cfg.group, null);
assert.deepEqual(cfg.groupFilter, {});
assert.deepEqual(cfg.groupCollapsed, {});
});
it('vult de nieuwere sleutels aan die een oudere bewaarde stand nog niet had', async () => {
opslag.set(sleutel('table.trades', 'view'),
{ sort: { key: 'amount', dir: 'asc' }, group: 'kind', groupFilter: { kind: ['buy'] } });
const cfg = await tableViewCfg('trades', { key: 'occurredAt', dir: 'desc' });
assert.deepEqual(cfg.sort, { key: 'amount', dir: 'asc' }, 'de bewaarde sortering wint');
assert.equal(cfg.group, 'kind');
assert.deepEqual(cfg.groupFilter, { kind: ['buy'] });
assert.deepEqual(cfg.groupCollapsed, {}, 'de ontbrekende sleutel wordt aangevuld');
assert.equal(cfg.group2, null);
assert.equal(cfg.group3, null);
});
it('geeft de standaardsortering MEE, ook als er een bewaarde stand is', async () => {
opslag.set(sleutel('table.trades', 'view'), { sort: { key: 'weg', dir: 'asc' }, group: null });
const cfg = await tableViewCfg('trades', { key: 'occurredAt', dir: 'desc' });
assert.deepEqual(cfg.defaultSort, { key: 'occurredAt', dir: 'desc' });
});
it('schrijft een wijziging terug via onStateChange', async () => {
const cfg = await tableViewCfg('trades', null);
await cfg.onStateChange({ sort: null, group: 'kind', group2: null, group3: null, groupFilter: {}, groupCollapsed: { kind: ['buy'] } });
assert.deepEqual(opslag.get(sleutel('table.trades', 'view')).groupCollapsed, { kind: ['buy'] });
});
it('negeert met een vaste groepering de bewaarde stand en schrijft niets terug', async () => {
opslag.set(sleutel('table.trades', 'view'),
{ sort: { key: 'amount', dir: 'asc' }, group: 'kind', groupFilter: { kind: ['buy'] } });
opslag.set(sleutel('table.trades', 'sticky'), { loc: 3 });
const cfg = await tableViewCfg('trades', { key: 'occurredAt', dir: 'desc' }, 'assetId');
assert.deepEqual(cfg.sort, { key: 'occurredAt', dir: 'desc' }, 'de standaard, niet de bewaarde');
assert.equal(cfg.group, 'assetId');
assert.equal(cfg.groupChoice, false);
assert.equal(cfg.groupFilter, undefined, 'geen bewaard filter');
assert.equal(cfg.onStateChange, undefined, 'er wordt niets teruggeschreven');
assert.deepEqual(cfg.sticky, { loc: 3 }, 'de laatst gebruikte waarden van een nieuwe regel blijven');
});
it('laat een mislukte schrijfactie de tabel niet breken', async () => {
const cfg = await tableViewCfg('trades', null);
const stuk = { get sort() { throw new Error('kapot'); } };
await assert.doesNotReject(() => Promise.resolve(cfg.onStateChange(stuk)));
});
});