// Unit tests for desktop plugin-directory configuration (plain node). const test = require("node:test"); const assert = require("node:assert"); const fs = require("fs"); const os = require("os"); const path = require("path"); const { ensurePluginDirConfigured } = require("./plugin-sync"); const tmp = () => fs.mkdtempSync(path.join(os.tmpdir(), "plugin-sync-")); test("back-fills plugin_dir into an existing profile without it", () => { const dir = tmp(); const cfg = path.join(dir, "config.yaml"); fs.writeFileSync(cfg, "listen: 127.0.0.1:8787\ndefault_model: AUTO\nkeys:\n - key: k\n role: admin\n"); const plugins = path.join(dir, "plugins"); assert.equal(ensurePluginDirConfigured(cfg, plugins, null), "added"); const out = fs.readFileSync(cfg, "utf-8"); assert.match(out, /^plugin_dir: "/m); assert.match(out, /^listen: 127.0.0.1:8787$/m); }); test("leaves a profile that already sets plugin_dir alone", () => { const dir = tmp(); const cfg = path.join(dir, "config.yaml"); const orig = 'plugin_dir: "/custom/plugins"\nlisten: ":1"\n'; fs.writeFileSync(cfg, orig); assert.equal(ensurePluginDirConfigured(cfg, "/whatever", null), "present"); assert.equal(fs.readFileSync(cfg, "utf-8"), orig); }); test("missing config is not created by the back-fill", () => { const dir = tmp(); const cfg = path.join(dir, "config.yaml"); assert.equal(ensurePluginDirConfigured(cfg, path.join(dir, "p"), null), "absent"); assert.equal(fs.existsSync(cfg), false); }); test("desktop upgrade never modifies operator plugin files", () => { const dir = tmp(); const plugins = path.join(dir, "plugins"); fs.mkdirSync(plugins, { recursive: true }); fs.writeFileSync(path.join(plugins, "channels.lua"), "OPERATOR FILE"); fs.writeFileSync(path.join(plugins, "my-own.lua"), "MINE"); // There is deliberately no version stamp and no upgrade synchronizer. assert.equal(fs.readFileSync(path.join(plugins, "channels.lua"), "utf-8"), "OPERATOR FILE"); assert.equal(fs.readFileSync(path.join(plugins, "my-own.lua"), "utf-8"), "MINE"); assert.equal(fs.readdirSync(dir).includes(".plugin-seed-version"), false); });