Spaces:
Paused
Paused
| import fs from "node:fs"; | |
| import os from "node:os"; | |
| import path from "node:path"; | |
| import { describe, expect, it } from "vitest"; | |
| import { getChannelPluginCatalogEntry, listChannelPluginCatalogEntries } from "./catalog.js"; | |
| describe("channel plugin catalog", () => { | |
| it("includes Microsoft Teams", () => { | |
| const entry = getChannelPluginCatalogEntry("msteams"); | |
| expect(entry?.install.npmSpec).toBe("@openclaw/msteams"); | |
| expect(entry?.meta.aliases).toContain("teams"); | |
| }); | |
| it("lists plugin catalog entries", () => { | |
| const ids = listChannelPluginCatalogEntries().map((entry) => entry.id); | |
| expect(ids).toContain("msteams"); | |
| }); | |
| it("includes external catalog entries", () => { | |
| const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-catalog-")); | |
| const catalogPath = path.join(dir, "catalog.json"); | |
| fs.writeFileSync( | |
| catalogPath, | |
| JSON.stringify({ | |
| entries: [ | |
| { | |
| name: "@openclaw/demo-channel", | |
| openclaw: { | |
| channel: { | |
| id: "demo-channel", | |
| label: "Demo Channel", | |
| selectionLabel: "Demo Channel", | |
| docsPath: "/channels/demo-channel", | |
| blurb: "Demo entry", | |
| order: 999, | |
| }, | |
| install: { | |
| npmSpec: "@openclaw/demo-channel", | |
| }, | |
| }, | |
| }, | |
| ], | |
| }), | |
| ); | |
| const ids = listChannelPluginCatalogEntries({ catalogPaths: [catalogPath] }).map( | |
| (entry) => entry.id, | |
| ); | |
| expect(ids).toContain("demo-channel"); | |
| }); | |
| }); | |