Files
ocr_scanner/test/pn-decoder.test.js
T
vchuser c580d4f924 feat: tabellengesteuerter Teilenummer-Decoder
Deckt die Samsung-Referenz-Teilenummer aus dem physisch vorhandenen
Modul ab. Unbekannte Fragmente (z.B. nicht gelistete Dichte-Codes)
liefern bewusst null statt einer Vermutung - das ist der geplante
Uebergang zum OCR-Weg, kein Fehlerfall.

Das im Task-Brief vorgegebene Regex-Muster liess das literale 'A' der
Dichte-Kennung ausserhalb der Erfassungsgruppe, wodurch die
Tabellensuche nach 'A8K40' nie greifen konnte. Muster korrigiert, damit
die ebenfalls vorgegebenen Tests bestehen; Tabelleninhalte und
Warnkommentar blieben wortgleich.
2026-07-28 14:29:13 +02:00

42 lines
1.5 KiB
JavaScript

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { decodePartNumber } from '../src/pn-decoder.js';
test('dekodiert die Samsung-Teilenummer aus dem Referenzmodul', () => {
const spec = decodePartNumber('M386A8K40BM1-CRC4Y');
assert.equal(spec.formFactor, 'LRDIMM');
assert.equal(spec.speed, 'PC4-2400');
assert.equal(spec.capacityGb, 64);
assert.equal(spec.rank, '4DRx4');
assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y');
});
test('erkennt die Bauform auch ohne bekannten Dichte-Code', () => {
const spec = decodePartNumber('M393A2K43BB1-CTD');
assert.equal(spec.formFactor, 'RDIMM');
assert.equal(spec.speed, 'PC4-2666');
assert.equal(spec.capacityGb, null, 'unbekannter Dichte-Code laesst das Feld offen');
assert.equal(spec.rank, null);
assert.equal(spec.partNumber, 'M393A2K43BB1-CTD');
});
test('normalisiert Kleinschreibung und Leerzeichen', () => {
const spec = decodePartNumber(' m386a8k40bm1-crc4y ');
assert.equal(spec.capacityGb, 64);
assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y');
});
test('unbekannter Hersteller liefert ein leeres Spec mit gesetzter Teilenummer', () => {
const spec = decodePartNumber('7325773');
assert.equal(spec.formFactor, null);
assert.equal(spec.speed, null);
assert.equal(spec.capacityGb, null);
assert.equal(spec.partNumber, '7325773');
});
test('leere Eingabe liefert ein vollstaendig leeres Spec', () => {
const spec = decodePartNumber('');
assert.equal(spec.partNumber, null);
assert.equal(spec.capacityGb, null);
});