Beim Zuweisen einer Kategorie fragt der Finanzmanager beim Bargeld-Tool (FSCash) nach, ob es zum Betrag dort schon eine Buchung gibt. Eingerichtet wird das unter Verwaltung → Bargeld-Tool: Adresse, Zugangsdaten (Passwort AES-verschlüsselt), Suchzeitraum und die Auswahl der abzugleichenden Kategorien. Die Vormerkung steht als `bargeld_abgleich` an der Kategorie selbst, nicht als Nummernliste in den Einstellungen – so verschwindet sie mit der Kategorie. Geprüft wird nur, was geprüft werden soll: Kategorie an der Buchung, Kategorie vorgemerkt, Adresse konfiguriert. Fällt eines weg, verschwindet der Status. Gesucht wird rückwärts ab dem Buchungsdatum, weil Bargeld ausgegeben wird, bevor der Umsatz auf dem Konto ankommt. Im Kontoblatt steht das Ergebnis zwischen Klasse und Betrag: grauer Kreis, grüner Haken, rotes X, Ausrufezeichen. Das Ausrufezeichen behält die Textfarbe des Farbschemas – der Fehler liegt beim Abruf, nicht bei der Buchung. Ohne hinterlegte Adresse entfällt die Spalte. Ein Fehlschlag ist ein Ergebnis, kein Abbruch: Die Kategorie wird auch dann gespeichert, wenn das Bargeld-Tool schweigt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
84 lines
3.2 KiB
PHP
84 lines
3.2 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
|
||
// oder eine eigene Seite (Einstellung::EIGENE_SEITEN), 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)
|
||
|| array_key_exists($bereich, Einstellung::EIGENE_SEITEN),
|
||
"Bereich '{$bereich}' ist erreichbar – als Reiter oder über eine eigene Seite"
|
||
);
|
||
}
|
||
}
|
||
}
|