Finanzmanager/tests/55_DatenbanksicherungTest.php
fds2610-bot 9dbd507433 Fix n.n.: Verwaltung – Kachel Backup mit Backup und Restore der gesamten Datenbank
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 16:08:53 +02:00

52 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
use Finanzmanager\Database;
use Finanzmanager\Services\Datenbanksicherung;
class DatenbanksicherungTest extends TestCase
{
protected string $testName = 'Test 55: Datenbanksicherung';
public function run(): void
{
$this->rundlauf();
$this->ungueltigeDatei();
}
private function rundlauf(): void
{
Database::execute("INSERT INTO einstellungen (schluessel, wert, bereich) VALUES ('sicherungstest', 'a', 'test')");
$vorher = (int)Database::fetchValue('SELECT COUNT(*) FROM einstellungen');
$sicherung = Datenbanksicherung::erzeugen();
$this->assert(strlen($sicherung) > 0, 'Sicherung ist nicht leer');
Database::execute("DELETE FROM einstellungen WHERE schluessel = 'sicherungstest'");
Database::execute("INSERT INTO einstellungen (schluessel, wert, bereich) VALUES ('nach_sicherung', 'b', 'test')");
$anzahl = Datenbanksicherung::wiederherstellen($sicherung);
$this->assertEquals($vorher, $anzahl['einstellungen'], 'Zeilenzahl der Tabelle einstellungen');
$this->assertEquals(1, (int)Database::fetchValue("SELECT COUNT(*) FROM einstellungen WHERE schluessel = 'sicherungstest'"),
'Gesicherte Zeile ist wieder da');
$this->assertEquals(0, (int)Database::fetchValue("SELECT COUNT(*) FROM einstellungen WHERE schluessel = 'nach_sicherung'"),
'Zeile nach der Sicherung ist verschwunden');
}
private function ungueltigeDatei(): void
{
$vorher = (int)Database::fetchValue('SELECT COUNT(*) FROM einstellungen');
foreach (['kein gzip', gzencode('kein json'), gzencode('{"kennung":"fremd"}')] as $inhalt) {
$geworfen = false;
try {
Datenbanksicherung::wiederherstellen($inhalt);
} catch (\RuntimeException) {
$geworfen = true;
}
$this->assert($geworfen, 'Ungültige Datei wird abgelehnt');
}
$this->assertEquals($vorher, (int)Database::fetchValue('SELECT COUNT(*) FROM einstellungen'),
'Bestand nach abgelehnter Datei unverändert');
}
}