MeshChatX/tests/electron/closeBehavior.test.js

74 lines
2.8 KiB
JavaScript

import { createRequire } from "module";
import path from "path";
import fs from "fs";
import os from "os";
import { afterEach, describe, expect, it } from "vitest";
const require = createRequire(import.meta.url);
const {
defaultCloseSettings,
normalizeCloseSettings,
resolveCloseAction,
loadCloseSettings,
saveCloseSettings,
rememberedCloseSettings,
createCloseRequestGuard,
} = require("../../electron/closeBehavior.js");
describe("electron/closeBehavior", () => {
const tempDirs = [];
afterEach(() => {
for (const dir of tempDirs.splice(0)) {
fs.rmSync(dir, { recursive: true, force: true });
}
});
it("defaults to ask with tray enabled", () => {
expect(defaultCloseSettings()).toEqual({
closeBehavior: "ask",
trayEnabled: true,
});
});
it("normalizes invalid values", () => {
expect(
normalizeCloseSettings({
closeBehavior: "nope",
trayEnabled: "yes",
})
).toEqual(defaultCloseSettings());
});
it("resolveCloseAction maps background to minimize when tray is off", () => {
expect(resolveCloseAction({ closeBehavior: "ask", trayEnabled: true })).toBe("ask");
expect(resolveCloseAction({ closeBehavior: "quit", trayEnabled: true })).toBe("quit");
expect(resolveCloseAction({ closeBehavior: "background", trayEnabled: true })).toBe("background");
expect(resolveCloseAction({ closeBehavior: "background", trayEnabled: false })).toBe("minimize");
});
it("persists and reloads settings from storage dir", () => {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "meshchatx-close-"));
tempDirs.push(dir);
const saved = saveCloseSettings(dir, { closeBehavior: "quit", trayEnabled: false });
expect(saved).toEqual({ closeBehavior: "quit", trayEnabled: false });
expect(loadCloseSettings(dir)).toEqual({ closeBehavior: "quit", trayEnabled: false });
expect(fs.existsSync(path.join(dir, "desktop-close-settings.json"))).toBe(true);
});
it("rememberedCloseSettings maps minimize/background to background", () => {
expect(rememberedCloseSettings("quit", true)).toEqual({ closeBehavior: "quit" });
expect(rememberedCloseSettings("background", true)).toEqual({ closeBehavior: "background" });
expect(rememberedCloseSettings("minimize", true)).toEqual({ closeBehavior: "background" });
expect(rememberedCloseSettings("quit", false)).toBeNull();
});
it("createCloseRequestGuard blocks re-entrant close handling", () => {
const guard = createCloseRequestGuard();
expect(guard.tryEnter()).toBe(true);
expect(guard.tryEnter()).toBe(false);
guard.leave();
expect(guard.tryEnter()).toBe(true);
guard.leave();
});
});