From 38beaead996fd70f26208a1852f934e21f8027d7 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 6 Oct 2026 09:12:05 +0000 Subject: [PATCH] Admin: Pruefung des Mitarbeiter-Formulars als Lib mit Test Co-Authored-By: Claude Sonnet 5.5 --- src/lib/employeeForm.js | 20 ++++++++++++++++++++ tests/unit/employeeForm.test.mjs | 21 +++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/lib/employeeForm.js create mode 100644 tests/unit/employeeForm.test.mjs diff --git a/src/lib/employeeForm.js b/src/lib/employeeForm.js new file mode 100644 index 0000000..98520e3 --- /dev/null +++ b/src/lib/employeeForm.js @@ -0,0 +1,20 @@ +// Prüfung des Mitarbeiter-Formulars (Admin). Rein, unter Node testbar. + +const NEED = 'Name und E-Mail sind erforderlich.' +const MIN_PASSWORD = 8 + +/** + * Prüft das Formular zum Anlegen (isEdit false) oder Bearbeiten (isEdit true). + * Gibt den deutschen Fehlertext zurück, null heißt gültig. Beim Bearbeiten + * heißt ein leeres Passwort „unverändert“. + */ +export function validateEmployeeForm(form, isEdit) { + if (!form.displayName.trim() || !form.email.trim()) return NEED + if (!isEdit && form.password.length < MIN_PASSWORD) { + return 'Das Passwort muss mindestens 8 Zeichen haben.' + } + if (isEdit && form.password && form.password.length < MIN_PASSWORD) { + return 'Ein neues Passwort muss mindestens 8 Zeichen haben.' + } + return null +} diff --git a/tests/unit/employeeForm.test.mjs b/tests/unit/employeeForm.test.mjs new file mode 100644 index 0000000..fb7ab7a --- /dev/null +++ b/tests/unit/employeeForm.test.mjs @@ -0,0 +1,21 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +import { loadModule } from './load.mjs' + +const { validateEmployeeForm } = await loadModule('src/lib/employeeForm.js') +const base = { displayName: 'Max Muster', email: 'max@webklar.com', password: '', shortcode: '', isAdmin: false } +const NEED = 'Name und E-Mail sind erforderlich.' + +test('validateEmployeeForm: neuer Mitarbeiter', () => { + assert.equal(validateEmployeeForm({ ...base, displayName: ' ', password: '12345678' }, false), NEED) + assert.equal(validateEmployeeForm({ ...base, email: '', password: '12345678' }, false), NEED) + assert.equal(validateEmployeeForm({ ...base, password: '1234567' }, false), 'Das Passwort muss mindestens 8 Zeichen haben.') + assert.equal(validateEmployeeForm({ ...base, password: '12345678' }, false), null) +}) + +test('validateEmployeeForm: Mitarbeiter bearbeiten', () => { + assert.equal(validateEmployeeForm(base, true), null) // leeres Passwort = unverändert + assert.equal(validateEmployeeForm({ ...base, password: 'abc' }, true), 'Ein neues Passwort muss mindestens 8 Zeichen haben.') + assert.equal(validateEmployeeForm({ ...base, password: 'abcdefgh' }, true), null) + assert.equal(validateEmployeeForm({ ...base, email: ' ' }, true), NEED) +})