// @effect-diagnostics nodeBuiltinImport:off - tests use POSIX path joining to match the Linux startup boundary. import * as NodePath from "node:path"; import { assert, describe, it } from "@effect/vitest"; import { resolveEarlyLinuxElectronOptions, resolveEarlyLinuxPasswordStorePreference, } from "./DesktopEarlyElectronStartup.ts"; describe("DesktopEarlyElectronStartup", () => { const joinPath = NodePath.posix.join; it("reads the persisted linux password-store preference before Electron is ready", () => { const preference = resolveEarlyLinuxPasswordStorePreference({ env: { T3CODE_HOME: "/home/user/.t3-test" }, homeDirectory: "/home/user", joinPath, readFileString: (path) => { assert.equal(path, "/home/user/.t3-test/userdata/desktop-settings.json"); return JSON.stringify({ linuxPasswordStore: "kwallet6" }); }, }); assert.equal(preference, "kwallet6"); }); it("accepts JSONC in the early desktop settings file", () => { const preference = resolveEarlyLinuxPasswordStorePreference({ env: { T3CODE_HOME: "/home/user/.t3-test" }, homeDirectory: "/home/user", joinPath, readFileString: () => `{ // manually edited setting "linuxPasswordStore": "gnome-libsecret", }`, }); assert.equal(preference, "gnome-libsecret"); }); it("falls back to auto when the early settings document is missing or invalid", () => { const preference = resolveEarlyLinuxPasswordStorePreference({ env: {}, homeDirectory: "/home/user", joinPath, readFileString: () => { throw new Error("missing"); }, }); assert.equal(preference, "auto"); }); it("preserves absolute root paths when resolving early settings", () => { const preference = resolveEarlyLinuxPasswordStorePreference({ env: { T3CODE_HOME: "/" }, homeDirectory: "/home/user", joinPath, readFileString: (path) => { assert.equal(path, "/userdata/desktop-settings.json"); return JSON.stringify({ linuxPasswordStore: "kwallet6" }); }, }); assert.equal(preference, "kwallet6"); }); it("resolves the early linux Electron switches", () => { const options = resolveEarlyLinuxElectronOptions({ env: { T3CODE_HOME: "/home/user/.t3-test", XDG_CURRENT_DESKTOP: "niri", VITE_DEV_SERVER_URL: "http://127.0.0.1:5173", }, homeDirectory: "/home/user", joinPath, readFileString: (path) => { assert.equal(path, "/home/user/.t3-test/userdata/desktop-settings.json"); return JSON.stringify({ linuxPasswordStore: "auto" }); }, }); assert.deepEqual(options, { linuxWmClass: "t3code-dev", passwordStore: "gnome-libsecret", }); }); it("keeps implicit development state under ~/.t3/dev when T3CODE_HOME is unset", () => { const preference = resolveEarlyLinuxPasswordStorePreference({ env: { VITE_DEV_SERVER_URL: "http://127.0.0.1:5173", }, homeDirectory: "/home/user", joinPath, readFileString: (path) => { assert.equal(path, "/home/user/.t3/dev/desktop-settings.json"); return JSON.stringify({ linuxPasswordStore: "kwallet" }); }, }); assert.equal(preference, "kwallet"); }); it("treats whitespace-only T3CODE_HOME as unconfigured in development", () => { const preference = resolveEarlyLinuxPasswordStorePreference({ env: { T3CODE_HOME: " ", VITE_DEV_SERVER_URL: "http://127.0.0.1:5173", }, homeDirectory: "/home/user", joinPath, readFileString: (path) => { assert.equal(path, "/home/user/.t3/dev/desktop-settings.json"); return JSON.stringify({ linuxPasswordStore: "gnome-libsecret" }); }, }); assert.equal(preference, "gnome-libsecret"); }); });