Finanzmanager/tests/02_EinstellungenTest.php
fds2610-bot b1712bb7ea Phase 0: Projektgerüst mit nginx, php-fpm und MariaDB
Docker Compose mit drei Services (nginx auf Port 8000), Migrationsmechanik,
Update- und Backup-Skript. Anwendung: Router mit CSRF-Prüfung, Anmeldung und
Ersteinrichtung, zentraler Einstellungsdialog mit Reitern, ein- und
ausschaltbares Debug-Log mit Maskierung von Zugangsdaten.

Layout nach Vorbild des FinanzManagers: feste Navigation links,
Werkzeugleiste oben, Tab-Leiste; Farbschema hell/dunkel/System.

Tests: 51 PHP-Prüfungen und 7 Playwright-Tests, alle grün.
2026-08-09 20:21:42 +02:00

82 lines
3 KiB
PHP

<?php
declare(strict_types=1);
use Finanzmanager\Models\Einstellung;
class EinstellungenTest extends TestCase
{
protected string $testName = 'Test 02: Einstellungen';
public function run(): void
{
$this->grundwerteVorhanden();
$this->schreibenUndLesen();
$this->typHelfer();
$this->bereicheVollstaendig();
}
private function grundwerteVorhanden(): void
{
Einstellung::cacheLeeren();
$this->assertEquals('Privat', Einstellung::get('mandant_name'), 'Grundwert mandant_name aus der Migration');
$this->assertEquals('EUR', Einstellung::get('waehrung'), 'Grundwert waehrung aus der Migration');
$this->assertEquals('standardwert', Einstellung::get('gibt_es_nicht', 'standardwert'),
'Unbekannter Schlüssel liefert den Standardwert');
}
private function schreibenUndLesen(): void
{
Einstellung::set('mandant_name', 'Haushalt Schepmann', 'allgemein');
$this->assertEquals('Haushalt Schepmann', Einstellung::get('mandant_name'),
'Geänderter Wert wird zurückgelesen');
// set() muss den Cache verwerfen, sonst liefert get() den alten Wert.
Einstellung::set('mandant_name', 'Zweite Änderung', 'allgemein');
$this->assertEquals('Zweite Änderung', Einstellung::get('mandant_name'),
'Zweite Änderung umgeht den Cache');
Einstellung::set('neuer_schluessel', 'wert', 'diagnose');
$gruppen = Einstellung::nachBereich();
$this->assert(
isset($gruppen['diagnose']['neuer_schluessel']),
'Neuer Schlüssel landet im richtigen Bereich'
);
}
private function typHelfer(): void
{
Einstellung::set('debug_log_aktiv', '1', 'diagnose');
$this->assert(Einstellung::getBool('debug_log_aktiv'), 'getBool erkennt "1" als wahr');
Einstellung::set('debug_log_aktiv', '0', 'diagnose');
$this->assert(!Einstellung::getBool('debug_log_aktiv'), 'getBool erkennt "0" als falsch');
$this->assert(
Einstellung::getBool('gibt_es_nicht', true),
'getBool nutzt den Standardwert bei unbekanntem Schlüssel'
);
Einstellung::set('zeilen_pro_seite', '250', 'darstellung');
$this->assertEquals(250, Einstellung::getInt('zeilen_pro_seite'), 'getInt wandelt in eine Zahl');
$this->assertEquals(100, Einstellung::getInt('gibt_es_nicht', 100), 'getInt nutzt den Standardwert');
}
private function bereicheVollstaendig(): void
{
// Jeder in der Datenbank benutzte Bereich braucht einen Reiter im Dialog,
// sonst wären die Werte nicht mehr erreichbar.
$bereiche = array_column(
Finanzmanager\Database::fetchAll('SELECT DISTINCT bereich FROM einstellungen'),
'bereich'
);
foreach ($bereiche as $bereich) {
$this->assert(
array_key_exists($bereich, Einstellung::BEREICHE),
"Bereich '{$bereich}' hat einen Reiter im Einstellungsdialog"
);
}
}
}