Finanzmanager/tests/48_E2EEinstellungenTest.php
fds2610-bot 5695e2e3df Fix n.n.: E2E-Läufe sichern Einstellungen, Kippschalter statt Ankreuzfeldern
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-29 11:37:52 +02:00

52 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
use Finanzmanager\Database;
use Finanzmanager\Models\Einstellung;
use Finanzmanager\Services\E2EEinstellungen;
/**
* Die Einstellungen überleben einen E2E-Lauf: Was der Lauf ändert, anlegt oder
* löscht, ist nach dem Wiederherstellen wieder weg. Anlass: Der Bargeld-Test
* leerte die Adresse des Bargeld-Tools in der echten Instanz.
*/
class E2EEinstellungenTest extends TestCase
{
protected string $testName = 'Test 48: E2E-Einstellungen sichern und wiederherstellen';
public function run(): void
{
$pfad = $this->tempPfad('.json');
Einstellung::set('e2e_probe_url', 'https://kasse.example.net', 'bargeld');
Einstellung::set('e2e_probe_tage', '10', 'bargeld');
$vorher = Database::fetchAll('SELECT * FROM einstellungen ORDER BY schluessel');
$anzahl = E2EEinstellungen::sichern($pfad);
$this->assertEquals(count($vorher), $anzahl, 'Alle Zeilen werden gesichert');
// Der Lauf ändert, leert, löscht und legt an.
Einstellung::set('e2e_probe_url', '', 'bargeld');
Einstellung::set('e2e_probe_tage', '99', 'bargeld');
Einstellung::set('e2e_probe_neu', 'x', 'allgemein');
Database::execute("DELETE FROM einstellungen WHERE bereich = 'darstellung'");
$this->assertNull(E2EEinstellungen::sichern($pfad), 'Eine vorhandene Sicherung wird nicht überschrieben');
$wieder = E2EEinstellungen::wiederherstellen($pfad);
$this->assertEquals(count($vorher), $wieder, 'Alle Zeilen kommen zurück');
Einstellung::cacheLeeren();
$this->assertEquals('https://kasse.example.net', Einstellung::get('e2e_probe_url'), 'Die geleerte Adresse ist wieder da');
$this->assertEquals('10', Einstellung::get('e2e_probe_tage'), 'Der geänderte Wert ist zurückgesetzt');
$this->assertNull(Einstellung::get('e2e_probe_neu'), 'Vom Lauf angelegte Einstellungen verschwinden');
$this->assertEquals(
$vorher,
Database::fetchAll('SELECT * FROM einstellungen ORDER BY schluessel'),
'Die Tabelle ist Zeile für Zeile wie vorher, einschließlich Bereich und Änderungszeit'
);
$this->assert(!is_file($pfad), 'Die Sicherung ist danach gelöscht');
$this->assertNull(E2EEinstellungen::wiederherstellen($pfad), 'Ohne Sicherung geschieht nichts');
}
}