QA #20 — Section de preuve sociale (Trustpilot) gardée par ENABLE_TRUSTPILOT (runtime) ======================================================================================= Date : 2026-06-11 Worktree : .worktrees/redmine-20-social-proof Branche : feat/redmine-20-social-proof Commit : 34e3015 (feat(landing): gate social-proof behind ENABLE_TRUSTPILOT) Port de test: 3010 (npm run dev) NB: aucun secret (token/clé/.env) reproduit dans ce rapport. --- 1. Seam serveur (src/app/page.tsx) --- export const dynamic = 'force-dynamic'; (rendu par requête) const socialProofEnabled = process.env.ENABLE_TRUSTPILOT === 'true'; (défaut: false si absent) => threadé en prop booléenne: page.tsx -> LandingPageWithBypass -> LandingPage -> Placement vérifié dans LandingPage.tsx: LandingHowItWorks -> LandingSocialProof -> LandingCTA (entre "Comment ça marche" et le CTA) Composant (LandingSocialProof.tsx) : `if (!enabled || count === 0) return null;` => aucun DOM, aucune donnée factice quand OFF. --- 2. Tests unitaires (vitest, suite touchée) --- $ npx vitest run src/components/organisms/landing/__tests__/LandingSocialProof.test.tsx Test Files 1 passed (1) Tests 9 passed (9) Couvre notamment : - returns null when the flag is off (enabled defaults to false) OK - returns null when enabled is explicitly false, even with testimonials OK - returns null when enabled but there are no testimonials OK - renders heading, average rating and verified review count OK - links "see all reviews" to Trustpilot url, target=_blank, rel=noopener noreferrer OK - hides controls with single testimonial / next arrow / auto-advance 5s / pause on hover OK --- 3. Smoke UI — état OFF (ENABLE_TRUSTPILOT NON défini, défaut) --- $ env -u ENABLE_TRUSTPILOT npm run dev -- -p 3010 (ENABLE_TRUSTPILOT absent du .env) $ curl -s "http://localhost:3010/?landing=1" Scan du HTML rendu : '4,9' : 0 'avis vérifiés' : 0 'Trustpilot/trustpilot': 0 'Voir tous les avis' : 0 'data-social-proof-carousel' : 0 '★' : 0 socialProofEnabled : "socialProofEnabled":false (payload RSC = flag OFF correct) (les 44 occurrences de "4.9" = coordonnées de SVG d'icônes, pas une note) HowItWorks ("Comment ça marche") présent ; reste de la landing intact et contigu. => AUCUN contenu factice (étoiles / 4,9/5 / 120 avis / témoignages) rendu. Conforme à l'exigence produit. Capture : off-state.png (section absente). --- 4. Smoke UI — état ON (ENABLE_TRUSTPILOT=true) --- $ env ENABLE_TRUSTPILOT=true npm run dev -- -p 3010 Payload RSC : "socialProofEnabled":true Rendu client (carrousel via next/dynamic) — snapshot navigateur : [img] "4.9 / 5" [text] "4,9/5 · 120 avis vérifiés" [figure] Marie D. — Développeuse Fullstack — "J'ai trouvé une mission en 2 semaines..." [figure] Karim B. — Lead Backend [figure] Sofia L. — Ingénieure DevOps [button] "Témoignage précédent" / "suivant" + 3 puces "Aller au témoignage N" [link] "Voir tous les avis" (href=https://www.trustpilot.com/review/getyourjob.pro, target=_blank, rel=noopener noreferrer — cf. source + test) Position : entre la section offres/Comment ça marche et le CTA "Créer mon profil". Style : fond gris très clair (#F9F9F9), étoiles vertes Trustpilot (#00B67A), bordures #E5E5E5. Capture : on-state-carousel.png (section rendue). --- 5. Note tsc --- `npx tsc --noEmit` global : ~2248 erreurs PRÉEXISTANTES dans tout le repo (le build s'appuie sur ignoreBuildErrors). La seule erreur dans un fichier touché — page.tsx:69 `session?.user` — provient du refactor SSR antérieur (commit c8f1e61), PAS de ce ticket (34e3015 n'ajoute que les lignes socialProofEnabled). Aucun fichier de la feature social-proof (LandingSocialProof, config, RatingStars, TestimonialCard) n'a d'erreur tsc. VERDICT : PASS - OFF (défaut) : aucun contenu factice rendu (DOM social-proof totalement absent). - ON : carrousel complet rendu (note, nb d'avis, 3 témoignages, flèches, lien Trustpilot).