Steuerkram/tests/58_EreignisAutoReloadTest.php

82 lines
3.1 KiB
PHP

<?php
declare(strict_types=1);
/**
* Test 58: Auto-Reload der Ereignisanzeige
*
* Prüft, dass die Ereignisanzeige einen Ein-/Aus-Button für automatisches
* Neuladen besitzt, per JavaScript periodisch aktualisiert wird und
* dass der zugehörige JSON-Endpunkt sowie die Route existieren.
*
* Seit Issue #165 gibt es statt der eigenen Nextcloud-Seite eine Übersicht
* über alle Bereiche; der Nextcloud-Import ist dort ein Filter.
*/
class EreignisAutoReloadTest extends TestCase
{
protected string $testName = 'Test 58: Ereignisanzeige aktualisiert sich automatisch (Ein-/Aus-Button)';
public function run(): void
{
$viewFile = __DIR__ . '/../src/Views/ereignisse/index.php';
$view = file_get_contents($viewFile);
$this->assert($view !== false, 'View-Datei ereignisse/index.php ist lesbar');
$this->assert(
str_contains($view, 'id="events-autoreload-toggle"'),
'Ein-/Aus-Button für Auto-Reload ist vorhanden'
);
$this->assert(
str_contains($view, 'localStorage'),
'Zustand des Auto-Reload-Buttons wird persistiert (localStorage)'
);
$this->assert(
str_contains($view, 'setInterval') && str_contains($view, "'/ereignisse/data'"),
'JavaScript pollt periodisch den Daten-Endpunkt'
);
$this->assert(
str_contains($view, 'window.location.search'),
'Der Poll übernimmt den eingestellten Filter'
);
$this->assert(
str_contains($view, "toggle.addEventListener('change'"),
'Toggle-Switch schaltet Auto-Reload per Umlegen ein/aus'
);
$this->assert(
str_contains($view, 'class="switch"') && str_contains($view, 'type="checkbox"'),
'Auto-Reload wird als iOS-artiger Toggle-Switch (Checkbox) dargestellt'
);
// Partial für Tabellen-Body existiert und wird sowohl beim initialen
// Laden als auch für den Daten-Endpunkt verwendet
$partialFile = __DIR__ . '/../src/Views/ereignisse/_body.php';
$this->assert(file_exists($partialFile), 'Partial _body.php existiert');
$controllerFile = __DIR__ . '/../src/Controllers/EventController.php';
$controller = file_get_contents($controllerFile);
$this->assert(
str_contains($controller, 'function indexData'),
'EventController::indexData() ist implementiert'
);
$this->assert(
substr_count($controller, "'ereignisse/_body'") >= 2,
'Daten-Endpunkt rendert dasselbe Partial wie die initiale Seite'
);
$routesFile = __DIR__ . '/../public/index.php';
$routes = file_get_contents($routesFile);
$this->assert(
str_contains($routes, "'/ereignisse/data'") && str_contains($routes, 'indexData'),
'Route /ereignisse/data ist registriert'
);
$this->assert(
str_contains($routes, "'/ereignisse/nextcloud-import/data'"),
'Der bisherige Nextcloud-Endpunkt bleibt erreichbar'
);
}
}