import { describe, expect, it, vi, beforeEach } from "vitest"; import { resolveBrowserExecutableForPlatform } from "./chrome.executables.js"; vi.mock("node:child_process", () => ({ execFileSync: vi.fn(), })); vi.mock("node:fs", () => { const existsSync = vi.fn(); const readFileSync = vi.fn(); return { existsSync, readFileSync, default: { existsSync, readFileSync }, }; }); import { execFileSync } from "node:child_process"; import * as fs from "node:fs"; describe("browser default executable detection", () => { const launchServicesPlist = "com.apple.launchservices.secure.plist"; const chromeExecutablePath = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"; function mockMacDefaultBrowser(bundleId: string, appPath = ""): void { vi.mocked(execFileSync).mockImplementation((cmd, args) => { const argsStr = Array.isArray(args) ? args.join(" ") : ""; if (cmd === "/usr/bin/plutil" && argsStr.includes("LSHandlers")) { return JSON.stringify([{ LSHandlerURLScheme: "http", LSHandlerRoleAll: bundleId }]); } if (cmd === "/usr/bin/osascript" && argsStr.includes("path to application id")) { return appPath; } if (cmd === "/usr/bin/defaults") { return "Google Chrome"; } return ""; }); } function mockChromeExecutableExists(): void { vi.mocked(fs.existsSync).mockImplementation((p) => { const value = String(p); if (value.includes(launchServicesPlist)) { return true; } return value.includes(chromeExecutablePath); }); } beforeEach(() => { vi.clearAllMocks(); }); it("prefers default Chromium browser on macOS", () => { mockMacDefaultBrowser("com.google.Chrome", "/Applications/Google Chrome.app"); mockChromeExecutableExists(); const exe = resolveBrowserExecutableForPlatform( {} as Parameters[0], "darwin", ); expect(exe?.path).toContain("Google Chrome.app/Contents/MacOS/Google Chrome"); expect(exe?.kind).toBe("chrome"); }); it("falls back when default browser is non-Chromium on macOS", () => { mockMacDefaultBrowser("com.apple.Safari"); mockChromeExecutableExists(); const exe = resolveBrowserExecutableForPlatform( {} as Parameters[0], "darwin", ); expect(exe?.path).toContain("Google Chrome.app/Contents/MacOS/Google Chrome"); }); });