Tests — Better Auth Cloudflare + Système de Visibilité
Tests Better Auth Cloudflare + Système de Visibilité
Section titled “Tests Better Auth Cloudflare + Système de Visibilité”Prérequis
Section titled “Prérequis”- Serveur Astro dev actif OU wrangler dev (pour tests Better Auth)
- Base D1 configurée :
amn-auth-db-dev(ID: 9271edc1-a0fd-445d-99ab-d3e24bed2c4f) - KV namespace configuré :
4a990eb34db9430284b0961ac5d107dd - Variables d’environnement chargées (via
.envet.dev.vars)
Important : Base de données pour les tests
Section titled “Important : Base de données pour les tests”Pour les tests Better Auth (authentification, sessions) :
- Utiliser
task dev:wranglerau lieu detask dev wrangler devse connecte à la base D1 distante où la migration a été appliquée- Port : 8787 (http://localhost:8787)
- Nécessite rebuild à chaque changement (
task dev:wranglerle fait automatiquement)
Pour le développement front (sans auth) :
- Utiliser
task dev(astro dev) - Utilise une base SQLite locale temporaire
- Port : 4321 (http://localhost:4321)
- Plus rapide (hot reload)
Pourquoi ?
astro devavec Miniflare utilise une base SQLite locale temporaire- La migration D1 a été appliquée sur la base distante uniquement
- Il n’est pas possible de développer contre une base D1 distante avec
astro dev - Source : https://developers.cloudflare.com/d1/best-practices/local-development/
1. Tests de Validation Locale
Section titled “1. Tests de Validation Locale”1.1. Typecheck
Section titled “1.1. Typecheck”cd apps/webnpx pnpm@12.3.4 astro checkRésultat attendu : 0 erreurs, 0 warnings
1.2. Build
Section titled “1.2. Build”cd apps/webnpx pnpm@12.3.4 astro buildRésultat attendu : Build réussi sans erreurs
2. Tests Better Auth
Section titled “2. Tests Better Auth”2.1. Test Initialisation Admin
Section titled “2.1. Test Initialisation Admin”Endpoint : POST /api/auth/init-admin
Body :
{ "email": "admin@amn.dev", "password": "SecurePassword123!"}Commande curl :
curl -X POST http://localhost:8787/api/auth/init-admin \ -H "Content-Type: application/json" \ -d '{"email":"admin@amn.devs","password":"SecurePassword123!"}'Résultat attendu :
- Succès :
{"success": true, "user": {...}} - Erreur si admin existe déjà : User already exists
2.2. Test Login
Section titled “2.2. Test Login”Endpoint : POST /api/auth/sign-in/email
Body :
{ "email": "admin@amn.dev", "password": "SecurePassword123!"}Commande curl :
curl -X POST http://localhost:8787/api/auth/sign-in/email \ -H "Content-Type: application/json" \ -d '{"email":"admin@amn.dev","password":"SecurePassword123!","callbackURL":"/"}' \ -c cookies.txtRésultat attendu :
- Succès : User object avec session
- Cookies sauvegardés dans
cookies.txt
2.3. Test Session Validation
Section titled “2.3. Test Session Validation”Endpoint : GET /api/auth/get-session
Commande curl :
curl -X GET http://localhost:8787/api/auth/get-session \ -b cookies.txtRésultat attendu :
- Session active : User object retourné
- Session inactive : null ou error
2.4. Test Logout
Section titled “2.4. Test Logout”Endpoint : POST /api/auth/sign-out
Commande curl :
curl -X POST http://localhost:8787/api/auth/sign-out \ -b cookies.txt \ -c cookies-new.txtRésultat attendu :
- Succès : Session invalidée
- Cookies expirés dans
cookies-new.txt
3. Tests Système de Visibilité
Section titled “3. Tests Système de Visibilité”3.1. Test Document Public
Section titled “3.1. Test Document Public”Document : /getting-started/01-setup-local/ (doit avoir visibility: public)
Test sans authentification :
curl -I http://localhost:8787/getting-started/01-setup-local/Résultat attendu :
HTTP/1.1 200 OK- Page rendue normalement
3.2. Test Document Privé
Section titled “3.2. Test Document Privé”Document : /docs/l2_presentation/astro/starlight/ (doit avoir visibility: private par défaut)
Test sans authentification :
curl -I http://localhost:8787/docs/l2_presentation/astro/starlight/Résultat attendu :
HTTP/1.1 302 Found(redirect vers login)Location: /login
Test avec authentification :
curl -I http://localhost:8787/docs/l2_presentation/astro/starlight/ \ -b cookies.txtRésultat attendu :
HTTP/1.1 200 OK- Page rendue normalement
3.3. Test Page Login
Section titled “3.3. Test Page Login”URL : http://localhost:8787/login
Test navigation :
- Ouvrir dans navigateur
- Vérifier formulaire de login présent
- Tester soumission avec credentials valides
Résultat attendu :
- Formulaire affiché
- Après login, redirection vers page demandée ou home
4. Tests Middleware
Section titled “4. Tests Middleware”4.1. Test Routes Protégées
Section titled “4.1. Test Routes Protégées”Routes testées :
/docs/*(privé par défaut)/getting-started/*(selon visibility frontmatter)/overview(public exception)
Test :
# Test sans authcurl -I http://localhost:8787/docs/
# Test avec authcurl -I http://localhost:8787/docs/ -b cookies.txtRésultat attendu :
- Sans auth : Redirect vers
/login - Avec auth : 200 OK
4.2. Test Override Visibility
Section titled “4.2. Test Override Visibility”Action : Ajouter visibility: public à un document privé
Test :
- Modifier frontmatter d’un document privé
- Recharger le serveur dev
- Tester accès sans authentification
Résultat attendu :
- Document accessible sans authentification
5. Tests Sécurité
Section titled “5. Tests Sécurité”5.1. Test Cookies
Section titled “5.1. Test Cookies”Vérification :
- Cookies HttpOnly (non accessibles via JavaScript)
- Cookies Secure (en prod uniquement)
- Cookies SameSite configuré
Test navigateur :
- Ouvrir DevTools → Application → Cookies
- Vérifier propriétés des cookies Better Auth
Résultat attendu :
HttpOnly: trueSecure: false(dev),true(prod)SameSite: LaxouStrict
5.2. Test Session Expiration
Section titled “5.2. Test Session Expiration”Action :
- Se connecter
- Attendre expiration session (7 jours par défaut)
- Tenter d’accéder à une page privée
Résultat attendu :
- Redirect vers login après expiration
5.3. Test CSRF Protection
Section titled “5.3. Test CSRF Protection”Note : Better Auth inclut automatiquement la protection CSRF via des tokens dans les formulaires.
Test :
- Les requêtes POST doivent inclure un token CSRF valide
- Les requêtes sans token doivent être rejetées
6. Tests Integration
Section titled “6. Tests Integration”6.1. Test Flux Complet
Section titled “6.1. Test Flux Complet”Scénario :
- Accéder à un document privé sans auth → Redirect login
- Se connecter via
/login→ Redirect document - Naviguer dans les docs privés → Accès autorisé
- Se déconnecter → Redirect home
- Tenter d’accéder document privé → Redirect login
Résultat attendu :
- Flux complet fonctionnel
- Redirections correctes
- Sessions gérées correctement
6.2. Test Multiple Sessions
Section titled “6.2. Test Multiple Sessions”Action :
- Se connecter depuis navigateur A
- Se connecter depuis navigateur B
- Se déconnecter depuis navigateur A
- Vérifier session navigateur B
Résultat attendu :
- Sessions indépendantes
- Logout A n’affecte pas B
7. Checklist de Validation
Section titled “7. Checklist de Validation”7.1. Validation Technique
Section titled “7.1. Validation Technique”- Typecheck réussi (0 erreurs)
- Build réussi
- Serveur dev démarre sans erreurs
- Better Auth endpoints répondent
- Middleware intercepte les routes
7.2. Validation Fonctionnelle
Section titled “7.2. Validation Fonctionnelle”- Login fonctionne
- Logout fonctionne
- Documents privés inaccessibles sans auth
- Documents publics accessibles sans auth
- Redirections fonctionnent
7.3. Validation Sécurité
Section titled “7.3. Validation Sécurité”- Credentials sécurisés via .env
- Cookies HttpOnly configurés
- Protection CSRF active
- Sessions expirées correctement
7.4. Validation Visibilité
Section titled “7.4. Validation Visibilité”- Champ
visibilityrespecté - Documents publics accessibles
- Documents privés protégés
- Override visibility fonctionne
8. Dépannage
Section titled “8. Dépannage”8.1. Erreur “Cloudflare context required”
Section titled “8.1. Erreur “Cloudflare context required””Cause : IP detection ou geolocation activé en dev local Solution : Désactiver via variables d’environnement :
BETTER_AUTH_AUTO_DETECT_IP=falseBETTER_AUTH_GEOLOCATION_TRACKING=false8.2. Erreur “Drizzle schema mismatch”
Section titled “8.2. Erreur “Drizzle schema mismatch””Cause : Configuration usePlural incorrecte
Solution : Vérifier que usePlural: false dans src/auth/index.ts
8.3. Erreur “Database connection failed”
Section titled “8.3. Erreur “Database connection failed””Cause : D1 non configuré ou secret manquant Solution :
- Vérifier
AUTH_DB_IDdans .env - Vérifier binding D1 dans wrangler.jsonc
- Ré-exécuter
./scripts/inject_secret_to_cloudflare.sh --env=dev --service=web
8.4. Session non persistante
Section titled “8.4. Session non persistante”Cause : KV non configuré ou cookie settings incorrects Solution :
- Vérifier
AUTH_KV_IDdans .env - Vérifier binding KV dans wrangler.jsonc
- Vérifier configuration cookies dans Better Auth
9. Prochaines Étapes
Section titled “9. Prochaines Étapes”Après validation des tests :
- Corriger les problèmes identifiés
- Re-tester les corrections
- Passer à Phase 5 : Intégration et Documentation
- Préparer déploiement dev via GitHub Actions
Statut du document : TEST (Guide de tests manuels) Dernière mise à jour : 2026-09-27