Test : Page d'accueil
Slice : Slice 1 (Page dâaccueil)
Cycle : DOC â SPEC â CODE â TEST â INTĂG
Statut : TEST
1. Objectif
Section titled â1. ObjectifâValider lâimplĂ©mentation de la page dâaccueil avec rendu PageBuilder depuis Sanity en mode SSG.
2. Prérequis
Section titled â2. PrĂ©requisâ- Sanity Studio configurĂ© avec le schĂ©ma
page - Page Sanity créée avec slug â/â
- Contenu PageBuilder ajouté (hero, features, etc.)
- Middleware preview configuré
3. Tests de build
Section titled â3. Tests de buildâ3.1. Build Astro
Section titled â3.1. Build AstroâCommande :
task build:webAttendu :
- Build réussi sans erreurs
- Page dâaccueil gĂ©nĂ©rĂ©e en HTML statique
- Fichiers CSS générés
- Aucune erreur GROQ
RĂ©sultat : â Build rĂ©ussi
4. Tests de rendu local
Section titled â4. Tests de rendu localâ4.1. DĂ©marrage du serveur de dĂ©veloppement
Section titled â4.1. DĂ©marrage du serveur de dĂ©veloppementâCommande :
cd apps/webnpx astro dev --backgroundAttendu :
- Serveur démarré sur
http://localhost:4321 - Message :
Dev server running at http://localhost:4321
4.2. Test de la page dâaccueil
Section titled â4.2. Test de la page dâaccueilâCommande :
curl http://localhost:4321/Attendu :
- HTML valide retourné
- Structure MainLayout présente
- Contenu PageBuilder rendu
RĂ©sultat : â Page accessible et rendue
4.3. ArrĂȘt du serveur
Section titled â4.3. ArrĂȘt du serveurâCommande :
npx astro dev stop5. Tests mode preview
Section titled â5. Tests mode previewâ5.1. Configuration preview dans Sanity Studio
Section titled â5.1. Configuration preview dans Sanity StudioâFichiers modifiĂ©s :
apps/studio/schemaTypes/page.ts: Configuration preview ajoutéeapps/studio/sanity.config.ts: Logique de preview pour type page
Configuration :
- Preview URL générée automatiquement pour le type page
- Gestion spĂ©cifique du slug â/â pour la page dâaccueil
- Bouton âOpen Previewâ fonctionnel dans le Studio
5.2. Démarrage du middleware preview
Section titled â5.2. DĂ©marrage du middleware previewâCommande :
./scripts/inject_secret_to_cloudflare.sh --env=dev --service=preview-middlewareAttendu :
- Secret injecté dans Cloudflare
- Worker créé/déployé
.dev.varscréé pour tests locaux
5.3. Démarrage local du middleware
Section titled â5.3. DĂ©marrage local du middlewareâCommande :
cd services/preview-middlewarenpx wrangler dev --env dev --show-interactive-dev-session false --port 8791Attendu :
- Middleware démarré sur
http://localhost:8791 - Message :
Ready on http://localhost:8791
5.4. Test de validation du secret
Section titled â5.4. Test de validation du secretâCommande :
curl "http://localhost:8791/api/preview?secret=$(grep SANITY_PREVIEW_SECRET .env | cut -d '=' -f2- | tr -d '"')&slug=/"Attendu :
- Redirect avec cookie
sanity-preview - Code HTTP 307
RĂ©sultat : â Middleware fonctionne
5.5. Test depuis Sanity Studio
Section titled â5.5. Test depuis Sanity StudioâProcĂ©dure :
- Ouvrir Sanity Studio
- CrĂ©er/Ă©diter un document page avec slug â/â ou â/testâ
- Cliquer sur âOpen Previewâ
- VĂ©rifier que la page correspondante sâaffiche avec le contenu preview
- Cliquer sur âQuitter la previewâ pour tester la route exit-preview
Attendu :
- Navigation vers la page correspondante (accueil pour â/â, /test pour â/testâ)
- Cookie
sanity-previewposé - BanniÚre preview affichée
- Contenu draft visible si mode preview activé
- Route exit-preview supprime le cookie et redirige vers â/â
6. Configuration SSG
Section titled â6. Configuration SSGâ6.1. VĂ©rification de la configuration
Section titled â6.1. VĂ©rification de la configurationâFichier : apps/web/src/pages/index.astro
Configuration :
---export const prerender = true;---Attendu :
prerender = trueprésent- Page générée en HTML statique au build
- Conforme Ă lâADR-SSR-Pur.md
RĂ©sultat : â Configuration correcte
7. Intégration Sanity
Section titled â7. IntĂ©gration Sanityâ7.1. Query GROQ
Section titled â7.1. Query GROQâQuery utilisĂ©e :
*[_type == "page" && slug.current == "/"][0]{ title, description, pageBuilder[]{ _type, _key, ...select( _type == "hero" => {...}, _type == "features" => {...}, ... ) }}Attendu :
- Syntaxe GROQ valide
- Récupération correcte des données
- Select conditionnel fonctionne
RĂ©sultat : â Query valide
7.2. Mode preview
Section titled â7.2. Mode previewâFichier : apps/web/src/lib/sanity.ts
Intégration :
- Utilisation de
getSanityClient()existant - Détection automatique du cookie
sanity-preview - Basculement vers
previewDraftssi cookie présent
RĂ©sultat : â IntĂ©gration fonctionnelle
8. Composants PageBuilder
Section titled â8. Composants PageBuilderâ8.1. Composants créés
Section titled â8.1. Composants créésâHero.astro: Section hero avec heading, subheading, CTAFeatures.astro: Grille de featuresTestimonials.astro: TĂ©moignages clientsCTA.astro: Call-to-actionRichText.astro: Rendu Portable TextImageGallery.astro: Galerie dâimages
RĂ©sultat : â Tous les composants créés
8.2. Rendu conditionnel
Section titled â8.2. Rendu conditionnelâFichier : apps/web/src/pages/index.astro
Logique :
{page?.pageBuilder?.map((block) => { switch (block._type) { case 'hero': return <Hero {...block} />; case 'features': return <Features {...block} />; ... }})}RĂ©sultat : â Rendu conditionnel fonctionnel
9. Checklist de validation
Section titled â9. Checklist de validationâ- Build Astro rĂ©ussi
- Page dâaccueil accessible en local
- Contenu PageBuilder rendu correctement
- Mode preview configuré
- Middleware preview fonctionnel
- Configuration SSG conforme Ă lâADR
- Query GROQ valide
- Composants PageBuilder créés
- SEO et métadonnées configurés
10. ProblÚmes rencontrés et solutions
Section titled â10. ProblĂšmes rencontrĂ©s et solutionsâ10.1. Erreur GROQ select()
Section titled â10.1. Erreur GROQ select()âProblĂšme : Syntaxe select() incorrecte dans la query
Solution : Utilisation de ...select() avec syntaxe conditionnelle correcte
10.2. Conflit port 8790
Section titled â10.2. Conflit port 8790âProblĂšme : Port 8790 dĂ©jĂ utilisĂ© par un autre processus
Solution : Utilisation du port 8791 pour les tests
10.3. Cache Vite corrompu
Section titled â10.3. Cache Vite corrompuâProblĂšme : Erreur de cache Vite lors du dĂ©marrage du dev server
Solution : Nettoyage du cache Vite et utilisation du mode background
10.4. Preview Studio non fonctionnel pour type page
Section titled â10.4. Preview Studio non fonctionnel pour type pageâProblĂšme : Le bouton âOpen Previewâ redirigeait vers /welcome au lieu de la page dâaccueil
Solution :
- Ajout de configuration preview dans le schéma page.ts
- Correction de la logique productionUrl dans sanity.config.ts pour gérer spécifiquement le type page
- Gestion spĂ©cifique du slug â/â pour la page dâaccueil
- Régénération du schéma Sanity
10.5. Preview non fonctionnel pour slugs autres que â/â
Section titled â10.5. Preview non fonctionnel pour slugs autres que â/ââProblĂšme : Pour les slugs comme â/testâ ou â/test1â, le preview redirigeait toujours vers /welcome
Solution :
- Correction de la logique productionUrl pour ne pas faire de distinction entre â/â et autres slugs
- Utilisation uniforme de
slugdirectement dans lâURL preview
10.6. Route exit-preview manquante
Section titled â10.6. Route exit-preview manquanteâProblĂšme : Pas de route pour quitter le mode preview
Solution :
- Ajout de la route
/api/exit-previewdans le middleware preview-middleware - Suppression du cookie
sanity-previewet redirect vers â/â - RĂ©fĂ©rence au pattern utilisĂ© dans welcome.astro
11. Ătat final
Section titled â11. Ătat finalâStatut : â Page dâaccueil implĂ©mentĂ©e et testĂ©e
Fonctionnalités validées :
- SSG via
prerender = true - Rendu PageBuilder depuis Sanity
- Mode preview via middleware
- SEO et métadonnées
- Composants responsive
Suivant : Création de contenu dans Sanity pour tester le rendu réel
12. Historique des modifications
Section titled â12. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-17 | 1.0 | Tests initiaux de la page dâaccueil | Devin |