Steuerkram/tests/101_NextcloudWatchdogTest.php
fds2610-bot 69fcc84301 Fix #208: Totmannschalter für den Nextcloud-Import
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 17:25:26 +02:00

51 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
use Steuerkram\Services\NextcloudWatchdog;
/**
* Test 101: Totmannschalter für den Nextcloud-Import (Issue #208)
*/
class NextcloudWatchdogTest extends TestCase
{
protected string $testName = 'Test 101: Nextcloud-Import-Überwachung';
public function run(): void
{
$now = strtotime('2026-09-20 12:00:00');
$url = 'https://cloud.example.com';
$this->assert(
NextcloudWatchdog::evaluate($url, '2026-09-20 11:55:00', 24, $now) === null,
'Frischer Lauf: keine Warnung'
);
$this->assert(
NextcloudWatchdog::evaluate($url, '2026-09-19 12:00:00', 24, $now) === null,
'Genau an der Schwelle: keine Warnung'
);
$alt = NextcloudWatchdog::evaluate($url, '2026-08-30 12:00:00', 24, $now);
$this->assertNotEmpty($alt, 'Drei Wochen alter Lauf: Warnung');
$this->assert(str_contains((string)$alt, '30.08.2026'), 'Warnung nennt den letzten Lauf');
$this->assert(
NextcloudWatchdog::evaluate($url, '2026-08-30 12:00:00', 0, $now) === null,
'Schwelle 0 schaltet die Überwachung ab'
);
$this->assert(
NextcloudWatchdog::evaluate('', null, 24, $now) === null,
'Ohne konfigurierte Nextcloud keine Warnung'
);
$this->assertNotEmpty(
NextcloudWatchdog::evaluate($url, null, 24, $now),
'Konfiguriert, aber nie gelaufen: Warnung'
);
// Zeitstempel in der Datenbank
\Steuerkram\Database::execute("UPDATE company_settings SET nextcloud_url = ?, nextcloud_alarm_stunden = 24, nextcloud_last_run = NULL WHERE id = 1", [$url]);
$this->assertNotEmpty(NextcloudWatchdog::warning(), 'DB: ohne Zeitstempel Warnung');
NextcloudWatchdog::markRun();
$this->assert(NextcloudWatchdog::warning() === null, 'DB: nach markRun() keine Warnung');
\Steuerkram\Database::execute("UPDATE company_settings SET nextcloud_last_run = NOW() - INTERVAL 3 DAY WHERE id = 1");
$this->assertNotEmpty(NextcloudWatchdog::warning(), 'DB: 3 Tage alter Zeitstempel löst Warnung aus');
}
}