Files
AtreidesAssetsFree/tests/price/scan-movements.test.mjs
T

54 lines
2.7 KiB
JavaScript
Raw Normal View History

2026-10-29 11:57:29 +01:00
// Generated, do not edit. sha256:5fcf7092848d33c8b3e377e39e0ea6329b71d804e01a41ef65f10de8dcfb1874
import { describe, it, mock } from 'node:test';
import assert from 'node:assert/strict';
const TAP = 'bc1p-taproot-input';
const SEG = 'bc1q-segwit-wisselgeld';
const KANAAL = 'bc1q-kanaal-multisig';
const FUNDING = {
txid: 'f'.repeat(64), fee: 1000,
status: { confirmed: true, block_height: 900_000, block_time: 1_760_000_000 },
vin: [{ prevout: { scriptpubkey_address: TAP, value: 100_000 } }],
vout: [{ scriptpubkey_address: KANAAL, value: 70_000 }, { scriptpubkey_address: SEG, value: 29_000 }],
};
mock.module('../../client/price/btc-explorer.js', { namedExports: {
addressTxs: async () => [FUNDING],
fetchJson: async () => ({}),
explorerBase: async () => 'https://explorer.test',
} });
const { scanMovements } = await import('../../client/price/wallet-scanner.js');
describe('scanMovements over twee bronnen van één account', () => {
it('de SegWit-bron ziet met de Taproot-adressen erbij de kanaalopening als uitgaand', async () => {
const { rows } = await scanMovements([SEG], 1, 2, null, { ownAddresses: [TAP, SEG] });
assert.deepEqual(rows.map(r => [r.direction, r.valueSats, r.feeSats]), [['out', 70_000, 1000]]);
});
it('de Taproot-bron komt op precies dezelfde beweging uit', async () => {
const { rows } = await scanMovements([TAP], 1, 3, null, { ownAddresses: [TAP, SEG] });
assert.deepEqual(rows.map(r => [r.direction, r.valueSats, r.feeSats]), [['out', 70_000, 1000]]);
});
it('zonder de adressen van het account ziet de SegWit-bron alleen het wisselgeld: de oude fout', async () => {
const { rows } = await scanMovements([SEG], 1, 2, null);
assert.deepEqual(rows.map(r => [r.direction, r.valueSats]), [['in', 29_000]]);
});
it('ook andersom: een SegWit-input met het wisselgeld naar Taproot', async () => {
FUNDING.vin = [{ prevout: { scriptpubkey_address: SEG, value: 100_000 } }];
FUNDING.vout = [{ scriptpubkey_address: KANAAL, value: 70_000 }, { scriptpubkey_address: TAP, value: 29_000 }];
try {
for (const [bron, eigen] of [[[SEG], 2], [[TAP], 3]]) {
const { rows } = await scanMovements(bron, 1, eigen, null, { ownAddresses: [TAP, SEG] });
assert.deepEqual(rows.map(r => [r.direction, r.valueSats, r.feeSats]), [['out', 70_000, 1000]]);
}
const { rows: oud } = await scanMovements([TAP], 1, 3, null);
assert.deepEqual(oud.map(r => [r.direction, r.valueSats]), [['in', 29_000]], 'per bron genet: alleen het wisselgeld');
} finally {
FUNDING.vin = [{ prevout: { scriptpubkey_address: TAP, value: 100_000 } }];
FUNDING.vout = [{ scriptpubkey_address: KANAAL, value: 70_000 }, { scriptpubkey_address: SEG, value: 29_000 }];
}
});
});