palico-bot/test/storageManager.test.js

83 lines
2.5 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
test("the library persists portable entries and restores absolute runtime paths", async () => {
const originalDirectory = process.cwd();
const temporaryDirectory = fs.mkdtempSync(
path.join(os.tmpdir(), "palico-storage-")
);
try {
process.chdir(temporaryDirectory);
const storage = await import(
`../src/web/storage/storageManager.js?test=${Date.now()}`
);
storage.ensureStorageLayout();
const uploadedPath = path.join(storage.TEMP_DIR, "upload");
fs.writeFileSync(uploadedPath, "fake audio content");
const track = storage.registerUploadedFile(
{
path: uploadedPath,
originalname: "sample.mp3",
size: 18,
mimetype: "audio/mpeg",
},
{ permanent: true, uploader: "test", title: "Sample" }
);
const persisted = JSON.parse(
fs.readFileSync(
path.join(temporaryDirectory, "storage/runtime/library.json"),
"utf8"
)
);
assert.equal(persisted.length, 1);
assert.equal("path" in persisted[0], false);
const restored = storage.findPermanentTrack(track.libraryTrackId);
assert.equal(path.dirname(restored.path), storage.PERMANENT_DIR);
assert.equal(fs.existsSync(restored.path), true);
} finally {
process.chdir(originalDirectory);
fs.rmSync(temporaryDirectory, { recursive: true, force: true });
}
});
test("legacy library entries migrate without their absolute paths", async () => {
const originalDirectory = process.cwd();
const temporaryDirectory = fs.mkdtempSync(
path.join(os.tmpdir(), "palico-migration-")
);
try {
process.chdir(temporaryDirectory);
fs.mkdirSync("storage", { recursive: true });
fs.writeFileSync(
"storage/library.json",
JSON.stringify([
{
id: "legacy",
storedName: "legacy.mp3",
path: "/old/server/storage/permanent/legacy.mp3",
},
])
);
const storage = await import(
`../src/web/storage/storageManager.js?migration=${Date.now()}`
);
storage.ensureStorageLayout();
const migrated = JSON.parse(
fs.readFileSync("storage/runtime/library.json", "utf8")
);
assert.deepEqual(migrated, [{ id: "legacy", storedName: "legacy.mp3" }]);
} finally {
process.chdir(originalDirectory);
fs.rmSync(temporaryDirectory, { recursive: true, force: true });
}
});