// 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(); }); });