Dienstplan-Pro/image-import.test.js
Kenearos 0001735207 fix(image-import): Zielmonat aus Live-Dropdown, Titel-Namen matchen, Importer-Instanziierung nach Sync-Boot
- Zielmonat/-jahr aus month-select/year-select statt veraltetem app.currentMonth (stand fix auf heute)
- normalizeName entfernt Anreden/Titel (Herr/Frau/Dr.) -> matcht titellose Mitarbeiter, kein Doppelanlegen
- Regression aus Sync-Boot behoben: app.js erzeugt imageImporter nach window.app (DOMContentLoaded-Listener lief zu frueh)
- totes app.currentMonth/currentYear entfernt; SW-Cache v5->v6
2026-07-07 19:23:45 +02:00

44 lines
2 KiB
JavaScript

const { test } = require('node:test');
const assert = require('node:assert');
const ImageImporter = require('./image-import.js');
const imp = new ImageImporter(null);
test('normalizeName entfernt Anrede/Titel (auch gestapelt)', () => {
assert.strictEqual(imp.normalizeName('Herr Alsholi'), 'alsholi');
assert.strictEqual(imp.normalizeName('Frau Cabrera'), 'cabrera');
assert.strictEqual(imp.normalizeName('Herr Dr. Azizi'), 'azizi');
assert.strictEqual(imp.normalizeName('Hr. Schierholz'), 'schierholz');
assert.strictEqual(imp.normalizeName('Prof. Müller'), 'müller');
});
test('normalizeName laesst titellose Namen unveraendert', () => {
assert.strictEqual(imp.normalizeName('Alsholi'), 'alsholi');
assert.strictEqual(imp.normalizeName(' Elsharawy '), 'elsharawy');
// "Frei" darf nicht als Titel "fr" fehlinterpretiert werden (kein Space danach)
assert.strictEqual(imp.normalizeName('Frei'), 'frei');
});
test('matchNames matcht Titel-Namen auf titellose Mitarbeiter (kein Doppelanlegen)', () => {
const entries = [
{ name: 'Herr Alsholi', date: '2026-06-10', share: 1.0 },
{ name: 'Frau Cabrera', date: '2026-06-11', share: 1.0 },
{ name: 'Herr Dr. Azizi', date: '2026-06-02', share: 1.0 },
];
const existing = ['Alsholi', 'Cabrera', 'Azizi'];
const { matched, unknowns } = imp.matchNames(entries, existing);
assert.strictEqual(unknowns.length, 0, 'keine Unbekannten mehr');
assert.strictEqual(matched.length, 3);
assert.strictEqual(matched[0].resolvedName, 'Alsholi');
assert.strictEqual(matched[1].resolvedName, 'Cabrera');
assert.strictEqual(matched[2].resolvedName, 'Azizi');
});
test('matchNames meldet echten Unbekannten weiterhin als unknown', () => {
const entries = [{ name: 'Herr Weiszflog', date: '2026-06-10', share: 1.0 }];
const existing = ['Alsholi', 'Cabrera'];
const { matched, unknowns } = imp.matchNames(entries, existing);
assert.strictEqual(matched.length, 0);
assert.strictEqual(unknowns.length, 1);
assert.strictEqual(unknowns[0].candidate, 'Herr Weiszflog');
});