Files
AgentCompany/tests/unit/connector-provider-guard.test.ts
T

57 lines
2.1 KiB
TypeScript

import { readFileSync } from "node:fs";
import { join } from "node:path";
import { getProviders } from "@mariozechner/pi-ai";
import { describe, expect, it } from "vitest";
import {
CONNECTORS,
getConnectorKnownProvider,
getConnectorProvider,
isLocalModelResolverProvider,
isPiKnownProvider,
} from "../../src/main/connectors";
import { FIREWORKS_FIREPASS_MODEL_ID, resolveModel, resolveModels } from "../../src/main/model-resolver";
describe("connector provider guard", () => {
it("classifies catalog providers before they enter pi-ai APIs", () => {
const piProviders = new Set(getProviders());
for (const connector of CONNECTORS) {
const provider = getConnectorProvider(connector.id);
expect(provider).toBe(connector.provider);
if (isLocalModelResolverProvider(provider)) {
expect(getConnectorKnownProvider(connector.id)).toBeNull();
} else {
expect(isPiKnownProvider(provider)).toBe(true);
expect(piProviders.has(provider)).toBe(true);
expect(getConnectorKnownProvider(connector.id)).toBe(provider);
}
}
});
it("uses the provider guard in model discovery", () => {
const anthropicModels = resolveModels("anthropic");
const firstAnthropicModel = anthropicModels[0];
if (!firstAnthropicModel) throw new Error("Anthropic model catalog is empty.");
expect(resolveModel("anthropic", firstAnthropicModel.id)?.id).toBe(firstAnthropicModel.id);
expect(resolveModels("not-a-pi-provider")).toEqual([]);
expect(resolveModel("not-a-pi-provider", "model-id")).toBeNull();
expect(resolveModel("fireworks-firepass", "ignored")?.id).toBe(FIREWORKS_FIREPASS_MODEL_ID);
});
it("keeps provider calls free of erased never casts", () => {
const files = [
"src/main/model-resolver.ts",
"src/main/connector-health-service.ts",
"src/main/credentials/credential-resolver.ts",
];
for (const file of files) {
const source = readFileSync(join(process.cwd(), file), "utf8");
expect(source).not.toContain("provider as never");
expect(source).not.toContain("definition.provider as never");
}
});
});