import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { // Node environment for all tests (server-side CJS modules, no browser APIs needed) environment: 'node', // Global test helpers (describe, it, expect, vi) without per-file imports globals: true, // Run each test file in an isolated module registry so module-level state // (tokenStore cache, config singletons) doesn't leak between files isolate: true, // Give each file its own data directory so tokenStore file I/O doesn't collide setupFiles: ['./tests/setup.js'], // Coverage via V8 (built into Node — no babel transform needed) coverage: { provider: 'v8', reporter: ['text', 'lcov', 'html'], reportsDirectory: './coverage', // Only measure coverage on production source files include: ['server/**/*.js'], exclude: [ 'server/index.js', // entry point with side-effects (process.exit, log streams) 'node_modules/**', 'tests/**', 'coverage/**' ], // Per-file thresholds for the critical security/auth files we actively test. // Overall project thresholds are lower because dashboard.js and poller.js // are large files that require complex external service mocks (future work). thresholds: { lines: 25, functions: 12, branches: 12, statements: 25, perFile: false, // Individual file thresholds for the files we DO test 'server/app.js': { lines: 85, functions: 80, branches: 65, statements: 85 }, 'server/routes/auth.js': { lines: 85, functions: 95, branches: 70, statements: 85 }, 'server/middleware/requireAuth.js': { lines: 75, functions: 0, branches: 80, statements: 75 }, 'server/utils/sanitizeError.js': { lines: 60, functions: 0, branches: 0, statements: 60 }, 'server/utils/config.js': { lines: 50, functions: 30, branches: 55, statements: 50 } } } } });