test: unit tests for access, storage, userApiKeys, chat doc resolution
Ported from the amal66 fork (see index Open-Legal-Products/mike#205)
onto current main, adapted to this repo's backend/ layout
(apps/api/src/lib -> backend/src/lib), plus a v8 coverage ratchet.
Suites ported (51 new tests, verified locally):
- access.test.ts (7): owner/shared/private project access, doc access,
review sharing, document-ID filtering. Dropped the fork's "org RBAC"
describe block (7 cases) — org_id/org_members multi-tenancy and the
role/canManage fields do not exist in this repo's access.ts.
- storage.test.ts (25): filename normalization/sanitization, RFC 5987
encoding, Content-Disposition, storage key helpers. Dropped the fork's
vi.mock of lib/env — this repo has no env module; storage reads
process.env directly and the tested helpers are pure.
- userApiKeys.test.ts (10): normalizeApiKeyProvider + hasEnvApiKey.
Added a beforeEach env clear so shell-exported API keys can't leak
into assertions.
- chatTypes.test.ts (9): resolveDoc/resolveDocLabel, which live in
lib/chat/types.ts here (the fork's lib/chatTools.ts equivalent).
Dropped generateSpotlightNonce cases (2) — no such export here.
Suites dropped entirely (subject not present in this repo):
- upload.test.ts — tested hasMagicBytes; this repo's lib/upload.ts is
only the multer middleware and exports no magic-byte checker.
- userSettings.test.ts — tested resolveTabularModel (fork-only keyed-
provider fallback); this repo resolves tabular_model via
resolveModel with a static default.
Coverage ratchet: vitest.config.mts adds v8 coverage over src/lib/**
with floors measured against this tree (2.58% stmts, 2.00% branches,
4.61% funcs, 2.58% lines -> floors 2/2/4/2). Full suite: 5 files,
63 tests passing (incl. the pre-existing 12 in downloadTokens.test.ts);
npm run test:coverage and npm run build both pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:48:53 -07:00
|
|
|
import { defineConfig } from "vitest/config";
|
|
|
|
|
|
|
|
|
|
export default defineConfig({
|
|
|
|
|
test: {
|
|
|
|
|
environment: "node",
|
|
|
|
|
include: ["src/**/*.test.ts"],
|
|
|
|
|
exclude: ["dist/**", "node_modules/**"],
|
|
|
|
|
// Generous timeouts so cold-start module transform/import latency
|
|
|
|
|
// can't cause spurious timeout failures on a cold CI runner. Warm
|
|
|
|
|
// tests finish in ~1s; this only guards the pathological cold case —
|
|
|
|
|
// it does not mask hangs.
|
|
|
|
|
testTimeout: 20000,
|
|
|
|
|
hookTimeout: 20000,
|
|
|
|
|
coverage: {
|
|
|
|
|
provider: "v8",
|
|
|
|
|
reporter: ["text", "lcov"],
|
|
|
|
|
include: ["src/lib/**"],
|
|
|
|
|
// No-regression RATCHET floor, not a target. src/lib/** spans the
|
2026-07-20 11:21:35 -07:00
|
|
|
// tested libs (access, storage keys/dispositions, downloadTokens,
|
|
|
|
|
// userApiKeys provider/env checks, chat doc resolution, safeError,
|
|
|
|
|
// llm model resolution, chat citations, userLookup,
|
|
|
|
|
// documentVersions, userDataCleanup) AND the large, still-untested
|
|
|
|
|
// feature libs (courtlistener, mcp, chat tool dispatch, llm
|
|
|
|
|
// providers, spreadsheet/docx handling), so the global number is
|
|
|
|
|
// still low. Measured on this tree: 11.18% statements, 10.98%
|
|
|
|
|
// branches, 14.43% functions, 10.91% lines. These floors sit just
|
|
|
|
|
// below that (rounded down to whole percents) so CI fails on a
|
|
|
|
|
// *drop*. Floors only go up: when you add tests, raise them in the
|
|
|
|
|
// same PR. Backlog + per-area status: docs/testing-coverage.md.
|
test: unit tests for access, storage, userApiKeys, chat doc resolution
Ported from the amal66 fork (see index Open-Legal-Products/mike#205)
onto current main, adapted to this repo's backend/ layout
(apps/api/src/lib -> backend/src/lib), plus a v8 coverage ratchet.
Suites ported (51 new tests, verified locally):
- access.test.ts (7): owner/shared/private project access, doc access,
review sharing, document-ID filtering. Dropped the fork's "org RBAC"
describe block (7 cases) — org_id/org_members multi-tenancy and the
role/canManage fields do not exist in this repo's access.ts.
- storage.test.ts (25): filename normalization/sanitization, RFC 5987
encoding, Content-Disposition, storage key helpers. Dropped the fork's
vi.mock of lib/env — this repo has no env module; storage reads
process.env directly and the tested helpers are pure.
- userApiKeys.test.ts (10): normalizeApiKeyProvider + hasEnvApiKey.
Added a beforeEach env clear so shell-exported API keys can't leak
into assertions.
- chatTypes.test.ts (9): resolveDoc/resolveDocLabel, which live in
lib/chat/types.ts here (the fork's lib/chatTools.ts equivalent).
Dropped generateSpotlightNonce cases (2) — no such export here.
Suites dropped entirely (subject not present in this repo):
- upload.test.ts — tested hasMagicBytes; this repo's lib/upload.ts is
only the multer middleware and exports no magic-byte checker.
- userSettings.test.ts — tested resolveTabularModel (fork-only keyed-
provider fallback); this repo resolves tabular_model via
resolveModel with a static default.
Coverage ratchet: vitest.config.mts adds v8 coverage over src/lib/**
with floors measured against this tree (2.58% stmts, 2.00% branches,
4.61% funcs, 2.58% lines -> floors 2/2/4/2). Full suite: 5 files,
63 tests passing (incl. the pre-existing 12 in downloadTokens.test.ts);
npm run test:coverage and npm run build both pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:48:53 -07:00
|
|
|
thresholds: {
|
2026-07-20 11:21:35 -07:00
|
|
|
statements: 11,
|
|
|
|
|
branches: 10,
|
|
|
|
|
functions: 14,
|
|
|
|
|
lines: 10,
|
test: unit tests for access, storage, userApiKeys, chat doc resolution
Ported from the amal66 fork (see index Open-Legal-Products/mike#205)
onto current main, adapted to this repo's backend/ layout
(apps/api/src/lib -> backend/src/lib), plus a v8 coverage ratchet.
Suites ported (51 new tests, verified locally):
- access.test.ts (7): owner/shared/private project access, doc access,
review sharing, document-ID filtering. Dropped the fork's "org RBAC"
describe block (7 cases) — org_id/org_members multi-tenancy and the
role/canManage fields do not exist in this repo's access.ts.
- storage.test.ts (25): filename normalization/sanitization, RFC 5987
encoding, Content-Disposition, storage key helpers. Dropped the fork's
vi.mock of lib/env — this repo has no env module; storage reads
process.env directly and the tested helpers are pure.
- userApiKeys.test.ts (10): normalizeApiKeyProvider + hasEnvApiKey.
Added a beforeEach env clear so shell-exported API keys can't leak
into assertions.
- chatTypes.test.ts (9): resolveDoc/resolveDocLabel, which live in
lib/chat/types.ts here (the fork's lib/chatTools.ts equivalent).
Dropped generateSpotlightNonce cases (2) — no such export here.
Suites dropped entirely (subject not present in this repo):
- upload.test.ts — tested hasMagicBytes; this repo's lib/upload.ts is
only the multer middleware and exports no magic-byte checker.
- userSettings.test.ts — tested resolveTabularModel (fork-only keyed-
provider fallback); this repo resolves tabular_model via
resolveModel with a static default.
Coverage ratchet: vitest.config.mts adds v8 coverage over src/lib/**
with floors measured against this tree (2.58% stmts, 2.00% branches,
4.61% funcs, 2.58% lines -> floors 2/2/4/2). Full suite: 5 files,
63 tests passing (incl. the pre-existing 12 in downloadTokens.test.ts);
npm run test:coverage and npm run build both pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:48:53 -07:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|