74 lines
4.0 KiB
JavaScript
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"/);
|
|
});
|
|
});
|