Paillasse/portail/tests/Feature/PagesPubliquesTest.php
Adam Belkacemi e4a6aaebb1 ajoute les pages légales, la purge RGPD et sert polices et scripts depuis le portail
Pages /legal et /confidentialite réécrites d'après le système réel, purge
des classes archivées depuis 90 jours (prouvée par Pest), archivage côté
prof. Polices, xterm.js et CodeMirror ne sont plus chargés depuis Google
ni jsDelivr. Pages d'aperçu signalées, sans vrais établissements ni faux
chiffres. Journaux Laravel gardés 14 jours.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:07:25 +02:00

37 lines
1.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use Illuminate\Support\Facades\Route;
// Toutes les pages publiques sans paramètre doivent s'afficher : la page
// /cours a été en erreur 500 de l'étape 8 à l'étape 12 sans que personne
// ne le voie.
test('chaque page publique s’affiche sans erreur', function () {
$pages = collect(Route::getRoutes())
->filter(fn ($r) => in_array('GET', $r->methods(), true)
&& $r->getName() !== null
&& ! str_contains($r->uri(), '{')
&& ! collect($r->gatherMiddleware())->contains(fn ($m) => is_string($m) && str_starts_with($m, 'auth')))
->reject(fn ($r) => str_starts_with($r->uri(), 'horizon') || str_starts_with($r->uri(), '_') || $r->uri() === 'up')
// Redirections voulues (ex. /statut vers le site de statut).
->reject(fn ($r) => $r->getActionName() === '\\Illuminate\\Routing\\RedirectController');
expect($pages)->not->toBeEmpty();
$echecs = $pages->mapWithKeys(fn ($r) => [$r->uri() => $this->get('/'.ltrim($r->uri(), '/'))->getStatusCode()])
->reject(fn ($code) => $code === 200);
expect($echecs->all())->toBe([]);
});
// Étape 14 : la politique de confidentialité affirme qu'aucune page ne fait
// partir l'adresse IP du visiteur chez un fournisseur de polices.
test('aucune page publique ne charge de police depuis un service externe', function () {
$pages = collect(Route::getRoutes())
->filter(fn ($r) => in_array('GET', $r->methods(), true) && $r->getName() !== null && ! str_contains($r->uri(), '{'))
->reject(fn ($r) => collect($r->gatherMiddleware())->contains(fn ($m) => is_string($m) && str_starts_with($m, 'auth')));
foreach ($pages as $route) {
$html = $this->get('/'.ltrim($route->uri(), '/'))->getContent();
expect($html)->not->toMatch('#fonts\.(googleapis|gstatic|bunny)\.(com|net)#', "page /{$route->uri()}");
}
});