mirror of
https://github.com/J3vb/OwnCord.git
synced 2026-09-03 03:50:00 +03:00
Audits what actually has tests, then closes the gaps it found. Full write-up with before/after numbers in docs/audit-test-coverage-2026-07-25.md. Measurement first: `go test ./... -coverprofile` (what CI runs) instruments each package only for itself, so code exercised through another package's tests reads as uncovered — `service` reported 36.7% against a real 85%. All analysis here uses -coverpkg=./..., and both views now have Makefile targets. Features that had zero coverage at every layer: - user blocking (db + service + the /api/v1/blocks routes) - auth lockout persistence — the DB round-trip that survives a restart - plugin install/enable/disable/uninstall and the plugin KV namespace - event replay bounds (GetMaxEventSeq, PruneEventsOlderThan) - LiveKit participant_joined webhook (replayed-token guard), the room-service client, and proxyWebSocket/copyWS - ws_proxy.rs and livekit_proxy.rs — pure helpers extracted, matching the existing tofu.rs pattern, so cert-pin and header-injection checks are testable Gaps that were hidden rather than absent: - Server/admin reported 0.3% coverage with 307 tests passing. TestSpawnDetached_* re-execs the test binary; the child inherited GOCOVERDIR and the parent's stdout, clobbering the profile and printing "[no tests to run]". Now 71.4%, and CI's uploaded artifact is correct. - vitest.config.ts excluded 2.2k LOC unexplained, including two files that already had tests. Trimmed to three entries, each justified inline. - api.HandleLiveKitHealthForTest re-implemented the handler it claimed to expose, so eight call sites tested a copy. Added a hook to the real one. Two bugs found and pinned rather than silently patched: logctx.WithGroup nests req_id under the group, and drag-reorder.ts takes one listener ref per channel but releases one per sidebar, so the count never reaches zero. Coverage: client 92.93% -> 94.87% statements (3371 -> 3572 tests) even after un-excluding hidden files; Rust 47 -> 74 tests; Go zero-coverage functions ~70 -> 21, with plugin 61->77%, admin 67->86%, db 76->84%, service 85->91%. Verified: go vet, all four build-tag variants, go test -race, -tags deadlock, vitest --coverage, cargo test --lib, cargo clippy --all-targets, playwright. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AEETs3Vh6sAHHb1jMBL75g
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { defineConfig } from "vitest/config";
|
|
import { resolve } from "path";
|
|
|
|
export default defineConfig({
|
|
resolve: {
|
|
alias: {
|
|
"@lib": resolve(__dirname, "src/lib"),
|
|
"@stores": resolve(__dirname, "src/stores"),
|
|
"@components": resolve(__dirname, "src/components"),
|
|
"@pages": resolve(__dirname, "src/pages"),
|
|
"@styles": resolve(__dirname, "src/styles"),
|
|
},
|
|
},
|
|
test: {
|
|
environment: "jsdom",
|
|
// Both the `tests/**/*.test.ts` suite and component-local
|
|
// `src/**/*.test.ts` files are picked up.
|
|
include: ["tests/**/*.test.ts", "src/**/*.test.ts"],
|
|
coverage: {
|
|
provider: "v8",
|
|
include: ["src/**/*.ts"],
|
|
// Keep this list minimal and justified. An unexplained entry hides a
|
|
// real gap: window-state.ts, credentials.ts, updater.ts and
|
|
// UpdateNotifier.ts each sat here while having (or gaining) tests, so
|
|
// their coverage never showed up in any report.
|
|
exclude: [
|
|
"src/**/*.d.ts",
|
|
// App bootstrap: wires the DOM, router and stores together at startup.
|
|
// Has no seam to test below the e2e level; covered by tests/e2e.
|
|
"src/main.ts",
|
|
// Top-level page orchestrator, likewise covered at the e2e level.
|
|
// Tracked for unit coverage — remove this entry once it has tests.
|
|
"src/pages/MainPage.ts",
|
|
// RNNoise AudioWorklet host: needs a real AudioContext/WASM runtime
|
|
// that jsdom cannot provide. Exercised by tests/browser and e2e.
|
|
"src/lib/noise-suppression.ts",
|
|
],
|
|
thresholds: {
|
|
statements: 70,
|
|
branches: 70,
|
|
functions: 70,
|
|
lines: 70,
|
|
},
|
|
},
|
|
},
|
|
});
|