dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
dbxValidator_result_test.php
Go to the documentation of this file.
1<?php
2
10
11$root = dirname(__DIR__, 2);
12require_once $root . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'dbxValidator.class.php';
13
15
16$assert = static function (bool $condition, string $message): void {
17 if (!$condition) {
18 fwrite(STDERR, "FAIL: {$message}\n");
19 exit(1);
20 }
21};
22
23$result = $validator->validateResult('invalid', 'email|required', 'email');
24$assert($result['valid'] === false, 'ungueltige E-Mail wurde akzeptiert');
25$assert($result['code'] === 'invalid_format', 'falscher E-Mail-Fehlercode');
26$assert($result['name'] === 'email', 'Feldname fehlt im Ergebnis');
27$assert($validator->getLastResult() === $result, 'getLastResult liefert nicht das letzte Ergebnis');
28$assert(count($validator->getErrors()) === 1, 'strukturierter Fehler wurde nicht gespeichert');
29$assert(count($validator->getErrorMessages()) === 1, 'lesbare Fehlermeldung wurde nicht gespeichert');
30
31$required = $validator->validateResult('', 'required|email', 'email');
32$assert($required['valid'] === false && $required['code'] === 'required', 'required erkennt leeren Wert nicht');
33$assert($required['message'] === 'Bitte füllen Sie dieses Feld aus.', 'deutsche Benutzermeldung fehlt');
34
35$validator->setLanguage('en');
36$requiredEn = $validator->validateResult('', 'required|email', 'email');
37$assert($requiredEn['message'] === 'Please fill in this field.', 'englische Benutzermeldung fehlt');
38
39$validator->setLanguage('es');
40$formatEs = $validator->validateResult('invalid', 'email', 'email');
41$assert($formatEs['message'] === 'Introduzca un valor válido.', 'spanische Benutzermeldung fehlt');
42
43$validator->setLanguage('');
44$assert($validator->getLanguage() === 'de', 'automatische Fallback-Sprache ist nicht Deutsch');
45
46$legacyRequired = $validator->validateResult('', 'email|min=1', 'email');
48 $legacyRequired['valid'] === false && $legacyRequired['code'] === 'min_length',
49 'bestehende min=1-Pflichtregel funktioniert nicht'
50);
51
52$optional = $validator->validateResult('', 'email', 'email');
53$assert($optional['valid'] === true, 'optionales leeres Feld ist nicht mehr rueckwaertskompatibel');
54$assert($validator->getErrors() === [], 'Fehler des vorherigen Laufs wurden nicht geloescht');
55
56$assert(!$validator->validate('0', 'email'), '0 umgeht weiterhin die E-Mail-Regel');
57$assert(!$validator->validate('1', 'date'), '1 umgeht weiterhin die Datumsregel');
58$assert(!$validator->validate(false, 'email'), 'boolean false umgeht weiterhin die E-Mail-Regel');
59$assert($validator->validate('0', 'boolean'), '0 wurde als Boolean abgelehnt');
60$assert($validator->validate('1', 'boolean'), '1 wurde als Boolean abgelehnt');
61$assert($validator->validate(false, 'boolean'), 'boolean false wurde als Boolean abgelehnt');
62$assert($validator->validate(true, 'boolean'), 'boolean true wurde als Boolean abgelehnt');
63
64$trimmed = $validator->validateResult(' name@example.org ', 'trim|required|email', 'email');
65$assert($trimmed['valid'] === true, 'trim-Regel wird nicht vor der E-Mail-Pruefung angewendet');
66$assert($trimmed['normalized'] === 'name@example.org', 'normalisierter trim-Wert ist falsch');
67$assert(!$validator->validate(' name@example.org ', 'required|email'), 'E-Mail wurde ohne trim still bereinigt');
68
69$assert($validator->validate('2026-07-23 12:34:56', 'datetime'), 'gueltiger Zeitstempel wurde abgelehnt');
70$assert($validator->validate('2026-07-23 12:34:56.123456', 'timestamp'), 'Mikrosekunden wurden abgelehnt');
71$assert(!$validator->validate('2026-07-23 12:34:56abc', 'datetime'), 'Anhang am Zeitstempel wurde akzeptiert');
72$assert(!$validator->validate('2026-07-23 24:00:00', 'datetime'), 'Stunde 24 wurde akzeptiert');
73$assert(!$validator->validate('2026-07-23 23:60:00', 'datetime'), 'Minute 60 wurde akzeptiert');
74$assert(!$validator->validate('2026-07-23 23:59:60', 'datetime'), 'Sekunde 60 wurde akzeptiert');
75$assert(!$validator->validate('2026-02-30 12:00:00', 'datetime'), 'ungueltiges Kalenderdatum wurde akzeptiert');
76$assert($validator->validate('2026-07-23', '*|date'), 'historische *|date-Regel wurde gebrochen');
77$assert(!$validator->validate('kein-datum', '*|date'), '*|date wertet die konkrete Datumsregel nicht aus');
78
79$assert($validator->validate('äöü', 'varchar|max=3'), 'Unicode-Laenge wird weiterhin als Byte-Laenge geprueft');
80$unicode = $validator->validateResult('äöü', 'varchar|max=2', 'text');
81$assert($unicode['valid'] === false && $unicode['code'] === 'max_length', 'Unicode-Maximallaenge ist falsch');
82$assert(($unicode['details']['actual'] ?? null) === 3, 'Unicode-Zeichenanzahl im Ergebnis ist falsch');
83
84$assert($validator->validate('9223372036854775807', 'bigint'), 'groesster BIGINT wurde abgelehnt');
85$assert($validator->validate('-9223372036854775808', 'bigint'), 'kleinster BIGINT wurde abgelehnt');
86$bigint = $validator->validateResult('9223372036854775808', 'bigint', 'id');
87$assert($bigint['valid'] === false && $bigint['code'] === 'invalid_range', 'BIGINT-Ueberlauf wurde akzeptiert');
88$assert(!$validator->validate('-9223372036854775809', 'bigint'), 'negativer BIGINT-Ueberlauf wurde akzeptiert');
89$assert($validator->validate('Sicher! 123', 'password|min=8|max=32'), 'Passwort-Regel lehnt erlaubte Zeichen ab');
90
91$array = $validator->validateResult(['ok', 'nicht ok'], 'array|required|parameter', 'selection');
92$assert($array['valid'] === false && $array['code'] === 'invalid_array_item', 'Array-Fehler wurde nicht erkannt');
93$assert(($array['details']['index'] ?? null) === 1, 'Index des fehlerhaften Array-Eintrags fehlt');
95 ($array['details']['item']['code'] ?? '') === 'invalid_format',
96 'Fehlerdetails des Array-Eintrags fehlen'
97);
98
99$assert($validator->validate('*', 'parameter+*'), 'bestehende Extra-Zeichen-Regel wurde gebrochen');
100$assert($validator->validate(['raw' => ['nested']], '*'), 'historische Vollpass-Regel akzeptiert nicht mehr jeden Wert');
101
102$invalidRule = $validator->validateResult('value', 'unknown-rule', 'field');
103$assert($invalidRule['valid'] === false && $invalidRule['code'] === 'invalid_rule', 'unbekannte Regel wurde akzeptiert');
104$assert(!empty($invalidRule['details']['invalid']), 'ungueltiger Regelteil fehlt im Ergebnis');
105
106echo "OK: Strukturierte Validator-Ergebnisse, Typgrenzen, required/trim und Unicode sind korrekt.\n";
Zentrale, strikt pruefende Eingabevalidierung.
if(!defined( 'IMG_WEBP')) define( 'IMG_WEBP'
exit
Definition index.php:146