provider-zenmux.test.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { describe, expect } from "bun:test"
  2. import { Effect } from "effect"
  3. import { PluginV2 } from "@opencode-ai/core/plugin"
  4. import { ProviderPlugins } from "@opencode-ai/core/plugin/provider"
  5. import { ZenmuxPlugin } from "@opencode-ai/core/plugin/provider/zenmux"
  6. import { expectPluginRegistered, it, provider } from "./provider-helper"
  7. describe("ZenmuxPlugin", () => {
  8. it.effect("is registered so legacy referer headers can be applied", () =>
  9. Effect.sync(() =>
  10. expectPluginRegistered(
  11. ProviderPlugins.map((item) => item.id),
  12. "zenmux",
  13. ),
  14. ),
  15. )
  16. it.effect("applies the exact legacy Zenmux headers", () =>
  17. Effect.gen(function* () {
  18. const plugin = yield* PluginV2.Service
  19. yield* plugin.add(ZenmuxPlugin)
  20. const result = yield* plugin.trigger("provider.update", {}, { provider: provider("zenmux"), cancel: false })
  21. expect(result.provider.options.headers).toEqual({ "HTTP-Referer": "https://opencode.ai/", "X-Title": "opencode" })
  22. expect(Object.keys(result.provider.options.headers).sort()).toEqual(["HTTP-Referer", "X-Title"])
  23. expect(result.cancel).toBe(false)
  24. }),
  25. )
  26. it.effect("merges legacy Zenmux headers with existing headers", () =>
  27. Effect.gen(function* () {
  28. const plugin = yield* PluginV2.Service
  29. yield* plugin.add(ZenmuxPlugin)
  30. const result = yield* plugin.trigger(
  31. "provider.update",
  32. {},
  33. {
  34. provider: provider("zenmux", {
  35. options: { headers: { Existing: "value" }, body: {}, aisdk: { provider: {}, request: {} } },
  36. }),
  37. cancel: false,
  38. },
  39. )
  40. expect(result.provider.options.headers).toEqual({
  41. Existing: "value",
  42. "HTTP-Referer": "https://opencode.ai/",
  43. "X-Title": "opencode",
  44. })
  45. }),
  46. )
  47. it.effect("lets configured Zenmux legacy headers override defaults", () =>
  48. Effect.gen(function* () {
  49. const plugin = yield* PluginV2.Service
  50. yield* plugin.add(ZenmuxPlugin)
  51. const result = yield* plugin.trigger(
  52. "provider.update",
  53. {},
  54. {
  55. provider: provider("zenmux", {
  56. options: {
  57. headers: { "HTTP-Referer": "https://example.com/", "X-Title": "custom-title" },
  58. body: {},
  59. aisdk: { provider: {}, request: {} },
  60. },
  61. }),
  62. cancel: false,
  63. },
  64. )
  65. expect(result.provider.options.headers).toEqual({
  66. "HTTP-Referer": "https://example.com/",
  67. "X-Title": "custom-title",
  68. })
  69. }),
  70. )
  71. it.effect("guards legacy Zenmux headers to the exact zenmux provider id", () =>
  72. Effect.gen(function* () {
  73. const plugin = yield* PluginV2.Service
  74. yield* plugin.add(ZenmuxPlugin)
  75. const ignored = yield* plugin.trigger(
  76. "provider.update",
  77. {},
  78. {
  79. provider: provider("openrouter", {
  80. options: {
  81. headers: { "HTTP-Referer": "https://example.com/", "X-Title": "custom-title" },
  82. body: {},
  83. aisdk: { provider: {}, request: {} },
  84. },
  85. }),
  86. cancel: false,
  87. },
  88. )
  89. expect(ignored.provider.options.headers).toEqual({
  90. "HTTP-Referer": "https://example.com/",
  91. "X-Title": "custom-title",
  92. })
  93. }),
  94. )
  95. })