Files
AtreidesAssetsFree/tests/price/reeks-per-dag.test.mjs
T
2026-10-29 11:57:29 +01:00

72 lines
3.0 KiB
JavaScript

// Generated, do not edit. sha256:e3f07d60b1d7716de10f35f932ae6f2f2e3db5a07433459721f39ceee41a1a6d
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 });
for (const mod of ['providers', 'price-source', 'price-history', 'api-metrics']) {
mock.module(`../../client/data/${mod}.js`, { namedExports: await import(`../../server/data/${mod}.js`) });
}
const facade = await import('../../client/price/providers.js');
const gisteren = new Date(Date.now() - 86400000).toISOString().slice(0, 10);
const tijd = dag => Math.floor(Date.parse(`${dag}T00:00:00Z`) / 1000);
let fetchCalls = 0;
let faalt = false;
globalThis.fetch = async () => {
fetchCalls++;
if (faalt) throw new Error('geen netwerk in deze test');
return { ok: true, status: 200, json: async () => [{ time: tijd(gisteren), price: 0.87 }] };
};
const { run, lastId, one } = harness.exports;
let usd;
beforeEach(() => {
harness.recreate();
facade.forgetSeriesFetches();
fetchCalls = 0;
faalt = false;
run(`INSERT INTO Asset (symbol, name, searchName, kind, unit, subunit, decimals, displayUnit)
VALUES ('USD','Dollar','dollar','fiat','USD','cent',2,'unit')`);
usd = lastId();
run(`INSERT INTO Provider (key, name, searchName, baseUrl, authenticationKind, authenticationRequired,
isActive, isSeed, isSystem, createdAt)
VALUES ('ecb','ECB','ecb','https://voorbeeld.test','none',0,1,1,0,'2026-09-01T10:00:00.000Z')`);
const p = lastId();
run(`INSERT INTO ProviderCoverage (providerId, symbol) VALUES (?, 'USD')`, [p]);
run(`INSERT INTO ProviderEndpoint (providerId, capability, method, pathTemplate) VALUES (?, 'daily_history', 'GET', '/reeks')`, [p]);
run(`INSERT INTO PriceSource (assetId, capability, providerId, rank, status)
VALUES (?, 'history', ?, 1, 'confirmed')`, [usd, p]);
});
const asset = () => one(`SELECT * FROM Asset WHERE id = ?`, [usd]);
describe('een reeks die vandaag niet haalt', () => {
it('gaat op één dag maar één keer naar buiten', async () => {
await facade.ensurePriceHistoryFor(asset());
await facade.ensurePriceHistoryFor(asset());
await facade.ensurePriceHistoryFor(asset());
assert.equal(fetchCalls, 1);
assert.equal(one(`SELECT fiatPrice FROM PriceHistory WHERE assetId = ?`, [usd]).fiatPrice, 0.87, 'en de reeks staat er');
});
it('probeert het na een MISLUKTE poging gewoon opnieuw', async () => {
faalt = true;
await assert.rejects(() => facade.ensurePriceHistoryFor(asset()));
faalt = false;
await facade.ensurePriceHistoryFor(asset());
assert.equal(fetchCalls, 2);
});
it('haalt na een bronwijziging wel opnieuw op', async () => {
await facade.ensurePriceHistoryFor(asset());
facade.forgetSeriesFetches();
await facade.ensurePriceHistoryFor(asset());
assert.equal(fetchCalls, 2);
});
});