Files
AtreidesAssetsFree/tests/ui/herkomst-samenvatting.test.mjs
T
2026-10-29 11:57:29 +01:00

74 lines
4.0 KiB
JavaScript

// Generated, do not edit. sha256:aba0586264c0c6a96c6db4f231f8de0168b2d96c5e9e95d8a830ca04a1e9dd99
import { describe, it, mock } from 'node:test';
import assert from 'node:assert/strict';
mock.module('../../client/app-settings.js', { namedExports: { appSetting: k => (k === 'asset_show_name' ? 1 : 0), baseCurrency: () => 'EUR' } });
const { originSummaryLines, originLines, originsHtml } = await import('../../client/ui/price-origin.js');
const asset = (id, symbol, name, kind = 'crypto') => ({ id, symbol, name, kind, decimals: 8, unit: symbol, subunit: null, displayUnit: 'unit' });
const BTC = asset(1, 'BTC', 'Bitcoin');
const ETH = asset(2, 'ETH', 'Ether');
const GOUD = { ...asset(3, 'XAU', 'Goud', 'metal'), unit: 'ozt', subunit: 'g' };
const EUR = { ...asset(4, 'EUR', 'Euro', 'fiat'), unit: 'EUR' };
const o = (kind, extra = {}) => ({ day: '2025-01-01', fiatPrice:100, kind, ageDays: 0, deviation: null, source: 'Bron', sourceDay: '2025-01-01', moment: null, ...extra });
describe('originSummaryLines', () => {
it('telt per soort en noemt de zwakste, en die bepaalt de nauwkeurigheid', () => {
const r = originSummaryLines([
{ origin: o('close'), asset: BTC },
{ origin: o('spot'), asset: ETH },
{ origin: o('carried', { sourceDay: '2024-12-29', ageDays: 3 }), asset: GOUD },
]);
assert.equal(r[0], 'Rust op 3 koersen');
assert.equal(r[1], '1 slotkoers, 1 afgeleid, 1 doorgetrokken');
assert.match(r[2], /^Zwakste: Goud, doorgetrokken van 29 dec\.? 2024 \(Bron\), 3 dagen oud$/);
assert.equal(r.at(-1), 'Nauwkeurigheid: laag');
});
it('noemt geen zwakste als alles sterk is', () => {
const r = originSummaryLines([{ origin: o('close'), asset: BTC }, { origin: o('live'), asset: ETH }]);
assert.deepEqual(r, ['Rust op 2 koersen', '1 slotkoers, 1 vandaag', 'Nauwkeurigheid: hoog']);
});
it('kiest van twee doorgetrokken koersen de oudste als zwakste', () => {
const r = originSummaryLines([
{ origin: o('carried', { ageDays: 2 }), asset: BTC },
{ origin: o('carried', { ageDays: 9 }), asset: ETH },
]);
assert.match(r[2], /^Zwakste: Ether, /);
assert.equal(r[1], '2 doorgetrokken');
});
it('telt hetzelfde asset op twee rekeningen als één koers, en geeft dan de gewone herkomst', () => {
const r = originSummaryLines([{ origin: o('close'), asset: BTC }, { origin: o('close'), asset: BTC }]);
assert.deepEqual(r, originLines(o('close'), BTC));
});
it('laat de euro weg en geeft niets als er niets is', () => {
assert.equal(originSummaryLines([{ origin: o('close'), asset: EUR }]).length, 0);
assert.equal(originsHtml([]), '');
});
it('noemt een post zonder koers naast één met, en zegt bij welke asset de koers hoort', () => {
const r = originSummaryLines([{ origin: o('close'), asset: GOUD }, { origin: null, asset: ETH }]);
assert.match(r[0], /^Goud: Koers /);
assert.equal(r[1], 'Slotkoers van Bron');
assert.equal(r.at(-2), 'Geen koers voor Ether: telt als nul mee');
assert.equal(r.at(-1), 'Nauwkeurigheid: onvolledig');
assert.ok(!r.includes('Nauwkeurigheid: hoog'), 'geen tweede, tegenstrijdige nauwkeurigheid');
});
it('noemt een ontbrekende post ook naast meerdere koersen, en ook als er geen enkele koers is', () => {
const r = originSummaryLines([{ origin: o('close'), asset: BTC }, { origin: o('close'), asset: GOUD },
{ origin: { ...o('close'), fiatPrice:null }, asset: ETH }, { origin: null, asset: ETH }]);
assert.deepEqual(r, ['Rust op 2 koersen', '2 slotkoersen', 'Geen koers voor Ether: telt als nul mee', 'Nauwkeurigheid: onvolledig']);
assert.deepEqual(originSummaryLines([{ origin: null, asset: ETH }]),
['Geen koers voor Ether: telt als nul mee', 'Nauwkeurigheid: onvolledig']);
});
it('maakt de i een waarschuwing als er een koers ontbreekt, en alleen dan', () => {
assert.match(originsHtml([{ origin: o('close'), asset: GOUD }, { origin: null, asset: ETH }]), /class="po-btn is-warn"/);
assert.match(originsHtml([{ origin: o('close'), asset: GOUD }]), /class="po-btn"/);
});
});