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'); } }