import { test, expect, describe } from "bun:test" import { resolvePluginProviders } from "../../src/cli/cmd/auth" import type { Hooks } from "@opencode-ai/plugin" function hookWithAuth(provider: string): Hooks { return { auth: { provider, methods: [], }, } } function hookWithoutAuth(): Hooks { return {} } describe("resolvePluginProviders", () => { test("returns plugin providers not in models.dev", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("portkey")], existingProviders: {}, disabled: new Set(), providerNames: {}, }) expect(result).toEqual([{ id: "portkey", name: "portkey" }]) }) test("skips providers already in models.dev", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("anthropic")], existingProviders: { anthropic: {} }, disabled: new Set(), providerNames: {}, }) expect(result).toEqual([]) }) test("deduplicates across plugins", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("portkey"), hookWithAuth("portkey")], existingProviders: {}, disabled: new Set(), providerNames: {}, }) expect(result).toEqual([{ id: "portkey", name: "portkey" }]) }) test("respects disabled_providers", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("portkey")], existingProviders: {}, disabled: new Set(["portkey"]), providerNames: {}, }) expect(result).toEqual([]) }) test("respects enabled_providers when provider is absent", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("portkey")], existingProviders: {}, disabled: new Set(), enabled: new Set(["anthropic"]), providerNames: {}, }) expect(result).toEqual([]) }) test("includes provider when in enabled set", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("portkey")], existingProviders: {}, disabled: new Set(), enabled: new Set(["portkey"]), providerNames: {}, }) expect(result).toEqual([{ id: "portkey", name: "portkey" }]) }) test("resolves name from providerNames", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("portkey")], existingProviders: {}, disabled: new Set(), providerNames: { portkey: "Portkey AI" }, }) expect(result).toEqual([{ id: "portkey", name: "Portkey AI" }]) }) test("falls back to id when no name configured", () => { const result = resolvePluginProviders({ hooks: [hookWithAuth("portkey")], existingProviders: {}, disabled: new Set(), providerNames: {}, }) expect(result).toEqual([{ id: "portkey", name: "portkey" }]) }) test("skips hooks without auth", () => { const result = resolvePluginProviders({ hooks: [hookWithoutAuth(), hookWithAuth("portkey"), hookWithoutAuth()], existingProviders: {}, disabled: new Set(), providerNames: {}, }) expect(result).toEqual([{ id: "portkey", name: "portkey" }]) }) test("returns empty for no hooks", () => { const result = resolvePluginProviders({ hooks: [], existingProviders: {}, disabled: new Set(), providerNames: {}, }) expect(result).toEqual([]) }) })