fix(github-copilot): publish model catalog

This commit is contained in:
Ayaan Zaidi
2026-04-29 16:30:44 +05:30
parent 1f9fafb288
commit 42b352c57e
3 changed files with 228 additions and 20 deletions

View File

@@ -23,12 +23,14 @@ vi.mock("openclaw/plugin-sdk/provider-model-shared", () => ({
}),
}));
const loadJsonFile = vi.fn();
const saveJsonFile = vi.fn();
const jsonStoreMocks = vi.hoisted(() => ({
loadJsonFile: vi.fn(),
saveJsonFile: vi.fn(),
}));
vi.mock("openclaw/plugin-sdk/json-store", () => ({
loadJsonFile,
saveJsonFile,
loadJsonFile: jsonStoreMocks.loadJsonFile,
saveJsonFile: jsonStoreMocks.saveJsonFile,
}));
vi.mock("openclaw/plugin-sdk/state-paths", () => ({
@@ -67,7 +69,7 @@ describe("github-copilot model defaults", () => {
describe("getDefaultCopilotModelIds", () => {
it("includes claude-opus-4.7", () => {
expect(getDefaultCopilotModelIds()).toContain("claude-opus-4.7");
expect(getDefaultCopilotModelIds()).not.toContain("claude-opus-4.6");
expect(getDefaultCopilotModelIds()).toContain("claude-opus-4.6");
});
it("includes claude-sonnet-4.6", () => {
@@ -303,8 +305,8 @@ describe("github-copilot token", () => {
beforeEach(async () => {
vi.resetModules();
loadJsonFile.mockClear();
saveJsonFile.mockClear();
jsonStoreMocks.loadJsonFile.mockClear();
jsonStoreMocks.saveJsonFile.mockClear();
({ deriveCopilotApiBaseUrlFromToken, resolveCopilotApiToken } = await import("./token.js"));
});
@@ -319,7 +321,7 @@ describe("github-copilot token", () => {
it("uses cache when token is still valid", async () => {
const now = Date.now();
loadJsonFile.mockReturnValue({
jsonStoreMocks.loadJsonFile.mockReturnValue({
token: "cached;proxy-ep=proxy.example.com;",
expiresAt: now + 60 * 60 * 1000,
updatedAt: now,
@@ -329,8 +331,8 @@ describe("github-copilot token", () => {
const res = await resolveCopilotApiToken({
githubToken: "gh",
cachePath,
loadJsonFileImpl: loadJsonFile,
saveJsonFileImpl: saveJsonFile,
loadJsonFileImpl: jsonStoreMocks.loadJsonFile,
saveJsonFileImpl: jsonStoreMocks.saveJsonFile,
fetchImpl: fetchImpl as unknown as typeof fetch,
});
@@ -341,7 +343,7 @@ describe("github-copilot token", () => {
});
it("fetches and stores token when cache is missing", async () => {
loadJsonFile.mockReturnValue(undefined);
jsonStoreMocks.loadJsonFile.mockReturnValue(undefined);
const fetchImpl = vi.fn().mockResolvedValue({
ok: true,
@@ -355,13 +357,13 @@ describe("github-copilot token", () => {
const res = await resolveCopilotApiToken({
githubToken: "gh",
cachePath,
loadJsonFileImpl: loadJsonFile,
saveJsonFileImpl: saveJsonFile,
loadJsonFileImpl: jsonStoreMocks.loadJsonFile,
saveJsonFileImpl: jsonStoreMocks.saveJsonFile,
fetchImpl: fetchImpl as unknown as typeof fetch,
});
expect(res.token).toBe("fresh;proxy-ep=https://proxy.contoso.test;");
expect(res.baseUrl).toBe("https://api.contoso.test");
expect(saveJsonFile).toHaveBeenCalledTimes(1);
expect(jsonStoreMocks.saveJsonFile).toHaveBeenCalledTimes(1);
});
});