33 lines
1.6 KiB
JavaScript
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 });
|
|
}
|