Files
open-design/apps/packaged/tests/launch.test.ts

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 });
}
});
});