Files
OmniRoute/tests/unit/combo-auto-tier.test.ts
Dizzle 2b276e2043 fix(auto-combo): stop neutral snapshot scoring on observed tier/quality/breaker (#12794)
Validado numa worktree combinada com a onda de roteamento/free-tier desta leva sobre `release/v3.8.51`: typecheck:core limpo, check-api-typecheck OK (288), check-file-size OK após rebaseline, 84/85 nos testes focados.

Tratar breaker aberto como equivalente a fechado no scoring de snapshot é pior que não pontuar: afirma saúde onde há falha conhecida. Trocar as três constantes neutras por valor observado é a correção, e manter preço e orçamento fora do escopo mantém a PR revisável.

**Integração:** o `computeSnapshotWeights` conflitou com o #12731, que adiciona peso de `reliability` a partir de `failureRate`/`errorRate`. Os dois cobrem chaves diferentes e compõem — ficaram ambos: reliability do #12731, health via breaker e quality desta PR, quota neutro nos dois. Nenhum dos dois lados foi descartado.
2026-09-10 09:12:58 -03:00

39 lines
1.9 KiB
TypeScript

// tests/unit/combo-auto-tier.test.ts — runner node:test
import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { calculateTierScore } from "../../open-sse/services/autoCombo/scoring.ts";
describe("combo auto tier projection", () => {
it("ultra > pro > standard > free discriminant (order only, no absolutes)", () => {
const ultra = calculateTierScore("ultra", 86400);
const pro = calculateTierScore("pro", 86400);
const std = calculateTierScore("standard", 86400);
const free = calculateTierScore("free", 86400);
// Formula is base*0.8 + resetBonus*0.2 — assert order, never absolute values
assert.ok(ultra > pro && pro > std && std > free);
});
it("unknown tier falls back to standard base (order preserved)", () => {
const undef = calculateTierScore(undefined, 86400);
const std = calculateTierScore("standard", 86400);
assert.equal(undef, std);
});
it("resetBonus short interval higher than long (same tier)", () => {
const sShort = calculateTierScore("standard", 3600);
const sLong = calculateTierScore("standard", 86400);
assert.ok(sShort > sLong);
});
it("projected tier discriminates vs neutral (shared helper, no file read)", async () => {
// Imports the SAME pure helper combo.ts uses — no local
// mirror, so prod/test divergence fails here instead of shipping green.
const { projectAccountTier } = await import("../../open-sse/services/autoCombo/scoring.ts");
const sUltra = calculateTierScore(projectAccountTier({ accountTier: "ultra" }), 86400);
const sNeutral = calculateTierScore(projectAccountTier({}), 86400);
const sPsd = calculateTierScore(
projectAccountTier({ providerSpecificData: { accountTier: "pro" } }),
86400
);
assert.ok(sUltra > sNeutral, `ultra ${sUltra} should exceed neutral ${sNeutral}`);
assert.ok(sPsd > sNeutral, `psd-pro ${sPsd} should exceed neutral ${sNeutral}`);
});
});