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