7d3e6e6a47
Build and Push Docker Image / build (push) Successful in 39s
Docs Check / Markdown lint (push) Successful in 45s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m12s
CI / Security audit (push) Successful in 1m30s
CI / Tests & coverage (push) Failing after 1m39s
Docs Check / Mermaid diagram parse check (push) Successful in 1m59s
- tests/unit/dashboard.test.js: 58 unit tests covering all 12 pure helper functions in dashboard.js (sanitizeTagLabel, tagMatchesUser, getCoverArt, extractAllTags, extractUserTag, getImportIssues, getSonarrLink, getRadarrLink, canBlocklist, extractEpisode, gatherEpisodes, buildTagBadges) - tests/integration/dashboard.test.js: 35 integration tests for /user-downloads (SAB+Sonarr, SAB+Radarr, qBit, showAll, paused queue, history matching, importIssues, wrong-user filtering), /status (admin guard, webhook check, failure handling), /webhook-metrics, /cover-art (all validation/proxy paths), /blocklist-search (guards, Sonarr, Radarr, failure) - tests/integration/emby.test.js: 13 integration tests covering all 4 Emby routes (sessions, users, users/:id, session/:id/user) with auth guard, happy path, and upstream failure cases - tests/integration/arrRoutes.test.js: 64 integration tests for Sonarr + Radarr (queue, history, series/movies, notifications CRUD, /test, /schema, /sofarr-webhook create+update+missing-config+failure) and SABnzbd (queue, history with custom params) - vitest.config.js: raise global coverage thresholds (statements/functions/ lines 20->55, branches 8->40) to reflect improved coverage (62.5% stmts, 42.6% branches, 64.1% funcs, 65.6% lines) - tests/README.md: document new test files and update coverage table
44 lines
1.7 KiB
JavaScript
44 lines
1.7 KiB
JavaScript
// Copyright (c) 2026 Gordon Bolton. MIT License.
|
|
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/**'
|
|
],
|
|
// Global thresholds only — per-file thresholds are avoided because V8's
|
|
// coverage counting varies across Node versions (CI consistently reports
|
|
// ~10-15% lower than local for module-wrapper and require() lines).
|
|
// Thresholds updated after adding integration tests for dashboard.js,
|
|
// emby.js, sonarr.js, radarr.js, and sabnzbd.js. The SSE /stream
|
|
// endpoint and poller.js remain untested so thresholds are set
|
|
// conservatively to avoid CI flap from V8 coverage variance.
|
|
thresholds: {
|
|
lines: 55,
|
|
functions: 55,
|
|
branches: 40,
|
|
statements: 55
|
|
}
|
|
}
|
|
}
|
|
});
|