mirror of
https://github.com/Quad4-Software/MeshChatX.git
synced 2026-08-18 09:49:09 -04:00
75 lines
2.8 KiB
JavaScript
75 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();
|
||
|
|
});
|
||
|
|
});
|