import { rmSync, writeFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; import { pluginConfigKey, readCodexMarketplaces, setPluginEnabledInConfig } from "./plugin-config"; describe("plugin config", () => { it("builds Codex plugin keys", () => { expect(pluginConfigKey("browser-use", "openai-bundled")).toBe("browser-use@openai-bundled"); expect(pluginConfigKey("local-plugin")).toBe("local-plugin"); }); it("updates an existing plugin enabled flag", () => { const raw = '[plugins."browser-use@openai-bundled"]\nenabled = true\n\n[profiles.default]\n'; expect(setPluginEnabledInConfig(raw, "browser-use@openai-bundled", false)).toBe( '[plugins."browser-use@openai-bundled"]\nenabled = false\n[profiles.default]\n', ); }); it("adds enabled to an existing plugin section without one", () => { const raw = '[plugins."computer-use@openai-bundled"]\nfoo = "bar"\n'; expect(setPluginEnabledInConfig(raw, "computer-use@openai-bundled", true)).toBe( '[plugins."computer-use@openai-bundled"]\nfoo = "bar"\nenabled = true\n', ); }); it("appends a missing plugin section", () => { expect(setPluginEnabledInConfig("model = \"x\"\n", "github@openai-curated", true)).toBe( 'model = "x"\n\n[plugins."github@openai-curated"]\nenabled = true\n', ); }); it("reads Codex marketplace metadata", () => { const raw = '[marketplaces.openai-bundled]\nlast_updated = "2026-04-18T22:03:02Z"\nsource_type = "local"\nsource = "/Applications/Codex.app/Contents/Resources/plugins/openai-bundled"\n\n[plugins."browser-use@openai-bundled"]\nenabled = true\n'; const tmp = `/tmp/vllm-plugin-config-${process.pid}.toml`; writeFileSync(tmp, raw); try { expect(readCodexMarketplaces(tmp)).toEqual([ { name: "openai-bundled", lastUpdated: "2026-04-18T22:03:02Z", sourceType: "local", source: "/Applications/Codex.app/Contents/Resources/plugins/openai-bundled", }, ]); } finally { rmSync(tmp, { force: true }); } }); });