diff --git a/src/spec.js b/src/spec.js index 6853260..3af00cd 100644 --- a/src/spec.js +++ b/src/spec.js @@ -70,7 +70,10 @@ const CONFUSIONS = { /** Vergleichsform eines Tokens: normalisiert, ohne Trennzeichen, verwechslungsfrei. */ export function canonical(raw) { - const normalized = normalizeToken(raw).replace(/[^A-Z0-9]/g, ''); + // Konvertiere Zahlen zu Zeichenketten, aber nicht null/undefined + const token = typeof raw === 'number' ? String(raw) : raw; + + const normalized = normalizeToken(token).replace(/[^A-Z0-9]/g, ''); let out = ''; for (const char of normalized) { out += CONFUSIONS[char] ?? char; @@ -83,7 +86,10 @@ export function canonical(raw) { * Erst exakt, dann ueber die Vergleichsform. Mehrdeutigkeit gilt als Treffer-los. */ export function matchKnown(raw, list) { - const normalized = normalizeToken(raw); + // Konvertiere Zahlen zu Zeichenketten, aber nicht null/undefined + const token = typeof raw === 'number' ? String(raw) : raw; + + const normalized = normalizeToken(token); if (normalized === '') return null; for (const candidate of list) { diff --git a/test/spec-match.test.js b/test/spec-match.test.js index 60094c9..fc86f22 100644 --- a/test/spec-match.test.js +++ b/test/spec-match.test.js @@ -56,3 +56,29 @@ test('specsCompatible toleriert eine Verwechslung in der Teilenummer', () => { const b = { ...emptySpec(), capacityGb: 64, partNumber: 'M386A8K4OBM1-CRC4Y' }; assert.equal(specsCompatible(a, b), true); }); + +test('matchKnown findet einen Zahlenwert in der Liste', () => { + assert.equal(matchKnown(64, KNOWN.capacityGb), 64); + assert.equal(matchKnown(128, KNOWN.capacityGb), 128); +}); + +test('canonical behandelt Zahlen wie Zeichenketten', () => { + assert.equal(canonical(64), canonical('64')); + assert.equal(canonical(128), canonical('128')); +}); + +test('canonical mit null ergibt Leerzeichenkette', () => { + assert.equal(canonical(null), ''); +}); + +test('canonical mit undefined ergibt Leerzeichenkette', () => { + assert.equal(canonical(undefined), ''); +}); + +test('matchKnown mit null ergibt null', () => { + assert.equal(matchKnown(null, KNOWN.capacityGb), null); +}); + +test('matchKnown mit undefined ergibt null', () => { + assert.equal(matchKnown(undefined, KNOWN.capacityGb), null); +});