Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,103 @@
|
||||
// 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);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user