121 lines
6.1 KiB
JavaScript
121 lines
6.1 KiB
JavaScript
// Generated, do not edit. sha256:082ca8023bd277754ba77e02d92a8c8f7a15d0e14efa7674bf7905310f9ce692
|
|||
|
|
import { describe, it } from 'node:test';
|
||
|
|
import assert from 'node:assert/strict';
|
||
|
|
|
||
|
|
import { diagnoseSources } from '../../shared/source-diagnosis.js';
|
||
|
|
|
||
|
|
const GOUD = { id: 7, symbol: 'XAU', kind: 'metal' };
|
||
|
|
let id = 0;
|
||
|
|
const bron = (key, extra = {}) => ({
|
||
|
|
id: ++id, key, name: key.toUpperCase(), isActive: 1, isSystem: 0, fixedRate: null, callsPerMonth: null,
|
||
|
|
coverage: ['XAU'], endpoints: [{ capability: 'daily_history' }], ...extra,
|
||
|
|
});
|
||
|
|
const perDatum = { endpoints: [{ capability: 'history_point' }] };
|
||
|
|
|
||
|
|
describe('diagnoseSources: de keten van voor naar achter', () => {
|
||
|
|
it('geen integratie die het symbool dekt', () => {
|
||
|
|
const uit = diagnoseSources(GOUD, { providers: [bron('mempool', { coverage: ['BTC'] })] });
|
||
|
|
assert.deepEqual(uit, [{ severity: 'problem', code: 'noCoverage' }]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('een systeembron of een vaste koers telt niet als dekking', () => {
|
||
|
|
const uit = diagnoseSources(GOUD, { providers: [bron('manual', { isSystem: 1 }), bron('fixed', { fixedRate: { fiatPrice: 1 } })] });
|
||
|
|
assert.equal(uit[0].code, 'noCoverage');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('een integratie zonder historie-endpoint telt niet als dekking', () => {
|
||
|
|
const uit = diagnoseSources(GOUD, { providers: [bron('alleenspot', { endpoints: [{ capability: 'spot' }] })] });
|
||
|
|
assert.equal(uit[0].code, 'noCoverage');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('dekking die uit staat noemt de namen', () => {
|
||
|
|
const uit = diagnoseSources(GOUD, { providers: [bron('goldapi', { isActive: 0, ...perDatum })] });
|
||
|
|
assert.deepEqual(uit, [{ severity: 'problem', code: 'allInactive', names: ['GOLDAPI'] }]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('geen bronkeuze geeft een voorstel voor Historie, en een reeks gaat voor een bron per datum', () => {
|
||
|
|
const goldapi = bron('goldapi', perDatum);
|
||
|
|
const eulerpool = bron('eulerpool');
|
||
|
|
const [f] = diagnoseSources(GOUD, { providers: [goldapi, eulerpool], historyChain: [] });
|
||
|
|
assert.equal(f.code, 'noChoice');
|
||
|
|
assert.equal(f.severity, 'problem');
|
||
|
|
assert.deepEqual(f.proposal, { providerKey: 'eulerpool', providerId: eulerpool.id, providerName: 'EULERPOOL', capability: 'history' });
|
||
|
|
});
|
||
|
|
|
||
|
|
it('een gekozen bron die uit staat is geen keuze, en het voorstel is de actieve', () => {
|
||
|
|
const uit = bron('goldapi', { isActive: 0, ...perDatum });
|
||
|
|
const aan = bron('eulerpool');
|
||
|
|
const [f] = diagnoseSources(GOUD, { providers: [uit, aan], historyChain: ['goldapi'] });
|
||
|
|
assert.equal(f.code, 'choiceUnusable');
|
||
|
|
assert.deepEqual(f.names, ['GOLDAPI']);
|
||
|
|
assert.equal(f.proposal.providerKey, 'eulerpool');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('een gekozen bron die het symbool niet dekt, is ook geen keuze', () => {
|
||
|
|
const mempool = bron('mempool', { coverage: ['BTC'] });
|
||
|
|
const [f] = diagnoseSources(GOUD, { providers: [mempool, bron('eulerpool')], historyChain: ['mempool'] });
|
||
|
|
assert.equal(f.code, 'choiceUnusable');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('een gekozen bron zonder historie-endpoint is ook geen keuze', () => {
|
||
|
|
const spot = bron('alleenspot', { endpoints: [{ capability: 'spot' }] });
|
||
|
|
const [f] = diagnoseSources(GOUD, { providers: [spot, bron('eulerpool')], historyChain: ['alleenspot'] });
|
||
|
|
assert.equal(f.code, 'choiceUnusable');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('een keten die op orde is geeft niets, met een reeks of met een bron per datum', () => {
|
||
|
|
assert.deepEqual(diagnoseSources(GOUD, { providers: [bron('eulerpool')], historyChain: ['eulerpool'] }), []);
|
||
|
|
assert.deepEqual(diagnoseSources(GOUD, { providers: [bron('goldapi', perDatum)], historyChain: ['goldapi'] }), []);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('diagnoseSources: de maandlimiet en een uitgezette keuze', () => {
|
||
|
|
it('alle gekozen bronnen op hun limiet is een probleem', () => {
|
||
|
|
const g = bron('goldapi', { callsPerMonth: 100, ...perDatum });
|
||
|
|
const [f] = diagnoseSources(GOUD, { providers: [g], historyChain: ['goldapi'], usage: { [g.id]: 100 } });
|
||
|
|
assert.deepEqual(f, { severity: 'problem', code: 'limitReached', names: ['GOLDAPI'] });
|
||
|
|
});
|
||
|
|
|
||
|
|
it('één van twee op de limiet is aandacht, want de keten valt door', () => {
|
||
|
|
const g = bron('goldapi', { callsPerMonth: 100, ...perDatum });
|
||
|
|
const e = bron('eulerpool');
|
||
|
|
const [f] = diagnoseSources(GOUD, { providers: [g, e], historyChain: ['eulerpool', 'goldapi'], usage: { [g.id]: 120 } });
|
||
|
|
assert.equal(f.severity, 'attention');
|
||
|
|
assert.deepEqual(f.names, ['GOLDAPI']);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('onder de limiet is niets, en een bron zonder limiet telt nooit', () => {
|
||
|
|
const g = bron('goldapi', { callsPerMonth: 100, ...perDatum });
|
||
|
|
const e = bron('eulerpool');
|
||
|
|
const uit = diagnoseSources(GOUD, { providers: [g, e], historyChain: ['eulerpool', 'goldapi'], usage: { [g.id]: 99, [e.id]: 5000 } });
|
||
|
|
assert.deepEqual(uit, []);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('een gekozen bron die uit staat naast een werkende is aandacht', () => {
|
||
|
|
const g = bron('goldapi', { isActive: 0, ...perDatum });
|
||
|
|
const e = bron('eulerpool');
|
||
|
|
const uit = diagnoseSources(GOUD, { providers: [g, e], historyChain: ['eulerpool', 'goldapi'] });
|
||
|
|
assert.deepEqual(uit, [{ severity: 'attention', code: 'choiceInactive', names: ['GOLDAPI'] }]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('diagnoseSources: de dienst levert de historie', () => {
|
||
|
|
const dienst = { serviceCovers: true };
|
||
|
|
|
||
|
|
it('dekking die uit staat, geen dekking of geen keuze is dan geen melding', () => {
|
||
|
|
assert.deepEqual(diagnoseSources(GOUD, { providers: [bron('goldapi', { isActive: 0, ...perDatum })], ...dienst }), []);
|
||
|
|
assert.deepEqual(diagnoseSources(GOUD, { providers: [bron('mempool', { coverage: ['BTC'] })], ...dienst }), []);
|
||
|
|
assert.deepEqual(diagnoseSources(GOUD, { providers: [bron('eulerpool')], historyChain: [], ...dienst }), []);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('alle gekozen bronnen op hun limiet is dan aandacht en geen probleem', () => {
|
||
|
|
const g = bron('goldapi', { callsPerMonth: 100, ...perDatum });
|
||
|
|
const [f] = diagnoseSources(GOUD, { providers: [g], historyChain: ['goldapi'], usage: { [g.id]: 100 }, ...dienst });
|
||
|
|
assert.equal(f.severity, 'attention');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('zonder de dienst blijft het een probleem', () => {
|
||
|
|
const uit = diagnoseSources(GOUD, { providers: [bron('goldapi', { isActive: 0, ...perDatum })], serviceCovers: false });
|
||
|
|
assert.equal(uit[0].code, 'allInactive');
|
||
|
|
});
|
||
|
|
});
|