import { defineConfig } from "vitest/config";

/**
 * Config Vitest du profil de mutation COMPLET (`npm run test:mutation:full`).
 *
 * Deux réglages, tous deux mesurés sur l'overhead d'amorçage que Stryker paie
 * à CHAQUE activation de mutant (ligne « net / overhead » du dry-run) :
 *
 * 1. Ne charger que les tests API. Le fichier a11y initialise jsdom (~2 s) et
 *    ne couvre aucune ligne de l'API : le charger reviendrait à payer ce coût
 *    1500 fois.
 *
 * 2. Workers `threads` sans ré-isolation. Mesuré sur ce jeu de fichiers :
 *      forks, isolate:true  (défaut) : overhead 12 844 ms
 *      forks, isolate:false          : overhead  7 064 ms
 *      threads, isolate:false        : overhead  1 592 ms   ← retenu
 *    Le temps net des tests, lui, ne bouge presque pas (~1 s) : l'amorçage
 *    représentait 90 % du cycle.
 *
 *    À NE PAS reporter dans vitest.config.js : la suite complète contient le
 *    test a11y, et sous jsdom ce même réglage est nettement PLUS lent (18,8 s
 *    contre 3,5 s). Le bon réglage dépend du jeu de fichiers — re-mesurer.
 *
 * L'isolation ne protège de rien ici : chaque fichier de test construit sa
 * propre app et son propre faux pool, il n'y a aucun état global mutable.
 */
export default defineConfig({
  test: {
    environment: "node",
    pool: "threads",
    poolOptions: { threads: { isolate: false, singleThread: true } },
    // Stryker parallélise déjà entre mutants (concurrency) : paralléliser aussi
    // les fichiers à l'intérieur d'un worker ne ferait que se disputer les cœurs.
    fileParallelism: false,
    include: ["apps/api/test/**/*.test.js"],
    reporters: ["default"],
  },
});
