mirror of
https://github.com/Corfirean/coa-server-manager.git
synced 2026-11-11 11:51:03 +00:00
63 lines
2.7 KiB
JavaScript
63 lines
2.7 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { registerHooks } from "node:module";
|
|
|
|
let handler;
|
|
let enabled = true;
|
|
let closeToTray = false;
|
|
let nextUpdate = null;
|
|
const calls = [];
|
|
globalThis.__closeTest = {
|
|
invoke: async (cmd, args) => { calls.push([cmd, args]); return cmd === "close_to_tray" ? closeToTray : undefined; },
|
|
window: { onCloseRequested: async cb => { handler = cb; return () => { handler = null; }; } },
|
|
check: async () => nextUpdate,
|
|
};
|
|
globalThis.localStorage = { getItem: () => enabled ? "on" : "off", setItem() {} };
|
|
registerHooks({ resolve(id, context, next) {
|
|
const stubs = {
|
|
react: "export const useSyncExternalStore=(subscribe,read)=>read();",
|
|
"@tauri-apps/api/core": "export const invoke=(...a)=>globalThis.__closeTest.invoke(...a);",
|
|
"@tauri-apps/api/window": "export const getCurrentWindow=()=>globalThis.__closeTest.window;",
|
|
"@tauri-apps/plugin-updater": "export const check=()=>globalThis.__closeTest.check();",
|
|
"@tauri-apps/plugin-process": "export const relaunch=async()=>{};",
|
|
};
|
|
if (id in stubs) return { shortCircuit:true, url:"data:text/javascript,"+encodeURIComponent(stubs[id]) };
|
|
return next(id, context);
|
|
}});
|
|
const { installOnClose, lookForUpdate } = await import("../src/lib/selfUpdate.ts");
|
|
async function close() {
|
|
const stop = installOnClose();
|
|
await Promise.resolve();
|
|
let prevented = false;
|
|
await handler({ preventDefault() { prevented = true; } });
|
|
assert.equal(prevented, true, "Tauri must never auto-destroy the hidden main window");
|
|
stop();
|
|
}
|
|
|
|
test("ordinary close delegates to native preferences without destroying the window", async () => {
|
|
calls.length = 0;
|
|
await close();
|
|
assert.deepEqual(calls, [["close_manager", undefined]]);
|
|
});
|
|
|
|
test("a cached update with automatic updates off still uses native close preferences", async () => {
|
|
nextUpdate = { version:"99", download:async()=>{}, install:async()=>{throw new Error("should not install")} };
|
|
await lookForUpdate({download:true});
|
|
enabled=false;calls.length=0;
|
|
await close();
|
|
assert.deepEqual(calls, [["close_manager", undefined]]);
|
|
});
|
|
|
|
test("failed automatic installation releases exit mode and preserves ordinary close handling", async () => {
|
|
enabled=true;calls.length=0;
|
|
await close();
|
|
assert.deepEqual(calls, [["close_to_tray",undefined],["manager_installing",{enabled:true}],["manager_installing",{enabled:false}],["close_manager",undefined]]);
|
|
});
|
|
|
|
test("minimizing to tray never starts a cached automatic installation", async () => {
|
|
await lookForUpdate({download:true});
|
|
closeToTray=true;calls.length=0;
|
|
await close();
|
|
assert.deepEqual(calls, [["close_to_tray",undefined],["close_manager",undefined]]);
|
|
});
|