Files

66 lines
2.2 KiB
TypeScript
Raw Permalink Normal View History

+5
2026-08-19 14:12:06 -05:00
import { createRequire } from "node:module";
import { describe, expect, it, vi } from "vitest";
const require = createRequire(import.meta.url);
const { selectLinuxPasswordStore } =
require("../electron/linux-password-store.cjs") as {
selectLinuxPasswordStore: (
commandLine: {
hasSwitch: (name: string) => boolean;
appendSwitch: (name: string, value: string) => void;
},
env: NodeJS.ProcessEnv,
) => string | null;
};
function commandLine(existing: string[] = []) {
const appended: Array<[string, string]> = [];
return {
appended,
hasSwitch: (name: string) => existing.includes(name),
appendSwitch: vi.fn((name: string, value: string) =>
appended.push([name, value]),
),
};
}
describe("Linux password store selection", () => {
it("names libsecret on desktops Chromium has no mapping for", () => {
// Without this the backend resolves to "basic_text", and safeStorage
// reports encryption as unavailable even though a keyring is running.
for (const desktop of ["Hyprland", "sway", "niri", "river", "wayfire"]) {
const cmd = commandLine();
expect(
selectLinuxPasswordStore(cmd, { XDG_CURRENT_DESKTOP: desktop }),
).toBe("gnome-libsecret");
expect(cmd.appended).toEqual([["password-store", "gnome-libsecret"]]);
}
});
it("leaves KWallet desktops to auto-detection", () => {
for (const env of [
{ XDG_CURRENT_DESKTOP: "KDE" },
{ XDG_CURRENT_DESKTOP: "KDE", DESKTOP_SESSION: "plasma" },
{ DESKTOP_SESSION: "/usr/share/xsessions/plasma" },
{ XDG_CURRENT_DESKTOP: "LXQt" },
]) {
const cmd = commandLine();
expect(selectLinuxPasswordStore(cmd, env)).toBeNull();
expect(cmd.appendSwitch).not.toHaveBeenCalled();
}
});
it("never overrides a password store the user asked for", () => {
const cmd = commandLine(["password-store"]);
expect(
selectLinuxPasswordStore(cmd, { XDG_CURRENT_DESKTOP: "Hyprland" }),
).toBeNull();
expect(cmd.appendSwitch).not.toHaveBeenCalled();
});
it("selects libsecret when the desktop is unset, matching a bare session", () => {
const cmd = commandLine();
expect(selectLinuxPasswordStore(cmd, {})).toBe("gnome-libsecret");
});
});