52 lines
2.1 KiB
PHP
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');
|
|
}
|
|
}
|