Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
use OpenNIT\Controllers\TicketController;
/**
* Deckt ab, dass „Zurück" aus einem Ticket wieder in derselben Liste landet:
* Der gemerkte Zustand muss alle Parameter führen, die die Liste kennt, und
* die Kopfzeile des Tickets muss ihn benutzen.
*/
return static function (): void {
/** @return list<string> */
$listenSchluessel = static function (): array {
$c = new \ReflectionClass(TicketController::class);
/** @var list<string> $werte */
$werte = $c->getConstant('LIST_STATE_KEYS');
return $werte;
};
$quelle = static fn(string $pfad): string
=> (string)file_get_contents(dirname(__DIR__) . '/' . $pfad);
test('Der gemerkte Zustand führt jeden Filter der Liste', function () use ($listenSchluessel, $quelle) {
// Die Liste reicht ihre Filter über $request->only([...]) an die Vorlage
// weiter; genau diese Parameter beschreiben den Zustand.
$treffer = [];
preg_match(
"/\\\$request->only\(\[\s*'preset'(.*?)\]\)/s",
$quelle('src/Controllers/TicketController.php'),
$treffer
);
assertTrue($treffer !== [], 'Die Filterliste der Ticket-Übersicht ist nicht auffindbar');
preg_match_all("/'([a-z_]+)'/", "'preset'" . $treffer[1], $namen);
$gemerkt = $listenSchluessel();
foreach ($namen[1] as $name) {
assertTrue(in_array($name, $gemerkt, true), $name . ' fehlt im gemerkten Listenzustand');
}
});
test('Auch die Seitenzahl gehört zum Zustand', function () use ($listenSchluessel) {
assertTrue(in_array('_page', $listenSchluessel(), true), 'Die Seite muss erhalten bleiben');
});
test('Die Ticket-Kopfzeile führt auf die gemerkte Liste zurück', function () use ($quelle) {
$vorlage = $quelle('templates/tickets/show.php');
assertTrue(
str_contains($vorlage, 'href="<?= $this->e($back_url ?? \'/tickets\') ?>" class="ts-head-back"'),
'Der Zurück-Pfeil zeigt nicht auf die gemerkte Liste'
);
});
test('Die Übersicht merkt sich ihren Zustand vor dem Rendern', function () use ($quelle) {
$controller = $quelle('src/Controllers/TicketController.php');
assertTrue(
str_contains($controller, '$this->rememberListState($request);'),
'Die Übersicht hält ihren Zustand nicht fest'
);
assertTrue(
str_contains($controller, "'back_url' => \$this->listStateUrl(),"),
'Die Ticket-Ansicht reicht das Ziel für Zurück nicht durch'
);
});
};