mirror of
https://github.com/YuzuZensai/Termix.git
synced 2026-09-13 10:49:03 +00:00
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
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");
|
||
|
|
});
|
||
|
|
});
|