Files
openclaw/src/commands/status.summary.runtime.normalization.test.ts
2026-07-29 18:08:41 +08:00

119 lines
3.5 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const normalizeProviderModelIdWithManifestMock = vi.hoisted(() => vi.fn());
const normalizeProviderModelIdWithRuntimeMock = vi.hoisted(() => vi.fn());
vi.mock("../plugins/manifest-model-id-normalization.js", () => ({
normalizeProviderModelIdWithManifest: normalizeProviderModelIdWithManifestMock,
}));
vi.mock("../agents/provider-model-normalization.runtime.js", () => ({
normalizeProviderModelIdWithRuntime: normalizeProviderModelIdWithRuntimeMock,
}));
describe("statusSummaryRuntime configured model normalization", () => {
beforeEach(() => {
vi.resetModules();
normalizeProviderModelIdWithManifestMock.mockReset();
normalizeProviderModelIdWithRuntimeMock.mockReset();
});
it("skips manifest and plugin model normalization for configured model refs", async () => {
const { statusSummaryRuntime } = await import("../status/summary.runtime.js");
expect(
statusSummaryRuntime.resolveConfiguredStatusModelRef({
cfg: {
agents: {
defaults: {
model: { primary: "openai-codex/gpt-5.5" },
},
},
} as never,
defaultProvider: "openai",
defaultModel: "gpt-5.5",
}),
).toEqual({
provider: "openai-codex",
model: "gpt-5.5",
});
expect(
statusSummaryRuntime.resolveConfiguredStatusModelRef({
cfg: {
agents: {
defaults: {
model: { primary: "fast-codex" },
models: {
"openai-codex/gpt-5.5": { alias: "fast-codex" },
},
},
},
} as never,
defaultProvider: "openai",
defaultModel: "gpt-5.5",
}),
).toEqual({
provider: "openai-codex",
model: "gpt-5.5",
});
expect(normalizeProviderModelIdWithManifestMock).not.toHaveBeenCalled();
expect(normalizeProviderModelIdWithRuntimeMock).not.toHaveBeenCalled();
});
it("skips manifest and plugin model normalization for providerless persisted session models", async () => {
const { statusSummaryRuntime } = await import("../status/summary.runtime.js");
const cfg = {
agents: {
defaults: {
model: { primary: "anthropic/claude-sonnet-4-6" },
},
},
} as never;
normalizeProviderModelIdWithManifestMock.mockReturnValue("claude-opus-4-6");
normalizeProviderModelIdWithRuntimeMock.mockReturnValue("runtime-normalized-opus");
expect(
statusSummaryRuntime.resolveSessionModelRef(cfg, {
model: "opus-4.6",
}),
).toEqual({
provider: "anthropic",
model: "opus-4.6",
});
expect(
statusSummaryRuntime.resolveSessionModelRef(cfg, {
model: "fallback-runtime-model",
modelOverride: "opus-4.6",
}),
).toEqual({
provider: "anthropic",
model: "opus-4.6",
});
expect(
statusSummaryRuntime.resolveStatusModelComparisonLabel({
provider: "anthropic",
model: "opus-4.6",
defaultProvider: "anthropic",
}),
).toBe("anthropic/claude-opus-4-6");
expect(
statusSummaryRuntime.resolveStatusModelLookupRef({
provider: "anthropic",
model: "opus-4.6",
defaultProvider: "anthropic",
}),
).toEqual({
provider: "anthropic",
model: "claude-opus-4-6",
});
expect(normalizeProviderModelIdWithManifestMock).not.toHaveBeenCalled();
expect(normalizeProviderModelIdWithRuntimeMock).not.toHaveBeenCalled();
});
});