// Generated, do not edit. sha256:b83eae2452e831916c5adb829943694b1474213183f0c8ae01a34491f818b8de import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { feeCandidates, withFee } from '../../client/actions/valuation-fee.js'; const ACC = 1, ANDER = 2, BTC = 10, ETH = 11; const ev = (o) => ({ id: o.id, assetId: BTC, type: 'sell', fromAccountId: ACC, toAccountId: null, amount: 1000, unitFee: null, note: null, occurredAt: '2026-03-01T10:00:00Z', ...o }); const balans = (o) => ({ id: o.id, accountId: ACC, assetId: BTC, rateAt: '2026-04-01T00:00:00Z', ...o }); describe('feeCandidates', () => { const v = balans({ id: 2 }); const vorige = balans({ id: 1, rateAt: '2026-02-01T00:00:00Z' }); it('geeft de uitgaande boekingen sinds de vorige balans, nieuwste eerst', () => { const events = [ ev({ id: 10, occurredAt: '2026-02-15T00:00:00Z' }), ev({ id: 11, type: 'transfer', toAccountId: ANDER, occurredAt: '2026-03-15T00:00:00Z' }), ev({ id: 12, type: 'transfer', toAccountId: ACC, occurredAt: '2026-03-20T00:00:00Z' }), ]; assert.deepEqual(feeCandidates({ events, valuations: [vorige, v], v }).map(e => e.id), [12, 11, 10]); }); it('laat weg wat de fee niet kan dragen of niet bij dit gat hoort', () => { const events = [ ev({ id: 20, type: 'buy', fromAccountId: null, toAccountId: ACC }), ev({ id: 21, type: 'interest', fromAccountId: null, toAccountId: ACC }), ev({ id: 22, fromAccountId: ANDER }), ev({ id: 23, assetId: ETH }), ev({ id: 24, type: 'transfer', fromAccountId: ANDER, toAccountId: ACC }), ev({ id: 25, occurredAt: '2026-01-15T00:00:00Z' }), ev({ id: 26, occurredAt: '2026-04-02T00:00:00Z' }), ]; assert.deepEqual(feeCandidates({ events, valuations: [vorige, v], v }), []); }); it('kijkt zonder vorige balans terug tot het begin, en een balans van een ander account telt niet', () => { const events = [ev({ id: 30, occurredAt: '2025-01-01T00:00:00Z' })]; const ander = balans({ id: 3, accountId: ANDER, rateAt: '2026-02-01T00:00:00Z' }); assert.deepEqual(feeCandidates({ events, valuations: [ander, v], v }).map(e => e.id), [30]); }); }); describe('withFee', () => { it('telt het gat op bij een bestaande fee, als positief getal', () => { assert.equal(withFee(ev({ id: 1, unitFee: 50 }), -200).unitFee, 250); assert.equal(withFee(ev({ id: 1 }), -200).unitFee, 200); }); it('laat de rest van de boeking staan en zet de notitie erachter', () => { const uit = withFee(ev({ id: 1, note: 'betaling' }), -5, 'kosten aangevuld'); assert.equal(uit.amount, 1000); assert.equal(uit.note, 'betaling ยท kosten aangevuld'); assert.equal(withFee(ev({ id: 1 }), -5, 'x').note, 'x'); }); });