79 lines
3.3 KiB
JavaScript
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();
|
|
});
|
|
});
|