Files
AtreidesAssetsFree/tests/ui/aandacht-wisselkoers.test.mjs
T

62 lines
3.3 KiB
JavaScript
Raw Permalink Normal View History

2026-10-30 12:28:48 +01:00
// Generated, do not edit. sha256:27b79f8183ca4a0e1556b615e64322487b0abdd54fa1269b5d1f2751a7c279af
2026-10-29 11:57:29 +01:00
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']) {
mock.module(`../../client/data/${mod}.js`, { namedExports: await import(`../../server/data/${mod}.js`) });
}
const leeg = async () => [];
mock.module('../../client/data/notifications.js', { namedExports: { currentNotifications: leeg } });
mock.module('../../client/data/ai-audit.js', { namedExports: { countAiToolCallsSince: async () => 0 } });
mock.module('../../client/data/preferences.js', { namedExports: { getPref: async () => null } });
mock.module('../../client/data/price-history.js', { namedExports: { listPriceGaps: async () => ({ rows: [], total: 0 }) } });
mock.module('../../client/data/api-metrics.js', { namedExports: { apiCallsByProvider: leeg } });
2026-10-30 12:28:48 +01:00
mock.module('../../client/license.js', { namedExports: { licenseChangedSinceSeen: async () => false, locked: () => false } });
2026-10-29 11:57:29 +01:00
mock.module('../../client/app-settings.js', { namedExports: { appSetting: () => null, baseCurrency: () => 'EUR' } });
mock.module('../../client/price/providers.js', { namedExports: { rateSourceFor: async () => null } });
const producers = [];
mock.module('../../client/ui/attention.js', { namedExports: { registerAttention: p => producers.push(p) } });
const { registerAttentionSources } = await import('../../client/ui/attention-sources.js');
registerAttentionSources();
const zonderKoers = producers.find(p => p.name === 'sourcesWithoutRate');
const { run, lastId } = harness.exports;
let bron;
beforeEach(() => {
harness.recreate();
run(`INSERT INTO Asset (symbol, name, searchName, kind, unit, subunit, decimals, displayUnit)
VALUES ('XAU','Goud','goud','metal','XAU','cent',2,'unit')`);
const goud = lastId();
run(`INSERT INTO Provider (key, name, searchName, baseUrl, authenticationKind, authenticationRequired,
isActive, isSeed, isSystem, createdAt)
VALUES ('dollar','Dollarbron','dollarbron','https://voorbeeld.test','none',0,1,1,0,'2026-10-16T10:00:00.000Z')`);
bron = lastId();
run(`INSERT INTO ProviderCoverage (providerId, symbol) VALUES (?, 'XAU')`, [bron]);
run(`INSERT INTO ProviderEndpoint (providerId, capability, method, pathTemplate, quoteCurrency)
VALUES (?, 'spot', 'GET', '/p', 'USD')`, [bron]);
run(`INSERT INTO PriceSource (assetId, capability, providerId, rank, status) VALUES (?, 'spot', ?, 1, 'confirmed')`, [goud, bron]);
});
describe('aandacht: een bronkeuze in een munt zonder wisselkoers', () => {
it('meldt een actieve, gekozen bron als probleem', async () => {
const uit = await zonderKoers();
assert.deepEqual(uit.map(a => [a.id, a.severity]), [['fx:dollar:USD', 'problem']]);
});
it('meldt niets voor een bron die uit staat', async () => {
run(`UPDATE Provider SET isActive = 0 WHERE id = ?`, [bron]);
assert.deepEqual(await zonderKoers(), []);
});
it('meldt niets voor een gewiste keuze', async () => {
run(`UPDATE PriceSource SET rank = NULL`);
assert.deepEqual(await zonderKoers(), []);
});
});