1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
import type { ApiKeyCredentials, AuthContract, HostAPI } from "@dispatch/kernel";
import { describe, expect, it, vi } from "vitest";
import { activate, manifest } from "./extension.js";
function makeFakeHost(overrides: {
getAuthProvider?: (id: string) => AuthContract | undefined;
configGet?: (key: string) => unknown;
}): { host: HostAPI; defineProvider: ReturnType<typeof vi.fn> } {
const defineProvider = vi.fn();
const warn = vi.fn();
const info = vi.fn();
const host = {
defineProvider,
config: { get: overrides.configGet ?? (() => undefined) },
logger: { debug: vi.fn(), info, warn, error: vi.fn() },
getAuthProvider: overrides.getAuthProvider ?? (() => undefined),
} as unknown as HostAPI;
return { host, defineProvider };
}
describe("provider-openai-compat activation", () => {
it("registers provider when auth resolves ApiKeyCredentials", async () => {
const fakeCreds: ApiKeyCredentials = { type: "api-key", apiKey: "sk-test" };
const fakeAuth: AuthContract = {
id: "apikey",
resolve: async () => fakeCreds,
};
const { host, defineProvider } = makeFakeHost({
getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined),
});
await activate(host);
expect(defineProvider).toHaveBeenCalledTimes(1);
expect(defineProvider.mock.calls[0]?.[0]?.id).toBe("openai-compat");
});
it("does not register provider when getAuthProvider returns undefined", async () => {
const { host, defineProvider } = makeFakeHost({
getAuthProvider: () => undefined,
});
await activate(host);
expect(defineProvider).not.toHaveBeenCalled();
});
it("does not register provider when resolve returns null", async () => {
const fakeAuth: AuthContract = {
id: "apikey",
resolve: async () => null,
};
const { host, defineProvider } = makeFakeHost({
getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined),
});
await activate(host);
expect(defineProvider).not.toHaveBeenCalled();
});
it("does not register provider when credentials are not api-key type", async () => {
const fakeAuth: AuthContract = {
id: "apikey",
resolve: async () => ({ type: "bearer-token", token: "tok-123" }),
};
const { host, defineProvider } = makeFakeHost({
getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined),
});
await activate(host);
expect(defineProvider).not.toHaveBeenCalled();
});
it("uses default model when config returns undefined", async () => {
const fakeCreds: ApiKeyCredentials = { type: "api-key", apiKey: "sk-test" };
const fakeAuth: AuthContract = {
id: "apikey",
resolve: async () => fakeCreds,
};
const { host, defineProvider } = makeFakeHost({
getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined),
configGet: () => undefined,
});
await activate(host);
expect(defineProvider).toHaveBeenCalledTimes(1);
});
it("declares dependsOn auth-apikey", () => {
expect(manifest.dependsOn).toEqual(["auth-apikey"]);
});
});
|