Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,71 @@
|
||||
// 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);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user