Questa pagina non è ancora tradotta nella tua lingua: è mostrata in francese.
Tests
1374 cas répartis en 115 suites, dans 74 fichiers. Des tests d'intégration : ils démarrent l'application, ouvrent une session et parcourent les écrans, sur une base SQLite temporaire isolée.
npm test
Le parti pris : pas de simulacres#
Un simulacre teste ce que le développeur croit que le protocole fait. Là où c'était possible, le service extérieur est réécrit pour de vrai, en mémoire, et le vrai client s'y connecte.
| Service | Ce que la suite fait | Ce que cela a permis de trouver |
|---|---|---|
| FTP | Un vrai serveur FTP tenu en mémoire ; le client du produit y dépose, liste et supprime | La connexion de données doit être attendue dès PASV, pas après le 150 |
| IMAP | Un vrai serveur IMAP en mémoire ; imapflow s'y connecte, cherche, télécharge, marque lu et déplace |
La réponse à LIST "" "" doit donner le séparateur, pas les dossiers — sinon tous les chemins sont doublés |
| Google Drive | Un vrai couple de clés RSA ; le jeton JWT signé RS256 est vérifié comme le ferait Google | Le jeton doit être réutilisé jusqu'à son expiration, pas redemandé à chaque dépôt |
| Service d'analyse | Un serveur compatible OpenAI rendu en local | L'arbitrage règles / modèle, vérifié sur des réponses contradictoires |
Ce que la suite couvre#
Sauvegarde et restauration#
Aller-retour tar exact ; en-tête abîmé et archive tronquée refusés ; chemin sortant de sa racine rejeté ; archive embarquant base et coffre-fort ; contenu altéré détecté par le manifeste ; restauration qui remet base et fichiers et efface ce qui a suivi ; sauvegarde de sécurité prise avant ; confirmation par nom exact ; colonne ajoutée après la sauvegarde tolérée ; purge ; intervalle automatique respecté ; espace réservé à l'administration.
Externalisation#
Dépôt octet pour octet, liste, suppression, mot de passe refusé sans exception ; jeton Google vérifié et réutilisé ; secret illisible après altération, jamais rendu à l'écran, conservé si le champ est laissé vide ; destination incomplète non activable ; administrateurs alertés en cas d'échec.
Sécurité#
Contrôle d'accès de chaque espace ; verrouillage après cinq échecs ; anti-énumération ; CSRF, y compris sur les envois multipart ; redirections filtrées ; politique de mots de passe ; TOTP et codes de secours ; révocation de session ; journal d'audit.
Métier#
Cycle RH complet (demande, approbation, décompte et recrédit du solde) ; scrutin CSE anonyme ; conflits de planning ; clôture d'une non-conformité bloquée par ses actions ; facturation récurrente non dupliquée ; TVA sur les débits ; sceau du parapheur ; circuits d'approbation et étapes sautées ; import tout ou rien ; lecture de facture et arbitrage règles / modèle.
Traductions#
Quinze cas dédiés, détaillés sur la page Traductions : parité des clés, paramètres, écritures non latines, couverture des statuts, chrome partagé, absence de côté figé dans le CSS, rendu de bout en bout en allemand et bascule RTL en arabe.
Apparence#
Jetons complets dans chaque combinaison palette × thème, contraste minimal tenu sur les six, aperçus sans couleur en dur.
Comment un test est écrit#
const { prepareEnvironment, startServer, Client } = require('./helpers');
// L'environnement doit être préparé AVANT de charger la base :
// elle est ouverte au require du module.
prepareEnvironment();
const createApp = require('../src/app');
test.before(async () => {
server = await startServer(createApp());
baseUrl = `http://127.0.0.1:${server.address().port}`;
});
Client est un bocal à cookies : il se connecte, garde la session et le jeton
CSRF, poste des formulaires et relit les messages d'état. Un test parcourt donc les mêmes
écrans qu'un utilisateur, avec les mêmes contrôles.
DB_PATH pointe sur un fichier SQLite temporaire créé au démarrage du fichier
de test. Les suites ne se marchent pas dessus et peuvent tourner dans n'importe quel ordre.
Vérification au navigateur#
La suite ne dit rien de la mise en page. Chaque livraison est en plus ouverte dans un navigateur réel, où trois choses sont vérifiées :
- Aucune erreur console — une CSP qui bloque un script se voit là, pas dans les tests.
- Aucun débordement horizontal à 390 px :
scrollWidthcomparé àclientWidth, plutôt qu'un coup d'œil. - Géométrie du RTL : en arabe, le liseré de l'onglet actif et la barre latérale doivent avoir changé de côté, mesures à l'appui.
Documentazione di Toutadmin — costruita il 2026-09-13. Sito autonomo, indipendente dal software.