Tests
Le backend utilise trois couches de test : les tests unitaires Jest, les suites e2e Jest et les tranches rollback sur base réelle (*.e2e.ts dans src/). Les tranches sur base réelle sont les principaux tests d’intégration car le SQL Kysely se vérifie mieux contre un vrai PostgreSQL.
Tests unitaires Jest
Section intitulée « Tests unitaires Jest »pnpm test exécute Jest sur src/**/*.spec.ts.
test/kysely-stub.cjs stubbe le paquet kysely (ESM uniquement) pour que Jest puisse le require :
class Kysely {}class PostgresDialect {}const sql = () => ({ execute: async () => ({ rows: [] }) });module.exports = { Kysely, PostgresDialect, sql };Les tests unitaires se concentrent donc sur l’orchestration (services) et les builders purs (builders de modèles PDF), pas sur le SQL réel.
Suite e2e Jest
Section intitulée « Suite e2e Jest »test/jest-e2e.json configure ts-jest avec des stubs ESM :
{ "testRegex": ".e2e-spec.ts$", "moduleNameMapper": { "^kysely$": "<rootDir>/kysely-stub.cjs", "^puppeteer$": "<rootDir>/puppeteer-stub.cjs" }, "setupFiles": ["<rootDir>/jest-e2e.setup.ts"]}test/jest-e2e.setup.ts désactive cron et définit NODE_ENV=test.
Suites e2e incluses
Section intitulée « Suites e2e incluses »test/app.e2e-spec.ts— démarreAppModule, vérifie 401 sur/api/v1, 404 sur/test/auth.e2e-spec.ts— flux d’auth complet avec surcharges de repository en mémoire (login,me, refus RBAC, rotation refresh, denylist au logout)
test/puppeteer-stub.cjs empêche Puppeteer de se charger dans Jest.
Tranches sur base réelle
Section intitulée « Tranches sur base réelle »Chaque src/<module>/<module>.e2e.ts est un script autonome exécuté par pnpm db:slice:<module>. Ils compilent un module de test Nest, exécutent des opérations dans une transaction scope.audit(...) qui lève un rollback-marker, puis vérifient que la transaction est bien annulée.
Liste des tranches
Section intitulée « Liste des tranches »pnpm db:slice:corepnpm db:slice:clientpnpm db:slice:adminpnpm db:slice:financespnpm db:slice:facturationpnpm db:slice:marketpnpm db:slice:pressingpnpm db:slice:restaurantpnpm db:slice:salle-fetepnpm db:slice:rhpnpm db:slice:auditpnpm db:slice:uploadsPatron de tranche
Section intitulée « Patron de tranche »Une tranche typique :
- Démarre
Test.createTestingModule([...]). - Seed des données de test dans un
scope.audit(actor, async (a, tx) => { ... }). - Lit les résultats et vérifie l’attribution d’audit.
- Lance
new Error('rollback-marker'). - Attrape le marqueur et vérifie que rien n’a persisté.
Par exemple, admin/admin.e2e.ts vérifie :
mot_de_passen’est pas retourné par les lectures du repository- les lignes
audit.journal_auditcontiennent***ou ne contiennent pas le mot de passe en clair - les lignes d’audit sont attribuées à l’utilisateur actant
- l’utilisateur de test n’existe plus après le rollback
Test de fumée
Section intitulée « Test de fumée »pnpm db:smoke exécute src/db/smoke.ts, qui exerce le type Database généré et la connectivité de base contre une instance PostgreSQL réelle.
Exécuter la chaîne complète
Section intitulée « Exécuter la chaîne complète »pnpm db:verifyC’est la commande recommandée après tout changement de schéma ou de backend. Elle migre la base voisine, régénère les types, exécute tsc --noEmit, les tests unitaires, le test de fumée et les tranches sur base réelle.
