mirror of
https://github.com/nexu-io/open-design.git
synced 2026-10-27 09:51:12 +01:00
49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
|
|
import { describe, expect, it, vi } from "vitest";
|
|
|
|
vi.mock("electron", () => ({
|
|
app: {},
|
|
}));
|
|
|
|
import { PackagedPathAccessError, verifyPackagedDataRootWritable } from "../src/launch.js";
|
|
|
|
describe("verifyPackagedDataRootWritable", () => {
|
|
it("accepts a writable dataRoot", async () => {
|
|
const root = mkdtempSync(join(tmpdir(), "od-packaged-launch-"));
|
|
try {
|
|
const dataRoot = join(root, "namespaces", "release-beta", "data");
|
|
await expect(verifyPackagedDataRootWritable({ dataRoot })).resolves.toBeUndefined();
|
|
} finally {
|
|
rmSync(root, { force: true, recursive: true });
|
|
}
|
|
});
|
|
|
|
it("wraps low-level mkdir/access failures with a user-actionable error", async () => {
|
|
const root = mkdtempSync(join(tmpdir(), "od-packaged-launch-"));
|
|
try {
|
|
const blocker = join(root, "namespaces", "release-beta");
|
|
mkdirSync(blocker, { recursive: true });
|
|
writeFileSync(join(blocker, "data"), "not a directory");
|
|
|
|
let captured: unknown;
|
|
try {
|
|
await verifyPackagedDataRootWritable({ dataRoot: join(blocker, "data") });
|
|
} catch (error) {
|
|
captured = error;
|
|
}
|
|
|
|
expect(captured).toBeInstanceOf(PackagedPathAccessError);
|
|
expect((captured as Error).message).toContain("Open Design could not create or write to:");
|
|
expect((captured as Error).message).toContain(join(blocker, "data"));
|
|
expect((captured as Error).message).toContain("Current user:");
|
|
expect((captured as Error).message).toContain("Try in Terminal:");
|
|
expect((captured as Error).message).toContain("sudo chown -R");
|
|
} finally {
|
|
rmSync(root, { force: true, recursive: true });
|
|
}
|
|
});
|
|
});
|