115 lines
3.0 KiB
TypeScript
115 lines
3.0 KiB
TypeScript
|
|
import { describe, expect, it, mock } from "bun:test"
|
||
|
|
|
||
|
|
import { refreshModelCapabilities } from "./refresh-model-capabilities"
|
||
|
|
|
||
|
|
describe("refreshModelCapabilities", () => {
|
||
|
|
it("uses config source_url when CLI override is absent", async () => {
|
||
|
|
const loadConfig = mock(() => ({
|
||
|
|
model_capabilities: {
|
||
|
|
source_url: "https://mirror.example/api.json",
|
||
|
|
},
|
||
|
|
}))
|
||
|
|
const refreshCache = mock(async () => ({
|
||
|
|
generatedAt: "2026-03-25T00:00:00.000Z",
|
||
|
|
sourceUrl: "https://mirror.example/api.json",
|
||
|
|
models: {
|
||
|
|
"gpt-5.4": { id: "gpt-5.4" },
|
||
|
|
},
|
||
|
|
}))
|
||
|
|
let stdout = ""
|
||
|
|
|
||
|
|
const exitCode = await refreshModelCapabilities(
|
||
|
|
{ directory: "/repo", json: false },
|
||
|
|
{
|
||
|
|
loadConfig,
|
||
|
|
refreshCache,
|
||
|
|
stdout: {
|
||
|
|
write: (chunk: string) => {
|
||
|
|
stdout += chunk
|
||
|
|
return true
|
||
|
|
},
|
||
|
|
} as never,
|
||
|
|
stderr: {
|
||
|
|
write: () => true,
|
||
|
|
} as never,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
|
||
|
|
expect(exitCode).toBe(0)
|
||
|
|
expect(loadConfig).toHaveBeenCalledWith("/repo", null)
|
||
|
|
expect(refreshCache).toHaveBeenCalledWith({
|
||
|
|
sourceUrl: "https://mirror.example/api.json",
|
||
|
|
})
|
||
|
|
expect(stdout).toContain("Refreshed model capabilities cache (1 models)")
|
||
|
|
})
|
||
|
|
|
||
|
|
it("CLI sourceUrl overrides config and supports json output", async () => {
|
||
|
|
const refreshCache = mock(async () => ({
|
||
|
|
generatedAt: "2026-03-25T00:00:00.000Z",
|
||
|
|
sourceUrl: "https://override.example/api.json",
|
||
|
|
models: {
|
||
|
|
"gpt-5.4": { id: "gpt-5.4" },
|
||
|
|
"claude-opus-4-6": { id: "claude-opus-4-6" },
|
||
|
|
},
|
||
|
|
}))
|
||
|
|
let stdout = ""
|
||
|
|
|
||
|
|
const exitCode = await refreshModelCapabilities(
|
||
|
|
{
|
||
|
|
directory: "/repo",
|
||
|
|
json: true,
|
||
|
|
sourceUrl: "https://override.example/api.json",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
loadConfig: () => ({}),
|
||
|
|
refreshCache,
|
||
|
|
stdout: {
|
||
|
|
write: (chunk: string) => {
|
||
|
|
stdout += chunk
|
||
|
|
return true
|
||
|
|
},
|
||
|
|
} as never,
|
||
|
|
stderr: {
|
||
|
|
write: () => true,
|
||
|
|
} as never,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
|
||
|
|
expect(exitCode).toBe(0)
|
||
|
|
expect(refreshCache).toHaveBeenCalledWith({
|
||
|
|
sourceUrl: "https://override.example/api.json",
|
||
|
|
})
|
||
|
|
expect(JSON.parse(stdout)).toEqual({
|
||
|
|
sourceUrl: "https://override.example/api.json",
|
||
|
|
generatedAt: "2026-03-25T00:00:00.000Z",
|
||
|
|
modelCount: 2,
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
it("returns exit code 1 when refresh fails", async () => {
|
||
|
|
let stderr = ""
|
||
|
|
|
||
|
|
const exitCode = await refreshModelCapabilities(
|
||
|
|
{ directory: "/repo" },
|
||
|
|
{
|
||
|
|
loadConfig: () => ({}),
|
||
|
|
refreshCache: async () => {
|
||
|
|
throw new Error("boom")
|
||
|
|
},
|
||
|
|
stdout: {
|
||
|
|
write: () => true,
|
||
|
|
} as never,
|
||
|
|
stderr: {
|
||
|
|
write: (chunk: string) => {
|
||
|
|
stderr += chunk
|
||
|
|
return true
|
||
|
|
},
|
||
|
|
} as never,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
|
||
|
|
expect(exitCode).toBe(1)
|
||
|
|
expect(stderr).toContain("Failed to refresh model capabilities cache")
|
||
|
|
})
|
||
|
|
})
|