Files
diegosouzapw--omniroute/tests/unit/parse-model-defensive.test.ts
2026-07-13 13:39:12 +08:00

33 lines
1.4 KiB
TypeScript

/**
* #2463 — parseModel must not crash on a non-string truthy input.
*
* The NVIDIA NIM investigation (Part C) showed parseModel({}) threw
* `cleanStr.endsWith is not a function`: the `if (!modelStr)` guard only catches
* falsy values (null/undefined/""), so a truthy non-string (object/number/array
* — e.g. a malformed combo `modelStr` or providerSpecificData saved as an object
* by a UI bug) reached `cleanStr.endsWith("[1m]")` and crashed. Same class of bug
* as #2359 (combo modelStr) and the proxyFetch errCode crash.
*/
import test from "node:test";
import assert from "node:assert/strict";
import { parseModel } from "../../open-sse/services/model.ts";
test("#2463 — parseModel returns a null result (no throw) for an object", () => {
assert.doesNotThrow(() => parseModel({} as never));
const parsed = parseModel({} as never);
assert.equal(parsed.provider, null);
assert.equal(parsed.model, null);
assert.equal(parsed.isAlias, false);
});
test("#2463 — parseModel does not throw for number / array inputs", () => {
assert.doesNotThrow(() => parseModel(123 as never));
assert.doesNotThrow(() => parseModel(["nvidia/foo"] as never));
});
test("parseModel still parses a normal provider/model string unchanged", () => {
const parsed = parseModel("nvidia/openai/gpt-oss-120b");
assert.equal(parsed.provider, "nvidia");
assert.equal(parsed.model, "openai/gpt-oss-120b");
});