IKHSAN
ENID Baca dalam Bahasa Indonesia

homeio

Public

Forked from doctor-io/homeio

Branch
main
Latest commit
958d74616 October 2026

data-root.test.ts

Open raw
import path from "node:path";
import { describe, expect, it, vi } from "vitest";

const { serverEnvMock } = vi.hoisted(() => ({
  serverEnvMock: {
    STORE_STACKS_ROOT: "/var/lib/home-server/stacks",
    STORE_APP_DATA_ROOT: "/DATA/AppData",
  },
}));

vi.mock("@/lib/server/env", () => ({
  serverEnv: serverEnvMock,
}));

describe("data-root storage resolution", () => {
  it("preserves the configured stacks root when the resolved data root matches the primary root", async () => {
    vi.resetModules();
    vi.doMock("node:fs/promises", () => ({
      mkdir: vi.fn().mockResolvedValue(undefined),
    }));

    const dataRootModule = await import("@/lib/server/storage/data-root");

    await dataRootModule.ensureDataRootDirectories();

    expect(dataRootModule.resolveStoreStacksRoot()).toBe(
      "/var/lib/home-server/stacks",
    );
  });

  it("falls back to a CWD-relative DATA root when the primary root cannot be created", async () => {
    vi.resetModules();
    vi.doMock("node:fs/promises", () => ({
      mkdir: vi
        .fn()
        .mockRejectedValueOnce(new Error("permission denied"))
        .mockResolvedValue(undefined),
    }));

    const dataRootModule = await import("@/lib/server/storage/data-root");

    await dataRootModule.ensureDataRootDirectories();

    // Fallback resolves to <cwd>/DATA/Apps (since configured stacks root doesn't match fallback)
    expect(dataRootModule.resolveStoreStacksRoot()).toBe(
      path.join(process.cwd(), "DATA", "Apps"),
    );
  });
});
bytes
1,514
lines
50
Type
ts
Latest commit
16 October 2026