mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-14 10:52:17 +03:00
Um pool `auto/*` vazio que não diz por que está vazio é a pior forma de falha: o operador vê ausência e não sabe se é config, cota ou catálogo. Registrar qual estágio removeu quantos, e carregar `dropReason` em cada entrada de `quotaHealth.providers`, transforma silêncio em diagnóstico. Os três defeitos achados de carona valem tanto quanto a feature — em especial a cota livre recorrente sem teto sendo tratada como desconhecida em vez de segura, que é justamente o caso que mais aparece. Revalidei após reconstruir sobre o tip: **15/15**, typecheck:core limpo, `check-api-typecheck` OK (289). **Uma mudança minha no `catalogPaidFilter.ts`.** Mantive a sua extração — ela é mais limpa que o predicado inline — mas troquei o corpo para usar `isFreeForProvider` por id. O módulo OR-eava `providerHasFreeModels(resolved) || providerHasFreeModels(canonical)` num único `freeProvider` e depois testava `isFreeModel` em cada um. Com isso, um id cujo próprio provider não documenta tier livre passa a ler como grátis sempre que o alias irmão documenta — que é exatamente o buraco que o #12744 fechou e já está no tip. Por id preserva a garantia; nenhuma outra linha do módulo mudou. **Dívida registrada:** o `virtualFactory.ts` foi de 1187 para 1219 somando esta onda e cruzou o teto de 1200 pela primeira vez. Congelado com os candidatos a extração nomeados na justificativa.
31 lines
1.4 KiB
TypeScript
31 lines
1.4 KiB
TypeScript
/**
|
|
* When the free-only import filter matches nothing, the sync must surface an
|
|
* empty model list — not silently fall back to the stale synced snapshot.
|
|
* Exercises the real prod helper, not a local copy of the ternary.
|
|
*/
|
|
import assert from "node:assert/strict";
|
|
import { describe, it } from "node:test";
|
|
import { resolveEffectiveAvailableModels } from "../../src/shared/utils/modelListResolution.ts";
|
|
import { selectModelsForImport } from "../../src/shared/utils/freeModels.ts";
|
|
|
|
describe("sync-models freeFilterEmpty stale cut (prod code)", () => {
|
|
it("freeFilterEmpty true → [] even with a stale synced snapshot", () => {
|
|
assert.deepEqual(resolveEffectiveAvailableModels(true, [], [{ id: "old" }]), []);
|
|
});
|
|
it("freeFilterEmpty false → discovered, else synced (legacy paths intact)", () => {
|
|
assert.deepEqual(resolveEffectiveAvailableModels(false, [{ id: "new" }], [{ id: "old" }]), [
|
|
{ id: "new" },
|
|
]);
|
|
assert.deepEqual(resolveEffectiveAvailableModels(false, [], [{ id: "old" }]), [{ id: "old" }]);
|
|
});
|
|
it("end-to-end: selectModelsForImport empty → resolveEffective [] (no stale fallback)", () => {
|
|
const { models, freeFilterEmpty } = selectModelsForImport(
|
|
"some-provider-without-free-tier",
|
|
[{ id: "x/y" }],
|
|
true
|
|
);
|
|
assert.equal(freeFilterEmpty, true);
|
|
assert.deepEqual(resolveEffectiveAvailableModels(freeFilterEmpty, models, [{ id: "old" }]), []);
|
|
});
|
|
});
|