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.
82 lines
3 KiB
PHP
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"
|
|
);
|
|
}
|
|
}
|
|
}
|