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.mdJeux 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 RAGTests 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-privaterefusé aux étudiants, espaces étudiants refusés aux non-propriétaires) ; les routes cours vérifientenrollments. - 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)
- Inscription étudiante (avec code si configuré) → sélection des cours.
- Connexion
admin/admin123→ changement forcé → bannière disparaît après désactivation. - Chat IMM1003 « Cours uniquement » : question sur la valeur marchande → citations S1… cliquables vers Séance 4 ; question hors sujet → refus honnête.
- Téléverser une image avec un modèle non-vision → erreur claire ; avec un modèle vision → analyse prudente.
- Flashcards : révision (raccourcis 1-4) → la carte revient selon SM-2.
- Quiz adaptatif : 2 bonnes réponses → difficulté monte ; erreur → cahier d'erreurs alimenté.
- Examen blanc chronométré → correction par concept → tentative comparée.
- Plan d'étude : génération → items cochables → recommandation « Plan du jour ».
- Admin : désactiver un modèle → il disparaît du sélecteur étudiant et est refusé côté serveur.