import { test } from 'node:test'; import assert from 'node:assert/strict'; import { SCAN_MODES, getScanMode } from '../src/scan-modes.js'; test('genau drei Funktionen in fester Reihenfolge', () => { assert.equal(SCAN_MODES.length, 3); assert.deepEqual(SCAN_MODES.map((mode) => mode.id), ['barcode', 'qrcode', 'ocr']); }); test('Funktion 1 (Strichcode): eindimensionale Codearten, laufende Suche, keine Texterkennung', () => { const mode = getScanMode('barcode'); assert.equal(mode.label, 'Strichcode'); assert.deepEqual(mode.barcodeFormats, [ 'Code128', 'Code39', 'Code93', 'ITF', 'EAN13', 'EAN8', 'UPCA', 'UPCE', 'Codabar', ]); assert.equal(mode.continuousSearch, true); assert.equal(mode.useOcr, false); }); test('Funktion 2 (2D-Code): QR-Varianten und DataMatrix, Aztec, PDF417', () => { const mode = getScanMode('qrcode'); assert.equal(mode.label, '2D-Code'); assert.deepEqual(mode.barcodeFormats, [ 'QRCode', 'MicroQRCode', 'RMQRCode', 'DataMatrix', 'Aztec', 'PDF417', ]); assert.ok(mode.barcodeFormats.includes('DataMatrix'), 'Funktion 2 muss DataMatrix lesen (Etiketten der Ware tragen DataMatrix)'); assert.equal(mode.continuousSearch, true); assert.equal(mode.useOcr, false); }); test('die drei Funktionen haben paarweise verschiedene Kennungen und Beschriftungen', () => { const ids = SCAN_MODES.map((mode) => mode.id); const labels = SCAN_MODES.map((mode) => mode.label); assert.equal(new Set(ids).size, ids.length, 'Kennungen muessen paarweise verschieden sein'); assert.equal(new Set(labels).size, labels.length, 'Beschriftungen muessen paarweise verschieden sein'); }); test('Funktion 3 (Text erkennen): keine Codearten, keine laufende Suche, Texterkennung', () => { const mode = getScanMode('ocr'); assert.equal(mode.label, 'Text erkennen'); assert.deepEqual(mode.barcodeFormats, []); assert.equal(mode.continuousSearch, false); assert.equal(mode.useOcr, true); }); test('unbekannte Kennung wirft statt undefined zurueckzugeben', () => { assert.throws(() => getScanMode('unbekannt')); });