Steuerkram/tests/94_RequestHelperTest.php
fds2610-bot 23efce3196 Fix #161: Restposten aus Tech-Debt-Analyse (O-CHAT.html, fints.php/bankimport.php, Request-Klasse)
(a) public/O-CHAT.html nach BEISPIELE/ verschoben, Test 93 hält den Webroot sauber.
(b) bank/fints.php in Teil-Views + public/static/js/fints.js aufgeteilt.
(c) settings/bankimport.php in Teil-Views + public/static/js/bankimport.js aufgeteilt.
(d) src/Request.php angelegt, BankController als erster Controller umgestellt.
2026-08-18 13:12:12 +02:00

96 lines
5.1 KiB
PHP

<?php
declare(strict_types=1);
use Steuerkram\Request;
/**
* Test 94: Request-Helferklasse (Fix #161d)
*
* 176 Controller-Stellen griffen bisher direkt und uneinheitlich auf
* $_POST/$_GET zu (mal `?? ''`, mal `isset()`, mal `(int)`, mal `trim()`).
* Request::post()/postInt()/postFloat()/postDate()/get()/has() bündeln die
* Typumwandlung an einer Stelle. Dieser Test deckt die Helfer isoliert ab,
* ohne einen echten HTTP-Request zu benötigen.
*/
class RequestHelperTest extends TestCase
{
protected string $testName = 'Test 94: Request-Helferklasse';
public function run(): void
{
$_POST = [];
$_GET = [];
// ── post() ───────────────────────────────────────────────
$this->assertEquals('', Request::post('fehlt'), 'post(): fehlender Wert liefert Default ""');
$this->assertEquals('x', Request::post('fehlt', 'x'), 'post(): fehlender Wert liefert übergebenen Default');
$_POST['feld'] = 'wert';
$this->assertEquals('wert', Request::post('feld'), 'post(): vorhandener Wert wird durchgereicht');
// ── postInt() ────────────────────────────────────────────
unset($_POST['n']);
$this->assertEquals(0, Request::postInt('n'), 'postInt(): fehlender Wert liefert Default 0');
$this->assertEquals(7, Request::postInt('n', 7), 'postInt(): fehlender Wert liefert übergebenen Default');
$_POST['n'] = '';
$this->assertEquals(7, Request::postInt('n', 7), 'postInt(): leerer String liefert Default');
$_POST['n'] = 'abc';
$this->assertEquals(0, Request::postInt('n', 7), 'postInt(): "abc" wird zu 0 (kein Default, da Wert gesetzt ist)');
$_POST['n'] = '12';
$this->assertEquals(12, Request::postInt('n'), 'postInt(): "12" wird zu 12');
$_POST['n'] = '12.7';
$this->assertEquals(12, Request::postInt('n'), 'postInt(): "12.7" wird zu 12 (int-Cast schneidet ab)');
// ── postFloat() ──────────────────────────────────────────
unset($_POST['betrag']);
$this->assertEquals(0.0, Request::postFloat('betrag'), 'postFloat(): fehlender Wert liefert Default 0.0');
$this->assertEquals(9.5, Request::postFloat('betrag', 9.5), 'postFloat(): fehlender Wert liefert übergebenen Default');
$_POST['betrag'] = '';
$this->assertEquals(9.5, Request::postFloat('betrag', 9.5), 'postFloat(): leerer String liefert Default');
$_POST['betrag'] = '1234,56';
$this->assertEquals(1234.56, Request::postFloat('betrag'), 'postFloat(): deutsches Dezimalkomma wird korrekt geparst');
$_POST['betrag'] = '-119,00';
$this->assertEquals(-119.0, Request::postFloat('betrag'), 'postFloat(): negativer Betrag mit Komma');
// ── postDate() ───────────────────────────────────────────
unset($_POST['datum']);
$this->assertEquals(null, Request::postDate('datum'), 'postDate(): fehlender Wert liefert null');
$_POST['datum'] = '';
$this->assertEquals(null, Request::postDate('datum'), 'postDate(): leerer Wert liefert null');
$_POST['datum'] = '2026-05-15';
$this->assertEquals('2026-05-15', Request::postDate('datum'), 'postDate(): gültiges Format (Y-m-d) wird normalisiert zurückgegeben');
$_POST['datum'] = 'nicht-valide';
$this->assertEquals(null, Request::postDate('datum'), 'postDate(): ungültiges Format liefert null');
$_POST['datum'] = '15.05.2026';
$this->assertEquals('2026-05-15', Request::postDate('datum', 'd.m.Y'), 'postDate(): abweichendes Format wird korrekt geparst und normalisiert');
$this->assertEquals(null, Request::postDate('datum'), 'postDate(): Wert passt nicht zum Default-Format Y-m-d');
// ── get() ────────────────────────────────────────────────
$this->assertEquals('', Request::get('fehlt'), 'get(): fehlender Wert liefert Default ""');
$this->assertEquals(1, Request::get('seite', 1), 'get(): fehlender Wert liefert übergebenen Default');
$_GET['seite'] = '3';
$this->assertEquals('3', Request::get('seite', 1), 'get(): vorhandener Wert wird durchgereicht');
// ── has() ────────────────────────────────────────────────
unset($_POST['sandbox']);
$this->assert(Request::has('sandbox') === false, 'has(): fehlendes Feld liefert false');
$_POST['sandbox'] = '1';
$this->assert(Request::has('sandbox') === true, 'has(): vorhandenes Feld liefert true');
$_POST['leer'] = '';
$this->assert(Request::has('leer') === true, 'has(): auch ein leerer, aber gesetzter Wert zählt als vorhanden');
$_POST = [];
$_GET = [];
}
}