// Generated, do not edit. sha256:0c8f95dec7394e0dad71a6a790d7768a2d482ac976a2a68218282ae506402032 import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { activityItems, heartbeat } from '../../client/ui/activity.js'; const DAG = 86400000; const dag = s => Date.UTC(Number(s.slice(0, 4)), Number(s.slice(5, 7)) - 1, Number(s.slice(8, 10))); describe('activityItems', () => { it('geeft een aankoop omhoog, een verkoop omlaag en rente omhoog, met de tabel van de rij', () => { const items = activityItems({ accountIds: [1], trades: [ { id: 10, type: 'buy', toAccountId: 1, assetId: 5, occurredAt: '2026-03-01T12:00:00Z' }, { id: 11, type: 'sell', fromAccountId: 1, assetId: 5, occurredAt: '2026-03-02T12:00:00Z' }, ], interest: [{ id: 12, toAccountId: 1, assetId: 5, occurredAt: '2026-03-03T12:00:00Z' }], }); assert.deepEqual(items.map(i => [i.kind, i.dir, i.table, i.id]), [['buy', 1, 'trades', 10], ['sell', -1, 'trades', 11], ['interest', 1, 'interest', 12]]); }); it('telt een verplaatsing aan beide kanten, en alleen voor de gevraagde accounts', () => { const transfers = [{ id: 20, fromAccountId: 1, toAccountId: 2, assetId: 5, occurredAt: '2026-03-01T12:00:00Z' }]; assert.deepEqual(activityItems({ accountIds: [1], transfers }).map(i => [i.kind, i.dir]), [['transferOut', -1]]); assert.deepEqual(activityItems({ accountIds: [2], transfers }).map(i => [i.kind, i.dir]), [['transferIn', 1]]); assert.equal(activityItems({ accountIds: [1, 2], transfers }).length, 2); assert.equal(activityItems({ accountIds: [3], transfers }).length, 0, 'een ander account ziet niets'); }); it('maakt van een balans, een afspraak en het account een streepje zonder piek', () => { const items = activityItems({ accountIds: [1], valuations: [{ id: 30, accountId: 1, assetId: 5, rateAt: '2026-03-01T12:00:00Z' }], schedules: [{ accountId: 1, startsOn: '2026-01-01', endsOn: '2026-06-30' }], accounts: [{ id: 1, createdAt: '2025-12-01T12:00:00Z', updatedAt: '2026-02-01T12:00:00Z', closedAt: null }], }); assert.ok(items.every(i => i.dir === 0)); assert.deepEqual(items.map(i => i.kind), ['balance', 'agreementStart', 'agreementEnd', 'accountOpened', 'accountChanged']); assert.deepEqual(items.find(i => i.kind === 'balance'), { x: dag('2026-03-01'), accountId: 1, kind: 'balance', dir: 0, table: 'valuations', id: 30, assetId: 5 }, 'een balans is wel aan te klikken'); assert.equal(items.find(i => i.kind === 'agreementStart').table, null, 'een afspraak heeft geen rij'); }); it('maakt van een reservering en een komende rentebijschrijving een streepje, op het juiste account', () => { const items = activityItems({ accountIds: [1], reservations: [ { id: 40, fromAccountId: 1, toAccountId: null, assetId: 5, occurredAt: '2026-12-01T12:00:00Z' }, { id: 41, fromAccountId: null, toAccountId: 1, assetId: 5, occurredAt: '2026-12-15T12:00:00Z' }, { id: 42, fromAccountId: 2, toAccountId: null, assetId: 5, occurredAt: '2026-12-20T12:00:00Z' }, ], interestDue: [{ accountId: 1, periodEnd: '2027-01-01' }, { accountId: 2, periodEnd: '2027-01-01' }], }); assert.deepEqual(items.map(i => [i.kind, i.dir, i.table, i.id]), [['reservation', 0, 'reservations', 40], ['reservation', 0, 'reservations', 41], ['interestDue', 0, null, null]]); assert.equal(items.at(-1).x, dag('2027-01-01')); }); }); describe('heartbeat', () => { const item = (s, dir) => ({ x: dag(s), dir }); it('loopt per dag van de dag vóór het eerste item tot vandaag, op nul waar niets gebeurde', () => { const { points } = heartbeat([item('2026-03-02', 1)], '2026-03-05T12:00:00Z'); assert.deepEqual(points.map(p => p[0]), [1, 2, 3, 4, 5].map(d => dag(`2026-03-0${d}`))); assert.deepEqual(points.map(p => p[1]), [0, 1, 0, 0, 0]); }); it('wijst omhoog bij meer erin, omlaag bij meer eruit, en omhoog bij evenveel', () => { const { points, byDay } = heartbeat([ item('2026-03-02', 1), item('2026-03-02', 1), item('2026-03-02', 1), item('2026-03-02', 1), item('2026-03-03', -1), item('2026-03-04', 1), item('2026-03-04', -1), item('2026-03-05', 0), ], '2026-03-05T12:00:00Z'); const op = s => points.find(p => p[0] === dag(s))[1]; assert.equal(op('2026-03-02'), 2, 'vier erin: de wortel, zodat één drukke dag de rest niet plat drukt'); assert.equal(op('2026-03-03'), -1); assert.equal(op('2026-03-04'), 1); assert.equal(op('2026-03-05'), 0, 'een streepje is geen piek'); assert.equal(byDay.get(dag('2026-03-02')).length, 4); }); it('begint op het startjaar en laat weg wat daarvóór lag', () => { const { points, byDay } = heartbeat([item('1994-06-01', 1), item('2026-03-02', 1)], '2026-03-03T12:00:00Z', '2026-03-01T12:00:00Z'); assert.equal(points[0][0], dag('2026-03-01'), 'de lijn begint op de startdag, niet op de dag ervoor'); assert.equal(points.length, 3); assert.equal(byDay.has(dag('1994-06-01')), false, 'de oude boeking is er niet'); assert.equal(heartbeat([item('1994-06-01', 1)], '2026-03-03T12:00:00Z', '2026-03-01T12:00:00Z'), null, 'niets ná de start: geen lijn'); }); it('geeft niets zonder items, en twee punten als alles vandaag gebeurde', () => { assert.equal(heartbeat([], '2026-03-05T12:00:00Z'), null); const { points } = heartbeat([item('2026-03-05', -1)], '2026-03-05T12:00:00Z'); assert.equal(points.length, 2); assert.equal(points[1][0] - points[0][0], DAG); }); });