import { defineConfig } from "vitest/config"; import { fileURLToPath } from "url"; export default defineConfig({ resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)), }, }, test: { environment: "node", globals: true, setupFiles: ["./vitest.setup.ts"], include: [ "src/**/*.test.ts", "src/**/__tests__/**/*.test.ts", "tests/unit/**/*.test.ts", ], coverage: { provider: "v8", // Querschnitt-Kern muss hoch abgedeckt sein (Definition of Done #7): // die REINE, offline testbare Logik in src/lib/search und src/lib/geo // >= 90 %. Reine I/O-Wrapper (DB-Queries via Drizzle, HTTP zu // Nominatim/OSRM) sowie reine Typ-Module sind hier ausgenommen: sie // brauchen ein laufendes Postgres bzw. erreichbare Dienste und werden // über Integrations-/E2E-Tests abgesichert (im Sandbox deferred, da // kein Postgres/Server verfügbar). include: ["src/lib/search/**", "src/lib/geo/**"], exclude: [ // Reine Typdefinitionen (keine ausführbaren Zeilen). "src/lib/search/types.ts", "src/lib/geo/types.ts", // DB-gebundene Query-Builder (Drizzle gegen Postgres). "src/lib/search/facets.ts", "src/lib/search/query-brigades.ts", "src/lib/search/query-equipment.ts", "src/lib/search/query-vehicles.ts", "src/lib/geo/candidates.ts", // Externe HTTP-Dienste (Nominatim-Geocoding, OSRM-Routing). "src/lib/geo/nominatim.ts", "src/lib/geo/osrm.ts", ], // Per-Datei statt global: jede eingeschlossene reine-Logik-Datei muss // die Schwelle selbst erreichen (kein Verwässern über den Durchschnitt). thresholds: { perFile: true, lines: 90, functions: 90, statements: 90, branches: 80, }, }, }, });