diff --git a/package.json b/package.json index 3f623aa5..13ebd810 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "format": "biome format --write .", "diag:permissions": "tsx scripts/diagnose-permission-page.ts", "jobs:worker": "node --conditions=react-server --import tsx scripts/jobs-worker.ts", - "test": "bash scripts/with-memory-cap.sh 8g vitest run --coverage.enabled=false", - "test:coverage": "bash scripts/with-memory-cap.sh 8g vitest run", + "test": "bash scripts/with-memory-cap.sh 8g vitest run", + "test:coverage": "bash scripts/with-memory-cap.sh 8g vitest run --coverage.enabled=true", "typecheck": "bash scripts/with-memory-cap.sh 6g tsc --noEmit", "db:generate": "drizzle-kit generate", "db:introspect": "drizzle-kit introspect", @@ -34,7 +34,7 @@ "db:studio": "drizzle-kit studio", "gamedata:compress": "node scripts/compress-gamedata.mjs", "hk:matrix:check": "tsx scripts/verify-housekeeping-matrix.ts", - "test:housekeeping": "bash scripts/with-memory-cap.sh 8g vitest run --coverage.enabled=false src/features/housekeeping src/lib/admin-theme-source-audit.test.ts src/lib/admin/authorization-contract.test.ts", + "test:housekeeping": "bash scripts/with-memory-cap.sh 8g vitest run src/features/housekeeping src/lib/admin-theme-source-audit.test.ts src/lib/admin/authorization-contract.test.ts", "assets:editor": "node scripts/copy-editor-assets.mjs", "deps:audit": "pnpm audit --audit-level=high", "analyze": "pnpm assets:editor && bash scripts/with-memory-cap.sh 10g next build --webpack && node scripts/performance-report.mjs --output-dir build-reports", diff --git a/vitest.config.ts b/vitest.config.ts index 729fce42..4817822a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,8 +1,9 @@ import { fileURLToPath } from "node:url"; import { defineConfig } from "vitest/config"; -// Local config so Vitest does not walk up into the parent Laravel repo's -// vite.config.js (this app lives inside the Laravel project tree). +// Project-local config: keeps the `@/` alias, the server-only stub and the +// env fallbacks with the repo instead of relying on whatever vite config a +// parent directory happens to provide. export default defineConfig({ resolve: { alias: { @@ -26,22 +27,24 @@ export default defineConfig({ DATABASE_URL: "mysql://root:root@localhost:3306/test", }, testTimeout: 10000, - exclude: [ - "integration/**", - "e2e/**", - "node_modules/**", - ".next/**", - ".next.prev/**", - ], + exclude: ["integration/**", "e2e/**", "node_modules/**", ".next/**"], coverage: { - enabled: true, + // Off unless asked for (`pnpm test:coverage` passes + // `--coverage.enabled=true`): a focused `vitest run ` should + // not fail the global thresholds it cannot possibly meet, and + // measuring v8 coverage on every run costs real time. + enabled: false, provider: "v8", reporter: ["text", "lcov", "html"], + // Ratchet floor: measured 37.14 / 30.09 / 31.74 / 38.13 on the full + // suite (statements/branches/functions/lines). Rounded down so only + // a real regression fails the build — raise these to the new + // measured floor whenever coverage improves. thresholds: { - statements: 36, - branches: 29, - functions: 30, - lines: 37, + statements: 37, + branches: 30, + functions: 31, + lines: 38, }, include: ["src/**/*.{ts,tsx}"], exclude: [