117 lines
5.8 KiB
JavaScript
117 lines
5.8 KiB
JavaScript
// Generated, do not edit. sha256:1af8cbc83fbd3f045e8613c13a26b6a23e68ea741a3545d1ba4e3de41d66fee7
|
|||
|
|
import { describe, it } from 'node:test';
|
||
|
|
import assert from 'node:assert/strict';
|
||
|
|
|
||
|
|
const { sameSelection, selectionFromStored } = await import('../../client/wealth/selection.js');
|
||
|
|
|
||
|
|
describe('sameSelection: is dit hetzelfde?', () => {
|
||
|
|
it('herkent dezelfde soort en dezelfde assets', () => {
|
||
|
|
assert.equal(sameSelection({ kind: 'crypto' }, { kind: 'crypto' }), true);
|
||
|
|
assert.equal(sameSelection({ assetIds: [1, 2] }, { assetIds: [1, 2] }), true);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('ziet een andere volgorde als iets ánders', () => {
|
||
|
|
assert.equal(sameSelection({ assetIds: [1, 2] }, { assetIds: [2, 1] }), false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('SCHEIDT EEN SOORT VAN EEN LIJST ASSETS, ook als die soort precies die assets bevat', () => {
|
||
|
|
assert.equal(sameSelection({ kind: 'crypto' }, { assetIds: [1] }), false);
|
||
|
|
assert.equal(sameSelection({ assetIds: [1] }, { kind: 'crypto' }), false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('behandelt null als een echte stand', () => {
|
||
|
|
assert.equal(sameSelection(null, null), true);
|
||
|
|
assert.equal(sameSelection(null, { kind: 'crypto' }), false);
|
||
|
|
assert.equal(sameSelection({ kind: 'crypto' }, null), false);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('selectionFromStored: wat er uit de voorkeuren komt', () => {
|
||
|
|
it('leest de twee geldige vormen', () => {
|
||
|
|
assert.deepEqual(selectionFromStored({ kind: 'metal' }), { kind: 'metal' });
|
||
|
|
assert.deepEqual(selectionFromStored({ assetIds: [3, 4] }), { assetIds: [3, 4] });
|
||
|
|
});
|
||
|
|
|
||
|
|
it('MAAKT ER GETALLEN VAN, ook als er tekst opgeslagen stond', () => {
|
||
|
|
assert.deepEqual(selectionFromStored({ assetIds: ['3', '4'] }), { assetIds: [3, 4] });
|
||
|
|
});
|
||
|
|
|
||
|
|
it('geeft null bij een lege of onbruikbare lijst', () => {
|
||
|
|
assert.equal(selectionFromStored({ assetIds: [] }), null);
|
||
|
|
assert.equal(selectionFromStored({ assetIds: ['x', null] }), null, 'niets dat een getal wordt');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('houdt over wat wél een getal is', () => {
|
||
|
|
assert.deepEqual(selectionFromStored({ assetIds: [3, 'x'] }), { assetIds: [3] });
|
||
|
|
});
|
||
|
|
|
||
|
|
it('GEEFT NULL BIJ ALLES WAT GEEN SELECTIE IS, in plaats van te struikelen', () => {
|
||
|
|
for (const rommel of [null, undefined, 0, '', 'crypto', 42, [], { }, { assetIds: 'crypto' }])
|
||
|
|
assert.equal(selectionFromStored(rommel), null, `bij ${JSON.stringify(rommel)}`);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('laat de soort vóór de assets gaan als er allebei iets staat', () => {
|
||
|
|
assert.deepEqual(selectionFromStored({ kind: 'crypto', assetIds: [1] }), { kind: 'crypto' });
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
const { hiddenFromStored, hiddenAfterFilter, splitHidden, hiddenKindsFromStored, accountKindItems, accountKindOf, NO_ACCOUNT_KIND } =
|
||
|
|
await import('../../client/wealth/selection.js');
|
||
|
|
|
||
|
|
describe('verborgen kaarten', () => {
|
||
|
|
it('leest alleen positieve gehele ids terug', () => {
|
||
|
|
assert.deepEqual([...hiddenFromStored([3, '5', null, 0, -1, 'x'])], [3, 5]);
|
||
|
|
assert.equal(hiddenFromStored({ ids: [1] }).size, 0, 'geen lijst: niets verborgen');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('laat bij accounts de 0 door, de kaart zonder account', () => {
|
||
|
|
assert.deepEqual([...hiddenFromStored([0, 4, -1], { allowZero: true })], [0, 4]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('bewaart na de filterbalk wat uit staat, gesorteerd', () => {
|
||
|
|
assert.deepEqual(hiddenAfterFilter(new Set(), [1, 2, 3], new Set([1, 3])), [2]);
|
||
|
|
assert.deepEqual(hiddenAfterFilter(new Set([2]), [1, 2, 3], new Set([1, 2, 3])), [], 'weer aan is weer zichtbaar');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('houdt een verborgen id zonder chip vast, zodat een andere periode hem niet terugzet', () => {
|
||
|
|
assert.deepEqual(hiddenAfterFilter(new Set([9, 2]), [1, 2], new Set([1])), [2, 9]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('verdeelt de kaarten in twee stapels die samen alles zijn, in de oorspronkelijke volgorde', () => {
|
||
|
|
const k = id => ({ asset: { id } });
|
||
|
|
const { shown, hidden } = splitHidden([k(1), k(2), k(3)], new Set([2]));
|
||
|
|
assert.deepEqual(shown.map(x => x.asset.id), [1, 3]);
|
||
|
|
assert.deepEqual(hidden.map(x => x.asset.id), [2]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('filtert per account op soort, met de kaart zonder account als eigen soort', () => {
|
||
|
|
const kaarten = [{ account: { kind: 'exchange' } }, { account: { kind: 'wallet' } }, { account: { kind: 'exchange' } }, { account: null }];
|
||
|
|
assert.deepEqual(accountKindItems(kaarten), ['exchange', 'wallet', NO_ACCOUNT_KIND], 'elke soort één keer, in de volgorde van de kaarten');
|
||
|
|
const verborgen = hiddenKindsFromStored(['wallet', 'verdwenen', 7, NO_ACCOUNT_KIND], ['exchange', 'wallet']);
|
||
|
|
assert.deepEqual([...verborgen].sort(), [NO_ACCOUNT_KIND, 'wallet']);
|
||
|
|
const { shown } = splitHidden(kaarten, verborgen, accountKindOf);
|
||
|
|
assert.equal(shown.length, 2, 'alleen de twee exchanges blijven staan');
|
||
|
|
assert.deepEqual(hiddenAfterFilter(new Set(['wallet']), ['exchange', 'wallet'], new Set(['wallet'])), ['exchange'],
|
||
|
|
'een soort weer aan is weer zichtbaar, een andere uit');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('splitst accountkaarten op hun eigen sleutel', () => {
|
||
|
|
const c = id => ({ accountId: id });
|
||
|
|
const { shown } = splitHidden([c(10), c(null)], new Set([0]), x => x.accountId ?? 0);
|
||
|
|
assert.deepEqual(shown.map(x => x.accountId), [10]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('selectie van een accountkaart', () => {
|
||
|
|
it('leest het account terug, ook de kaart zonder account en zonder assets', () => {
|
||
|
|
assert.deepEqual(selectionFromStored({ account: 7, assetIds: [1] }), { account: 7, assetIds: [1] });
|
||
|
|
assert.deepEqual(selectionFromStored({ account: 0, assetIds: [] }), { account: 0, assetIds: [] });
|
||
|
|
assert.equal(selectionFromStored({ account: -1, assetIds: [] }), null);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('ziet twee accounts met dezelfde assets als twee selecties', () => {
|
||
|
|
assert.equal(sameSelection({ account: 1, assetIds: [5] }, { account: 2, assetIds: [5] }), false);
|
||
|
|
assert.equal(sameSelection({ account: 1, assetIds: [5] }, { account: 1, assetIds: [5] }), true);
|
||
|
|
assert.equal(sameSelection({ account: 1, assetIds: [5] }, { assetIds: [5] }), false);
|
||
|
|
});
|
||
|
|
});
|