IKHSAN
EN Read in EnglishID

homeio

Publik

Fork dari doctor-io/homeio

Branch
main
Commit terakhir
958d74616 Oktober 2026

path-resolver.test.ts

Buka raw
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);
  });
});
byte
2.698
baris
82
Jenis
ts
Commit terakhir
16 Oktober 2026