Files
OmniRoute/tests/unit/firefly-cookie-validation-10522.test.ts
Praveen K Palaniswamy 65e81158ab fix(ollama): route models by advertised capability (#11088)
Landed with the design call resolved per the owner's pick — **option 1**: the synced store is now endpoint-agnostic (persistDiscoveredModels and managedModelImport no longer drop non-chat models at write time), and chat selectability moved to read time (auto-pool expansion in autoStrategy applies filterChatSelectableModels; the models-route projection already had its chatOnly filter). Your discovery test now passes end-to-end (3/3): /api/show capabilities persist per connection and image/embedding requests route through the advertising host.

Reconciliation notes: conflicted areas merged onto the current tip (adobe discovery import, requestedModel preflight signature, resolvedProvider fast-path coexists with the synced-route override — explicit resolution wins); carried base-red drains (#10055 memoization, #11071 test variants) dropped as already-landed; the managed-model-import exclusion test was propagated to the new contract (image/video models persist; the read filter still hides them from chat pickers — pinned by a new assertion). Full battery: 205/206 focused (the one red is a confirmed periodic-timer timing flake on the loaded devbox — 20/20 isolated), autoCombo vitest 30/30, combo suites 46/46, gates + typecheck clean.

Thank you @yourspraveen — the capability probe + routing design was right; it just needed the store contract opened up. Fixes #11087.
2026-08-23 11:45:01 -03:00

91 lines
3.1 KiB
TypeScript

import { test } from "node:test";
import assert from "node:assert/strict";
import { validateProviderApiKey } from "../../src/lib/providers/validation.ts";
import { validateAdobeFireflyProvider } from "../../src/lib/providers/validation/adobeFirefly.ts";
import { resolveProviderId } from "../../src/shared/constants/providers.ts";
import { ADOBE_FIREFLY_CREDITS_BALANCE_URL } from "../../open-sse/services/adobeFireflyClient.ts";
// A well-formed Adobe IMS *user* access token (3-segment JWT, non-guest payload, long
// enough to satisfy looksLikeAdobeJwt). Only used as a routing/shape fixture — never a
// real credential.
const userJwt =
`eyJhbGciOiJSUzI1NiJ9.` +
Buffer.from(
JSON.stringify({
user_id: "0EB@AdobeID",
type: "access_token",
client_id: "clio-playground-web",
})
).toString("base64url") +
`.` +
"x".repeat(60);
function jsonResponse(status: number, body: unknown) {
return new Response(JSON.stringify(body), {
status,
headers: { "content-type": "application/json" },
});
}
test("#10522: resolveProviderId('firefly') stays stable (SPECIALTY_VALIDATORS dual-key registration depends on it)", () => {
assert.equal(resolveProviderId("firefly"), "adobe-firefly");
});
test("#10522: firefly alias dispatches to the Firefly validator, not the generic unsupported fallback", async () => {
const result = await validateProviderApiKey({
provider: "firefly",
apiKey: "not-a-real-token",
providerSpecificData: {},
});
assert.notEqual(result.unsupported, true);
});
test("#10522: adobe-firefly canonical id dispatches to the Firefly validator, not the generic unsupported fallback", async () => {
const result = await validateProviderApiKey({
provider: "adobe-firefly",
apiKey: "not-a-real-token",
providerSpecificData: {},
});
assert.notEqual(result.unsupported, true);
});
test("#10522: expired/invalid token reports valid:false with a real error message (not 'not supported')", async () => {
const fetchImpl = async (url: string | URL) => {
assert.equal(String(url), ADOBE_FIREFLY_CREDITS_BALANCE_URL);
return jsonResponse(401, { error: "invalid_token" });
};
const result = await validateAdobeFireflyProvider({
apiKey: userJwt,
providerSpecificData: {},
fetchImpl: fetchImpl as typeof fetch,
});
assert.equal(result.valid, false);
assert.notEqual((result as { unsupported?: boolean }).unsupported, true);
assert.ok(result.error && result.error.length > 0);
});
test("#10522: a genuine credits balance payload reports valid:true", async () => {
const fetchImpl = async (url: string | URL) => {
assert.equal(String(url), ADOBE_FIREFLY_CREDITS_BALANCE_URL);
return jsonResponse(200, {
total: { quota: { total: 100, used: 10, available: 90 } },
credits: {
firefly_free_credit: { quota: { total: 50, used: 5, available: 45 } },
firefly_plan_credit: { quota: { total: 50, used: 5, available: 45 } },
},
});
};
const result = await validateAdobeFireflyProvider({
apiKey: userJwt,
providerSpecificData: {},
fetchImpl: fetchImpl as typeof fetch,
});
assert.equal(result.valid, true);
assert.equal(result.error, null);
});