Files
AtreidesAssetsFree/tests/repo/grootboek-signaal.test.mjs
T
2026-10-29 11:57:29 +01:00

79 lines
3.3 KiB
JavaScript

// Generated, do not edit. sha256:6ad601b19ff4b76c3fb34f868abd93917ef0af58cb521f376bcb0c43c66b6827
import { describe, it, beforeEach, mock } from 'node:test';
import assert from 'node:assert/strict';
import { createDbHarness } from '../helpers/db-node.mjs';
const harness = createDbHarness();
mock.module('../../server/db.js', { namedExports: harness.exports });
const { createEvent, updateEvent, deleteEvent, listEvents } = await import('../../server/data/events.js');
const { createValuation, updateValuation, deleteValuation, acceptValuationGap } = await import('../../server/data/valuations.js');
const { createSchedule, updateSchedule, deleteSchedule } = await import('../../server/data/interest-schedules.js');
const { takeChanges } = await import('../../server/data/_events.js');
let btc, acc;
beforeEach(() => {
harness.recreate();
harness.exports.run(
`INSERT INTO Asset (symbol, name, searchName, kind, unit, subunit, decimals, displayUnit) VALUES ('BTC','Bitcoin','bitcoin','crypto','BTC','sat',8,'subunit')`);
btc = harness.exports.lastId();
harness.exports.run(`INSERT INTO Account (name, searchName, kind, isOwnCustody, scanEnabled, isActive, closedAt) VALUES ('A','a','wallet',1,0,1,NULL)`);
acc = harness.exports.lastId();
takeChanges();
});
const aankoop = { assetId: btc, type: 'buy', occurredAt: '2024-03-01T00:00:00Z', amount: 100_000,
fiatPrice: 30_000, toAccountId: acc, source: 'manual' };
const balans = () => ({ assetId: btc, valuedOn: '2024-04-01', accountId: acc, balance: 100_000,
fiatRate: 30_000, rateAt: '2024-03-31T22:00:00Z', source: 'manual' });
const afspraak = () => ({ accountId: acc, rateKind: 'fixed', principalAssetId: btc, payoutAssetId: btc,
principalAmount: 100_000, annualRate: 0.05, startsOn: '2024-01-01', endsOn: '2025-01-01', creditCadence: 'annual' });
const signaal = () => assert.deepEqual(takeChanges(), ['ledger-changed']);
describe('ledger-changed: boekingen', () => {
it('bij aanmaken, wijzigen en verwijderen', async () => {
const id = await createEvent({ ...aankoop, assetId: btc, toAccountId: acc });
signaal();
await updateEvent(id, { ...aankoop, assetId: btc, toAccountId: acc, amount: 200_000 });
signaal();
await deleteEvent(id);
signaal();
});
it('niet bij een geweigerde boeking, want er veranderde niets', async () => {
await assert.rejects(() => createEvent({ ...aankoop, assetId: btc, toAccountId: acc, fiatPrice: null }));
assert.deepEqual(takeChanges(), []);
});
it('niet bij lezen', () => {
listEvents();
assert.deepEqual(takeChanges(), []);
});
});
describe('ledger-changed: balansen', () => {
it('bij aanmaken, wijzigen, aanvaarden en verwijderen', async () => {
const id = await createValuation(balans());
signaal();
await updateValuation(id, { ...balans(), balance: 150_000 });
signaal();
await acceptValuationGap(id);
signaal();
await deleteValuation(id);
signaal();
});
});
describe('ledger-changed: rente-afspraken', () => {
it('bij aanmaken, wijzigen en verwijderen, want begin en einde staan op de activiteitslijn', async () => {
const id = await createSchedule(afspraak());
signaal();
await updateSchedule(id, { ...afspraak(), annualRate: 0.04 });
signaal();
await deleteSchedule(id);
signaal();
});
});