Lumi/scripts/verify-plugin-update-preserves-data.js
2026-06-11 06:35:43 +02:00

33 lines
1.6 KiB
JavaScript

const assert = require("assert");
const fs = require("fs");
const os = require("os");
const path = require("path");
const { replacePluginDirectory } = require("../src/services/update-manager");
const root = fs.mkdtempSync(path.join(os.tmpdir(), "lumi-plugin-update-test-"));
try {
const source = path.join(root, "source");
const target = path.join(root, "target");
fs.mkdirSync(path.join(source, "data", "config"), { recursive: true });
fs.mkdirSync(path.join(target, "data", "models"), { recursive: true });
fs.writeFileSync(path.join(source, "plugin.json"), '{"id":"test"}');
fs.writeFileSync(path.join(source, "index.js"), "module.exports = 'new';");
fs.writeFileSync(path.join(source, "data", "config", "default.json"), '{"default":true}');
fs.writeFileSync(path.join(target, "index.js"), "module.exports = 'old';");
fs.writeFileSync(path.join(target, "stale.js"), "stale");
const model = path.join(target, "data", "models", "large.gguf");
const descriptor = fs.openSync(model, "w");
fs.ftruncateSync(descriptor, 3 * 1024 * 1024 * 1024);
fs.closeSync(descriptor);
replacePluginDirectory(source, target, { preserveData: true });
assert.equal(fs.readFileSync(path.join(target, "index.js"), "utf8"), "module.exports = 'new';");
assert.equal(fs.existsSync(path.join(target, "stale.js")), false);
assert.equal(fs.statSync(model).size, 3 * 1024 * 1024 * 1024);
assert.equal(fs.existsSync(path.join(target, "data", "config", "default.json")), false);
console.log("Plugin update preservation verification passed.");
} finally {
fs.rmSync(root, { recursive: true, force: true });
}