mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-05-05 17:56:56 +00:00
- SECURITY.md: supported versions 3.4.x/3.0.x, MCP scopes (10), audit trail, Zod v4 validation, TLS/CLI fingerprint - CONTRIBUTING.md: Node >=18<24, port 20128, project structure (21 DB modules, 25 MCP tools, memory/skills/electron), 122 test files - README.md: 60+ providers, 25 MCP tools, 10 scopes, 9 strategies - .dockerignore: expanded exclusions (tests, docs, electron, *.tgz) - .npmignore: added llm.txt, bun.lock, tsconfig variants, subprojects - .gitignore: _*/ dirs, docs/new-features, COVERAGE_PLAN allowlist Deleted files: - 20 README.*.md redirect stubs (consolidated in docs/i18n/) - 4 scratch test files (test_exception/target_format/translator/out) - restart.sh, validate-translation.sh (obsolete scripts) - Moved COVERAGE_PLAN.md -> docs/COVERAGE_PLAN.md
166 lines
6.5 KiB
Markdown
166 lines
6.5 KiB
Markdown
# Test Coverage Plan
|
|
|
|
Last updated: 2026-03-28
|
|
|
|
## Baseline
|
|
|
|
There are multiple coverage numbers depending on how the report is computed. For planning, only one of them is useful.
|
|
|
|
| Metric | Scope | Statements / Lines | Branches | Functions | Notes |
|
|
| -------------------- | ----------------------------------------------------- | -----------------: | -------: | --------: | --------------------------------------------------- |
|
|
| Legacy | Old `npm run test:coverage` | 79.42% | 75.15% | 67.94% | Inflated: counts test files and excludes `open-sse` |
|
|
| Diagnostic | Source-only, excluding tests and excluding `open-sse` | 68.16% | 63.55% | 64.06% | Useful only to isolate `src/**` |
|
|
| Recommended baseline | Source-only, excluding tests and including `open-sse` | 56.95% | 66.05% | 57.80% | This is the project-wide baseline to improve |
|
|
|
|
The recommended baseline is the number to optimize against.
|
|
|
|
## Rules
|
|
|
|
- Coverage targets apply to source files, not to `tests/**`.
|
|
- `open-sse/**` is part of the product and must remain in scope.
|
|
- New code should not reduce coverage in touched areas.
|
|
- Prefer testing behavior and branch outcomes over implementation details.
|
|
- Prefer temp SQLite databases and small fixtures over broad mocks for `src/lib/db/**`.
|
|
|
|
## Current command set
|
|
|
|
- `npm run test:coverage`
|
|
- Main source coverage gate for the unit test suite
|
|
- Generates `text-summary`, `html`, `json-summary`, and `lcov`
|
|
- `npm run coverage:report`
|
|
- Detailed file-by-file report from the latest run
|
|
- `npm run test:coverage:legacy`
|
|
- Historical comparison only
|
|
|
|
## Milestones
|
|
|
|
| Phase | Target | Focus |
|
|
| ------- | ---------------------: | ------------------------------------------------- |
|
|
| Phase 1 | 60% statements / lines | Quick wins and low-risk utility coverage |
|
|
| Phase 2 | 65% statements / lines | DB and route foundations |
|
|
| Phase 3 | 70% statements / lines | Provider validation and usage analytics |
|
|
| Phase 4 | 75% statements / lines | `open-sse` translators and helpers |
|
|
| Phase 5 | 80% statements / lines | `open-sse` handlers and executor branches |
|
|
| Phase 6 | 85% statements / lines | Harder edge cases, branch debt, regression suites |
|
|
| Phase 7 | 90% statements / lines | Final sweep, gap closure, strict ratchet |
|
|
|
|
Branches and functions should ratchet upward with each phase, but the primary hard target is statements / lines.
|
|
|
|
## Priority hotspots
|
|
|
|
These files or areas offer the best return for the next phases:
|
|
|
|
1. `open-sse/handlers`
|
|
- `chatCore.ts` at 7.57%
|
|
- Overall directory at 29.07%
|
|
2. `open-sse/translator/request`
|
|
- Overall directory at 36.39%
|
|
- Many translators are still near single-digit coverage
|
|
3. `open-sse/translator/response`
|
|
- Overall directory at 8.07%
|
|
4. `open-sse/executors`
|
|
- Overall directory at 36.62%
|
|
5. `src/lib/db`
|
|
- `models.ts` at 20.66%
|
|
- `registeredKeys.ts` at 34.46%
|
|
- `modelComboMappings.ts` at 36.25%
|
|
- `settings.ts` at 46.40%
|
|
- `webhooks.ts` at 33.33%
|
|
6. `src/lib/usage`
|
|
- `usageHistory.ts` at 21.12%
|
|
- `usageStats.ts` at 9.56%
|
|
- `costCalculator.ts` at 30.00%
|
|
7. `src/lib/providers`
|
|
- `validation.ts` at 41.16%
|
|
8. Low-risk utility and API files for early gains
|
|
- `src/shared/utils/upstreamError.ts`
|
|
- `src/shared/utils/apiAuth.ts`
|
|
- `src/lib/api/errorResponse.ts`
|
|
- `src/app/api/settings/require-login/route.ts`
|
|
- `src/app/api/providers/[id]/models/route.ts`
|
|
|
|
## Execution checklist
|
|
|
|
### Phase 1: 56.95% -> 60%
|
|
|
|
- [x] Fix coverage metric so it reflects source code instead of test files
|
|
- [x] Keep a legacy coverage script for comparison
|
|
- [x] Record the baseline and hotspots in-repo
|
|
- [ ] Add focused tests for low-risk utilities:
|
|
- `src/shared/utils/upstreamError.ts`
|
|
- `src/shared/utils/fetchTimeout.ts`
|
|
- `src/lib/api/errorResponse.ts`
|
|
- `src/shared/utils/apiAuth.ts`
|
|
- `src/lib/display/names.ts`
|
|
- [ ] Add route tests for:
|
|
- `src/app/api/settings/require-login/route.ts`
|
|
- `src/app/api/providers/[id]/models/route.ts`
|
|
|
|
### Phase 2: 60% -> 65%
|
|
|
|
- [ ] Add DB-backed tests for:
|
|
- `src/lib/db/modelComboMappings.ts`
|
|
- `src/lib/db/settings.ts`
|
|
- `src/lib/db/registeredKeys.ts`
|
|
- [ ] Cover branch behavior in:
|
|
- `src/lib/providers/validation.ts`
|
|
- `src/app/api/v1/embeddings/route.ts`
|
|
- `src/app/api/v1/moderations/route.ts`
|
|
|
|
### Phase 3: 65% -> 70%
|
|
|
|
- [ ] Add usage analytics tests for:
|
|
- `src/lib/usage/usageHistory.ts`
|
|
- `src/lib/usage/usageStats.ts`
|
|
- `src/lib/usage/costCalculator.ts`
|
|
- [ ] Expand route coverage for proxy management and settings branches
|
|
|
|
### Phase 4: 70% -> 75%
|
|
|
|
- [ ] Cover translator helpers and central translation paths:
|
|
- `open-sse/translator/index.ts`
|
|
- `open-sse/translator/helpers/*`
|
|
- `open-sse/translator/request/*`
|
|
- `open-sse/translator/response/*`
|
|
|
|
### Phase 5: 75% -> 80%
|
|
|
|
- [ ] Add handler-level tests for:
|
|
- `open-sse/handlers/chatCore.ts`
|
|
- `open-sse/handlers/responsesHandler.js`
|
|
- `open-sse/handlers/imageGeneration.js`
|
|
- `open-sse/handlers/embeddings.js`
|
|
- [ ] Add executor branch coverage for provider-specific auth, retries, and endpoint overrides
|
|
|
|
### Phase 6: 80% -> 85%
|
|
|
|
- [ ] Merge more edge-case suites into the main coverage path
|
|
- [ ] Increase function coverage for DB modules with weak constructor/helper coverage
|
|
- [ ] Close branch gaps in `settings.ts`, `registeredKeys.ts`, `validation.ts`, and translator helpers
|
|
|
|
### Phase 7: 85% -> 90%
|
|
|
|
- [ ] Treat the remaining low-coverage files as blockers
|
|
- [ ] Add regression tests for every uncovered production bug fixed during the push to 90%
|
|
- [ ] Raise the coverage gate in CI only after the local baseline is stable for at least two consecutive runs
|
|
|
|
## Ratchet policy
|
|
|
|
Update `npm run test:coverage` thresholds only after the project actually exceeds the next milestone with a comfortable buffer.
|
|
|
|
Recommended ratchet sequence:
|
|
|
|
1. 55/60/55
|
|
2. 60/62/58
|
|
3. 65/64/62
|
|
4. 70/66/66
|
|
5. 75/70/72
|
|
6. 80/75/78
|
|
7. 85/80/84
|
|
8. 90/85/88
|
|
|
|
Order is `statements-lines / branches / functions`.
|
|
|
|
## Known gap
|
|
|
|
The current coverage command measures the main Node unit suite and includes source reached from it, including `open-sse`. It does not yet merge Vitest coverage into a single unified report. That merge is worth doing later, but it is not a blocker for starting the 60% -> 80% climb.
|