TypeScript 98.3%
CSS 0.9%
Shell 0.7%
1# Tests et vérification — Immbot AI23## Tests unitaires et d'intégration (vitest)45```bash6pnpm test # 34 tests, BD SQLite en mémoire (DATABASE_PATH=:memory:)7```89| Fichier | Couvre |10|---|---|11| `tests/sm2.test.ts` | Répétition espacée : progression 1j/6j/EF, échecs, bornes |12| `tests/latex.test.ts` | Parseur beamer (numérotation PDF, sections, boîtes, tableaux, maths), detexify, découpage |13| `tests/citations.test.ts` | **Contrat de citations** : résolution, neutralisation des balises inventées, groupes |14| `tests/auth.test.ts` | bcrypt, politique de mot de passe (refus d'admin123), **jetons de session hachés**, révocation, limitation de débit |15| `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 |1617## Évaluation RAG (hors-ligne, sans LLM)1819```bash20pnpm evaluate # → evaluation/rag-evaluation.md21```2223Jeux dorés `evaluation/imm1003-test-set.json` / `imm1033-test-set.json` (12 questions/cours +24questions hors corpus + sonde d'isolation). Critères de réussite : rappel ≥ 80 % (mesuré : 100 %),25refus corrects hors corpus, **zéro fuite inter-cours**.2627## Vérification complète2829```bash30./scripts/verify.sh # tsc --noEmit + vitest + évaluation RAG31```3233## Tests de sécurité couverts3435- Élévation/contournement : routes admin revérifient le rôle dans chaque handler ; l'accès aux36 citations vérifie l'espace (`instructor-private` refusé aux étudiants, espaces étudiants refusés37 aux non-propriétaires) ; les routes cours vérifient `enrollments`.38- Sessions : jeton jamais stocké en clair (test), révocation (test), rate-limit (test).39- Uploads : type MIME vérifié par signature magique, taille bornée, chemins générés côté serveur.40- Citations : impossibilité de citer un fragment hors du contexte servi (test).41- SQL : uniquement des requêtes préparées (aucune interpolation).4243## Parcours manuel de recette (E2E)44451. Inscription étudiante (avec code si configuré) → sélection des cours.462. Connexion `admin`/`admin123` → changement forcé → bannière disparaît après désactivation.473. Chat IMM1003 « Cours uniquement » : question sur la valeur marchande → citations S1… cliquables48 vers Séance 4 ; question hors sujet → refus honnête.494. Téléverser une image avec un modèle non-vision → erreur claire ; avec un modèle vision → analyse prudente.505. Flashcards : révision (raccourcis 1-4) → la carte revient selon SM-2.516. Quiz adaptatif : 2 bonnes réponses → difficulté monte ; erreur → cahier d'erreurs alimenté.527. Examen blanc chronométré → correction par concept → tentative comparée.538. Plan d'étude : génération → items cochables → recommandation « Plan du jour ».549. Admin : désactiver un modèle → il disparaît du sélecteur étudiant et est refusé côté serveur.55