homeio
PublikFork dari doctor-io/homeio
path-resolver.test.ts
import { lstat, mkdtemp, mkdir, readFile, realpath, rm, writeFile } from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
const originalEnv = process.env;
let tempRoot = "";
describe("path resolver", () => {
beforeEach(async () => {
vi.resetModules();
process.env = { ...originalEnv };
tempRoot = await mkdtemp(path.join(os.tmpdir(), "home-server-files-root-"));
process.env.FILES_ROOT = tempRoot;
});
afterEach(async () => {
process.env = originalEnv;
if (tempRoot) {
await rm(tempRoot, { recursive: true, force: true });
}
});
it("maps virtual reserved directories to hidden on-disk folders", async () => {
const { resolvePathWithinFilesRoot } = await import(
"@/lib/server/modules/files/path-resolver"
);
const resolved = await resolvePathWithinFilesRoot({
inputPath: "Trash",
allowHiddenSegments: true,
});
expect(resolved.relativePath).toBe("Trash");
expect(resolved.exists).toBe(true);
expect(resolved.absolutePath).toBe(await realpath(path.join(tempRoot, ".Trash")));
const info = await lstat(path.join(tempRoot, ".Trash"));
expect(info.isDirectory()).toBe(true);
});
it("migrates legacy visible internal folders to hidden folders", async () => {
await mkdir(path.join(tempRoot, "Trash"), { recursive: true });
await writeFile(path.join(tempRoot, "Trash", "notes.txt"), "hello", "utf8");
const { resolvePathWithinFilesRoot } = await import(
"@/lib/server/modules/files/path-resolver"
);
const resolved = await resolvePathWithinFilesRoot({
inputPath: "Trash/notes.txt",
allowHiddenSegments: true,
});
expect(resolved.absolutePath).toBe(
await realpath(path.join(tempRoot, ".Trash", "notes.txt")),
);
expect(await readFile(resolved.absolutePath, "utf8")).toBe("hello");
await expect(lstat(path.join(tempRoot, "Trash"))).rejects.toMatchObject({
code: "ENOENT",
});
});
it("removes an empty legacy visible internal folder when hidden root already exists", async () => {
await mkdir(path.join(tempRoot, ".Shared"), { recursive: true });
await mkdir(path.join(tempRoot, "Shared"), { recursive: true });
const { ensureFilesRootDirectories } = await import(
"@/lib/server/modules/files/path-resolver"
);
await ensureFilesRootDirectories();
await expect(lstat(path.join(tempRoot, "Shared"))).rejects.toMatchObject({
code: "ENOENT",
});
const hiddenInfo = await lstat(path.join(tempRoot, ".Shared"));
expect(hiddenInfo.isDirectory()).toBe(true);
});
});