Ajouter les pages personnalisées au site public

This commit is contained in:
Alexandre NOEL 2026-10-12 10:42:59 +02:00
commit 21ee1bec36
17 changed files with 428 additions and 65 deletions

View file

@ -34,6 +34,7 @@ foreach (
'SpeciesService',
'LabReferenceService',
'PublicContentFormatter',
'PublicPageService',
'ShelterRoomService',
'GlobalSearchService',
'PrivateMediaService',
@ -306,6 +307,25 @@ try {
$assert(str_contains($layout, 'rel="noopener noreferrer"'), 'Les liens externes ne sont pas protégés');
$assert(!str_contains($contact, '$socialNetworks = ['), 'Le catalogue social est encore dupliqué');
});
$test('Les pages publiques personnalisées conservent ordre et textes longs', function () use ($assert): void {
$longText = str_repeat('Une histoire du refuge. ', 1200);
PublicPageService::saveAll([
['title' => 'Nos partenaires', 'slug' => 'nos-partenaires', 'content' => 'Partenaires', 'enabled' => '1', 'position' => '2'],
['title' => 'Notre histoire', 'slug' => 'notre-histoire', 'content' => $longText, 'enabled' => '1', 'position' => '1'],
]);
$pages = PublicPageService::all(true);
$assert(count($pages) === 2, 'Les pages personnalisées ne sont pas enregistrées');
$assert($pages[0]['slug'] === 'notre-histoire', 'L’ordre choisi n’est pas conservé');
$assert($pages[0]['content'] === trim($longText), 'Le texte long a été tronqué');
$assert(PublicPageService::findBySlug('notre-histoire') !== null, 'La page publiée est introuvable');
$assert(PublicPageService::normalizeSlug('Équipe & refuge') === 'equipe-refuge', 'L’adresse automatique est invalide');
$view = file_get_contents(__DIR__ . '/../app/Views/settings_public_site.php');
$assert(str_contains($view, 'id="public-page-add"'), 'Le bouton d’ajout est absent');
$assert(str_contains($view, 'draggable="true"'), 'Le glisser-déposer est absent');
$assert(str_contains($view, 'public-page-up'), 'Le déplacement accessible est absent');
$controller = file_get_contents(__DIR__ . '/../app/Controllers/PublicSiteController.php');
$assert(str_contains($controller, "'/site/page/'"), 'La route publique personnalisée est absente');
});
$test('Authentification et mot de passe haché', function () use ($db, $assert): void {
$assert(ini_get('session.use_strict_mode') === '1', 'Le mode strict des sessions est désactivé');
$hash = password_hash('MotDePasseSolide!', PASSWORD_DEFAULT);