Tests — Better Auth Cloudflare + Système de Visibilité
Tests — Better Auth Cloudflare + Système de Visibilité
Guide de tests manuels pour l'authentification Better Auth et le système de visibilité Starlight
Tests Better Auth Cloudflare + Système de Visibilité
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 tests1/3
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)
Important : Base de données pour les tests2/3
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 ?
Important : Base de données pour les tests3/3
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
1.1. Typecheck
cd apps/webnpx pnpm@12.3.4 astro checkRésultat attendu : 0 erreurs, 0 warnings
1.2. Build
cd apps/webnpx pnpm@12.3.4 astro buildRésultat attendu : Build réussi sans erreurs
2. Tests Better Auth
2.1. Test Initialisation Admin1/2
Endpoint : POST /api/auth/init-admin
Body :
{ "email": "admin@amn.dev", "password": "SecurePassword123!"}2.1. Test Initialisation Admin2/2
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 Login1/2
Endpoint : POST /api/auth/sign-in/email
Body :
{ "email": "admin@amn.dev", "password": "SecurePassword123!"}2.2. Test Login2/2
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
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
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é
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é1/2
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
3.2. Test Document Privé2/2
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
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
4.1. Test Routes Protégées1/3
Routes testées :
/docs/*(privé par défaut)/getting-started/*(selon visibility frontmatter)/overview(public exception)
4.1. Test Routes Protégées2/3
Test :
# Test sans authcurl -I http://localhost:8787/docs/
# Test avec authcurl -I http://localhost:8787/docs/ -b cookies.txt4.1. Test Routes Protégées3/3
Résultat attendu :
- Sans auth : Redirect vers
/login - Avec auth : 200 OK
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é
5.1. Test Cookies1/2
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
5.1. Test Cookies2/2
Résultat attendu :
HttpOnly: trueSecure: false(dev),true(prod)SameSite: LaxouStrict
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
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
6.1. Test Flux Complet1/2
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
6.1. Test Flux Complet2/2
Résultat attendu :
- Flux complet fonctionnel
- Redirections correctes
- Sessions gérées correctement
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
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
- Login fonctionne
- Logout fonctionne
- Documents privés inaccessibles sans auth
- Documents publics accessibles sans auth
- Redirections fonctionnent
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é
- Champ
visibilityrespecté - Documents publics accessibles
- Documents privés protégés
- Override visibility fonctionne
8. Dépannage
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”
Cause : Configuration usePlural incorrecte
Solution : Vérifier que usePlural: false dans src/auth/index.ts
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
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 Étapes1/2
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
9. Prochaines Étapes2/2
Statut du document : TEST (Guide de tests manuels) Dernière mise à jour : 2026-09-27