84 lines
3.9 KiB
JavaScript
84 lines
3.9 KiB
JavaScript
// 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)));
|
||
|
|
});
|
||
|
|
});
|