Upload via GUI (335 Dateien)

This commit is contained in:
2026-10-24 20:14:43 +00:00
parent 793fe6162e
commit c270c0b6cf
21 changed files with 2955 additions and 1 deletions
+32
View File
@@ -272,6 +272,38 @@ $c2 = plugin_catalog_cached();
$check($c1['ok'] && $c2['ok'] && $fetches === 1, 'Katalog wird eine Stunde zwischengespeichert (ein Abruf für zwei Aufrufe)');
plugin_catalog_cached(true);
$check($fetches === 2, 'Aktualisieren erzwingt einen neuen Abruf');
// Zwischenspeicher ist kurz (5 Minuten), die Plugin-Seite verlangt höchstens eine Minute Alter, Serverausfall zeigt den letzten Stand
$setAge = function (int $seconds): void {
$c = json_decode((string) get_setting('plugin_catalog_cache', ''), true);
$c['at'] = time() - $seconds;
set_setting('plugin_catalog_cache', json_encode($c));
};
$fetches0 = $fetches;
$setAge(200);
plugin_catalog_cached();
$check($fetches === $fetches0, 'Katalog ist nach 3 Minuten noch frisch genug (kein Abruf)');
plugin_catalog_cached(false, 60);
$check($fetches === $fetches0 + 1, 'die Plugin-Seite verlangt höchstens eine Minute Alter: neuer Abruf beim Öffnen');
$setAge(400);
plugin_catalog_cached();
$check($fetches === $fetches0 + 2, 'nach über 5 Minuten wird der Katalog von selbst neu geladen (kein Klick auf „Katalog aktualisieren“ nötig)');
$setAge(400);
$GLOBALS['deskhub_http_get'] = function (string $url, int $max) use (&$fetches): array { $fetches++; return [0, null, 'Verbindung fehlgeschlagen']; };
$stale = plugin_catalog_cached();
$check($stale['ok'] && !empty($stale['stale']) && count($stale['plugins']) === 2 && $fetches === $fetches0 + 3, 'Server nicht erreichbar: die Seite zeigt den letzten Stand (stale)');
plugin_catalog_cached();
plugin_catalog_cached(false, 60);
$check($fetches === $fetches0 + 3, 'danach wird zwei Minuten lang nicht erneut gefragt (die Seite wartet nicht bei jedem Aufruf)');
$btn = plugin_catalog_cached(true);
$check(!$btn['ok'] && $fetches === $fetches0 + 4, 'der Knopf „Katalog aktualisieren“ fragt trotzdem und meldet den Fehler');
$GLOBALS['deskhub_http_get'] = function (string $url, int $max) use (&$offServed, $offPkg, &$fetches): array {
if (str_contains($url, 'catalog.php')) { $fetches++; return [200, json_encode($offServed), null]; }
return [200, file_get_contents($offPkg), null];
};
$setAge(400);
set_setting('plugin_catalog_fail_at', '0');
$ok = plugin_catalog_cached();
$check($ok['ok'] && empty($ok['stale']), 'nach der Erholung des Servers wieder ein frischer Katalog');
$r = plugin_catalog_install($pdo, 'offiziell');
$check($r['ok'] && $r['signed'], 'Installation aus dem offiziellen Katalog gelingt: ' . json_encode($r));
plugin_uninstall($pdo, 'offiziell');