fix(okr): somTall kaster paa Infinity, ikke bare NaN (patch-lane #7)

Number.isNaN fanget ikke Infinity/-Infinity -- target: 1e400 ga stille
score 0 i stedet for kast. Bytt til Number.isFinite (negert).
This commit is contained in:
Kjell Tore Guttormsen 2026-08-09 14:13:32 +02:00
commit b10153692d
2 changed files with 8 additions and 1 deletions

View file

@ -28,7 +28,7 @@ const KR_TYPER = ['committed', 'aspirational'];
function somTall(verdi, felt, hvor) {
const n = Number(verdi);
if (verdi === null || verdi === undefined || String(verdi).trim() === '' || Number.isNaN(n)) {
if (verdi === null || verdi === undefined || String(verdi).trim() === '' || !Number.isFinite(n)) {
throw new Error(`${hvor}: ${felt} maa vaere et rent tall uten enhet (fikk: ${verdi})`);
}
return n;

View file

@ -163,6 +163,13 @@ test('(B9) lesSyklus kaster ved ufullstendig KR i frontmatter', async (t) => {
assert.throws(() => lesSyklus(dir), /kr1/i);
});
// somTall brukte Number.isNaN, som IKKE fanger Infinity/-Infinity -- kun NaN.
// target: 1e400 -> Number(1e400) === Infinity, en stille score 0 fremfor kast.
test('(B11) beregnScore kaster ved Infinity-felt', () => {
assert.throws(() => beregnScore({ baseline: 1, target: 1e400, naa: 2 }), /target/);
assert.throws(() => beregnScore({ baseline: -1e400, target: 10, naa: 2 }), /baseline/);
});
test('(B10) lesSyklus kaster naar katalogen ikke finnes', () => {
assert.throws(() => lesSyklus(join(ROOT, 'tests/fixtures/finnes-ikke')), /finnes ikke/i);
});