summaryrefslogtreecommitdiffhomepage
path: root/packages/provider-openai-compat/src/extension.test.ts
blob: 6dc409a79b1003ad9e92d40b2671679a40526d72 (plain)
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"]);
	});
});