Files
kandev/apps/web/lib/desktop/folder-picker.test.ts
T
2026-09-06 11:32:14 +01:00

61 lines
2.0 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import {
createFolderPickerAdapter,
createNativeFolderPickerAdapter,
isTauriWebview,
NativeFolderPickerUnavailableError,
} from "./folder-picker";
function transport(invoke: (command: string) => Promise<unknown>) {
return { isAvailable: () => true, invoke };
}
describe("native folder picker adapter", () => {
it("returns the selected directory from the narrow command", async () => {
const invoke = vi.fn(async () => ({ status: "selected", path: "/Users/example/Code" }));
const adapter = createNativeFolderPickerAdapter(transport(invoke), () => true);
await expect(adapter.pickDirectory()).resolves.toEqual({
status: "selected",
path: "/Users/example/Code",
});
expect(invoke).toHaveBeenCalledWith("pick_directory");
});
it("preserves cancellation as an outcome", async () => {
const adapter = createNativeFolderPickerAdapter(
transport(async () => ({ status: "cancelled" })),
() => true,
);
await expect(adapter.pickDirectory()).resolves.toEqual({ status: "cancelled" });
});
it("does not use the bridge when the boot capability is absent", async () => {
const invoke = vi.fn(async () => ({ status: "selected", path: "/tmp" }));
const adapter = createNativeFolderPickerAdapter(transport(invoke), () => false);
await expect(adapter.pickDirectory()).rejects.toBeInstanceOf(
NativeFolderPickerUnavailableError,
);
expect(invoke).not.toHaveBeenCalled();
});
it("distinguishes a browser from a Tauri WebView", () => {
expect(isTauriWebview({} as Window)).toBe(false);
expect(isTauriWebview({ __TAURI_INTERNALS__: { invoke: vi.fn() } } as unknown as Window)).toBe(
true,
);
});
it("does not select the native adapter for an ordinary browser", () => {
const adapter = createFolderPickerAdapter(
{} as Window,
transport(async () => null),
);
expect(adapter.isAvailable()).toBe(false);
});
});