54 lines
2.5 KiB
TypeScript
54 lines
2.5 KiB
TypeScript
// #6147 — routing/settings UX clarity. Pure-function guards for two of the three
|
|
// sub-fixes:
|
|
// 1. Weighted effective-share % (weight ÷ Σweights), incl. total===0 and sum≠100.
|
|
// 3. Opt-in base-URL override eligibility predicate for built-in providers.
|
|
// (Item 2 is a display-only label rename with no pure seam — manual verification.)
|
|
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { effectiveSharePercent } from "../../src/app/(dashboard)/dashboard/combos/WeightTotalBar.tsx";
|
|
import {
|
|
isBaseUrlOverrideEligibleProvider,
|
|
isBaseUrlConfigurableProvider,
|
|
} from "../../src/app/(dashboard)/dashboard/providers/[id]/providerPageHelpers.ts";
|
|
|
|
test("effectiveSharePercent — sum === 100 keeps raw weight", () => {
|
|
assert.equal(effectiveSharePercent(30, 100), 30);
|
|
assert.equal(effectiveSharePercent(70, 100), 70);
|
|
});
|
|
|
|
test("effectiveSharePercent — sum !== 100 rescales to the effective share", () => {
|
|
// Two equal weights of 30 (total 60) are each an effective 50%.
|
|
assert.equal(effectiveSharePercent(30, 60), 50);
|
|
// Over-100 total: 150 total, weight 75 → 50%.
|
|
assert.equal(effectiveSharePercent(75, 150), 50);
|
|
});
|
|
|
|
test("effectiveSharePercent — guards total === 0 and non-positive weight (no NaN)", () => {
|
|
assert.equal(effectiveSharePercent(0, 0), 0);
|
|
assert.equal(effectiveSharePercent(50, 0), 0);
|
|
assert.equal(effectiveSharePercent(0, 100), 0);
|
|
assert.equal(effectiveSharePercent(-10, 100), 0);
|
|
assert.ok(!Number.isNaN(effectiveSharePercent(10, 0)));
|
|
});
|
|
|
|
test("isBaseUrlOverrideEligibleProvider — built-in providers are opt-in eligible", () => {
|
|
// A plain built-in that has no dedicated base-URL field today.
|
|
assert.equal(isBaseUrlOverrideEligibleProvider("openai"), true);
|
|
assert.equal(isBaseUrlOverrideEligibleProvider("groq"), true);
|
|
});
|
|
|
|
test("isBaseUrlOverrideEligibleProvider — providers with an always-on field are NOT re-offered", () => {
|
|
// Everything already covered by the configurable set stays false here so the
|
|
// override does not double up on the existing dedicated field.
|
|
for (const id of ["azure-openai", "databricks", "siliconflow"]) {
|
|
assert.equal(isBaseUrlConfigurableProvider(id), true);
|
|
assert.equal(isBaseUrlOverrideEligibleProvider(id), false);
|
|
}
|
|
});
|
|
|
|
test("isBaseUrlOverrideEligibleProvider — empty/nullish ids are not eligible", () => {
|
|
assert.equal(isBaseUrlOverrideEligibleProvider(""), false);
|
|
assert.equal(isBaseUrlOverrideEligibleProvider(null), false);
|
|
assert.equal(isBaseUrlOverrideEligibleProvider(undefined), false);
|
|
});
|