| import { afterEach, beforeEach, describe, expect, it } from "vitest"; |
|
|
| import type { ChannelOutboundAdapter, ChannelPlugin } from "./types.js"; |
| import type { PluginRegistry } from "../../plugins/registry.js"; |
| import { setActivePluginRegistry } from "../../plugins/runtime.js"; |
| import { loadChannelPlugin } from "./load.js"; |
| import { loadChannelOutboundAdapter } from "./outbound/load.js"; |
|
|
| const createRegistry = (channels: PluginRegistry["channels"]): PluginRegistry => ({ |
| plugins: [], |
| tools: [], |
| channels, |
| providers: [], |
| gatewayHandlers: {}, |
| httpHandlers: [], |
| httpRoutes: [], |
| cliRegistrars: [], |
| services: [], |
| diagnostics: [], |
| }); |
|
|
| const emptyRegistry = createRegistry([]); |
|
|
| const msteamsOutbound: ChannelOutboundAdapter = { |
| deliveryMode: "direct", |
| sendText: async () => ({ channel: "msteams", messageId: "m1" }), |
| sendMedia: async () => ({ channel: "msteams", messageId: "m2" }), |
| }; |
|
|
| const msteamsPlugin: ChannelPlugin = { |
| id: "msteams", |
| meta: { |
| id: "msteams", |
| label: "Microsoft Teams", |
| selectionLabel: "Microsoft Teams (Bot Framework)", |
| docsPath: "/channels/msteams", |
| blurb: "Bot Framework; enterprise support.", |
| aliases: ["teams"], |
| }, |
| capabilities: { chatTypes: ["direct"] }, |
| config: { |
| listAccountIds: () => [], |
| resolveAccount: () => ({}), |
| }, |
| outbound: msteamsOutbound, |
| }; |
|
|
| const registryWithMSTeams = createRegistry([ |
| { pluginId: "msteams", plugin: msteamsPlugin, source: "test" }, |
| ]); |
|
|
| describe("channel plugin loader", () => { |
| beforeEach(() => { |
| setActivePluginRegistry(emptyRegistry); |
| }); |
|
|
| afterEach(() => { |
| setActivePluginRegistry(emptyRegistry); |
| }); |
|
|
| it("loads channel plugins from the active registry", async () => { |
| setActivePluginRegistry(registryWithMSTeams); |
| const plugin = await loadChannelPlugin("msteams"); |
| expect(plugin).toBe(msteamsPlugin); |
| }); |
|
|
| it("loads outbound adapters from registered plugins", async () => { |
| setActivePluginRegistry(registryWithMSTeams); |
| const outbound = await loadChannelOutboundAdapter("msteams"); |
| expect(outbound).toBe(msteamsOutbound); |
| }); |
| }); |
|
|