2
0

plugin-auth-picker.test.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { test, expect, describe } from "bun:test"
  2. import { resolvePluginProviders } from "../../src/cli/cmd/auth"
  3. import type { Hooks } from "@opencode-ai/plugin"
  4. function hookWithAuth(provider: string): Hooks {
  5. return {
  6. auth: {
  7. provider,
  8. methods: [],
  9. },
  10. }
  11. }
  12. function hookWithoutAuth(): Hooks {
  13. return {}
  14. }
  15. describe("resolvePluginProviders", () => {
  16. test("returns plugin providers not in models.dev", () => {
  17. const result = resolvePluginProviders({
  18. hooks: [hookWithAuth("portkey")],
  19. existingProviders: {},
  20. disabled: new Set(),
  21. providerNames: {},
  22. })
  23. expect(result).toEqual([{ id: "portkey", name: "portkey" }])
  24. })
  25. test("skips providers already in models.dev", () => {
  26. const result = resolvePluginProviders({
  27. hooks: [hookWithAuth("anthropic")],
  28. existingProviders: { anthropic: {} },
  29. disabled: new Set(),
  30. providerNames: {},
  31. })
  32. expect(result).toEqual([])
  33. })
  34. test("deduplicates across plugins", () => {
  35. const result = resolvePluginProviders({
  36. hooks: [hookWithAuth("portkey"), hookWithAuth("portkey")],
  37. existingProviders: {},
  38. disabled: new Set(),
  39. providerNames: {},
  40. })
  41. expect(result).toEqual([{ id: "portkey", name: "portkey" }])
  42. })
  43. test("respects disabled_providers", () => {
  44. const result = resolvePluginProviders({
  45. hooks: [hookWithAuth("portkey")],
  46. existingProviders: {},
  47. disabled: new Set(["portkey"]),
  48. providerNames: {},
  49. })
  50. expect(result).toEqual([])
  51. })
  52. test("respects enabled_providers when provider is absent", () => {
  53. const result = resolvePluginProviders({
  54. hooks: [hookWithAuth("portkey")],
  55. existingProviders: {},
  56. disabled: new Set(),
  57. enabled: new Set(["anthropic"]),
  58. providerNames: {},
  59. })
  60. expect(result).toEqual([])
  61. })
  62. test("includes provider when in enabled set", () => {
  63. const result = resolvePluginProviders({
  64. hooks: [hookWithAuth("portkey")],
  65. existingProviders: {},
  66. disabled: new Set(),
  67. enabled: new Set(["portkey"]),
  68. providerNames: {},
  69. })
  70. expect(result).toEqual([{ id: "portkey", name: "portkey" }])
  71. })
  72. test("resolves name from providerNames", () => {
  73. const result = resolvePluginProviders({
  74. hooks: [hookWithAuth("portkey")],
  75. existingProviders: {},
  76. disabled: new Set(),
  77. providerNames: { portkey: "Portkey AI" },
  78. })
  79. expect(result).toEqual([{ id: "portkey", name: "Portkey AI" }])
  80. })
  81. test("falls back to id when no name configured", () => {
  82. const result = resolvePluginProviders({
  83. hooks: [hookWithAuth("portkey")],
  84. existingProviders: {},
  85. disabled: new Set(),
  86. providerNames: {},
  87. })
  88. expect(result).toEqual([{ id: "portkey", name: "portkey" }])
  89. })
  90. test("skips hooks without auth", () => {
  91. const result = resolvePluginProviders({
  92. hooks: [hookWithoutAuth(), hookWithAuth("portkey"), hookWithoutAuth()],
  93. existingProviders: {},
  94. disabled: new Set(),
  95. providerNames: {},
  96. })
  97. expect(result).toEqual([{ id: "portkey", name: "portkey" }])
  98. })
  99. test("returns empty for no hooks", () => {
  100. const result = resolvePluginProviders({
  101. hooks: [],
  102. existingProviders: {},
  103. disabled: new Set(),
  104. providerNames: {},
  105. })
  106. expect(result).toEqual([])
  107. })
  108. })