mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-03 13:52:09 +03:00
- Remove `new Request('http://localhost/api/keys')` default arg from GET handler in src/app/api/keys/route.ts (line 26)
- Fix api-key-reveal-route.test.mjs to pass explicit Request instead of calling GET() with no args
- Add --output-dir coverage to all c8 scripts in package.json
- Add coverage.reportsDirectory: 'coverage' to vitest.config.ts and vitest.mcp.config.ts
- Fix CHANGELOG.md structure (# Changelog + [Unreleased] to top)
- Remove 30+ stale coverage-* directories from project root
- Coverage: Statements 78.76% | Branches 72.75% | Functions 80.93% | Lines 78.76% (all thresholds passed)
80 lines
2.5 KiB
JavaScript
80 lines
2.5 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const { EMERGENCY_FALLBACK_CONFIG, shouldUseFallback, isFallbackDecision } =
|
|
await import("../../open-sse/services/emergencyFallback.ts");
|
|
|
|
test("shouldUseFallback returns disabled when the feature flag is off", () => {
|
|
const result = shouldUseFallback(402, "payment required", false, {
|
|
...EMERGENCY_FALLBACK_CONFIG,
|
|
enabled: false,
|
|
});
|
|
|
|
assert.deepEqual(result, {
|
|
shouldFallback: false,
|
|
reason: "emergency fallback disabled",
|
|
});
|
|
assert.equal(isFallbackDecision(result), false);
|
|
});
|
|
|
|
test("shouldUseFallback skips tool requests when configured", () => {
|
|
const result = shouldUseFallback(402, "payment required", true);
|
|
|
|
assert.deepEqual(result, {
|
|
shouldFallback: false,
|
|
reason: "skipped: request has tools",
|
|
});
|
|
});
|
|
|
|
test("shouldUseFallback triggers on HTTP 402", () => {
|
|
const result = shouldUseFallback(402, "", false);
|
|
|
|
assert.equal(result.shouldFallback, true);
|
|
assert.equal(result.provider, EMERGENCY_FALLBACK_CONFIG.provider);
|
|
assert.equal(result.model, EMERGENCY_FALLBACK_CONFIG.model);
|
|
assert.equal(result.maxOutputTokens, EMERGENCY_FALLBACK_CONFIG.maxOutputTokens);
|
|
assert.equal(isFallbackDecision(result), true);
|
|
});
|
|
|
|
test("shouldUseFallback matches budget keywords case-insensitively", () => {
|
|
const result = shouldUseFallback(500, "Billing hard stop: OUT OF CREDITS", false);
|
|
|
|
assert.equal(result.shouldFallback, true);
|
|
assert.match(result.reason, /budget error detected/i);
|
|
assert.match(result.reason, /(billing|out of credits)/i);
|
|
});
|
|
|
|
test("shouldUseFallback ignores keywords when keyword matching is disabled", () => {
|
|
const result = shouldUseFallback(500, "quota_exceeded", false, {
|
|
...EMERGENCY_FALLBACK_CONFIG,
|
|
triggerOnBudgetKeywords: false,
|
|
});
|
|
|
|
assert.deepEqual(result, {
|
|
shouldFallback: false,
|
|
reason: "no budget error detected",
|
|
});
|
|
});
|
|
|
|
test("shouldUseFallback ignores HTTP 402 when status-trigger fallback is disabled", () => {
|
|
const result = shouldUseFallback(402, "", false, {
|
|
...EMERGENCY_FALLBACK_CONFIG,
|
|
triggerOn402: false,
|
|
});
|
|
|
|
assert.deepEqual(result, {
|
|
shouldFallback: false,
|
|
reason: "no budget error detected",
|
|
});
|
|
});
|
|
|
|
test("shouldUseFallback returns no fallback for unrelated errors", () => {
|
|
const result = shouldUseFallback(500, "temporary upstream timeout", false);
|
|
|
|
assert.deepEqual(result, {
|
|
shouldFallback: false,
|
|
reason: "no budget error detected",
|
|
});
|
|
assert.equal(isFallbackDecision(result), false);
|
|
});
|