83 lines
2.5 KiB
JavaScript
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 });
|
|
}
|
|
});
|