# Tests et vérification — Immbot AI ## Tests unitaires et d'intégration (vitest) ```bash pnpm test # 34 tests, BD SQLite en mémoire (DATABASE_PATH=:memory:) ``` | Fichier | Couvre | |---|---| | `tests/sm2.test.ts` | Répétition espacée : progression 1j/6j/EF, échecs, bornes | | `tests/latex.test.ts` | Parseur beamer (numérotation PDF, sections, boîtes, tableaux, maths), detexify, découpage | | `tests/citations.test.ts` | **Contrat de citations** : résolution, neutralisation des balises inventées, groupes | | `tests/auth.test.ts` | bcrypt, politique de mot de passe (refus d'admin123), **jetons de session hachés**, révocation, limitation de débit | | `tests/learning.test.ts` | Moteur de maîtrise (montée/descente, poids des tâches, décroissance bornée, niveaux), quiz adaptatif (difficulté de départ/escalier, correction mcq/calc±1 %/mots-clés), plan d'étude (répartition, entrelacement, examens blancs), isolation des cours | ## Évaluation RAG (hors-ligne, sans LLM) ```bash pnpm evaluate # → evaluation/rag-evaluation.md ``` Jeux dorés `evaluation/imm1003-test-set.json` / `imm1033-test-set.json` (12 questions/cours + questions hors corpus + sonde d'isolation). Critères de réussite : rappel ≥ 80 % (mesuré : 100 %), refus corrects hors corpus, **zéro fuite inter-cours**. ## Vérification complète ```bash ./scripts/verify.sh # tsc --noEmit + vitest + évaluation RAG ``` ## Tests de sécurité couverts - Élévation/contournement : routes admin revérifient le rôle dans chaque handler ; l'accès aux citations vérifie l'espace (`instructor-private` refusé aux étudiants, espaces étudiants refusés aux non-propriétaires) ; les routes cours vérifient `enrollments`. - Sessions : jeton jamais stocké en clair (test), révocation (test), rate-limit (test). - Uploads : type MIME vérifié par signature magique, taille bornée, chemins générés côté serveur. - Citations : impossibilité de citer un fragment hors du contexte servi (test). - SQL : uniquement des requêtes préparées (aucune interpolation). ## Parcours manuel de recette (E2E) 1. Inscription étudiante (avec code si configuré) → sélection des cours. 2. Connexion `admin`/`admin123` → changement forcé → bannière disparaît après désactivation. 3. Chat IMM1003 « Cours uniquement » : question sur la valeur marchande → citations S1… cliquables vers Séance 4 ; question hors sujet → refus honnête. 4. Téléverser une image avec un modèle non-vision → erreur claire ; avec un modèle vision → analyse prudente. 5. Flashcards : révision (raccourcis 1-4) → la carte revient selon SM-2. 6. Quiz adaptatif : 2 bonnes réponses → difficulté monte ; erreur → cahier d'erreurs alimenté. 7. Examen blanc chronométré → correction par concept → tentative comparée. 8. Plan d'étude : génération → items cochables → recommandation « Plan du jour ». 9. Admin : désactiver un modèle → il disparaît du sélecteur étudiant et est refusé côté serveur.