mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-13 18:32:12 +03:00
Landed with the design call resolved per the owner's pick — **option 1**: the synced store is now endpoint-agnostic (persistDiscoveredModels and managedModelImport no longer drop non-chat models at write time), and chat selectability moved to read time (auto-pool expansion in autoStrategy applies filterChatSelectableModels; the models-route projection already had its chatOnly filter). Your discovery test now passes end-to-end (3/3): /api/show capabilities persist per connection and image/embedding requests route through the advertising host. Reconciliation notes: conflicted areas merged onto the current tip (adobe discovery import, requestedModel preflight signature, resolvedProvider fast-path coexists with the synced-route override — explicit resolution wins); carried base-red drains (#10055 memoization, #11071 test variants) dropped as already-landed; the managed-model-import exclusion test was propagated to the new contract (image/video models persist; the read filter still hides them from chat pickers — pinned by a new assertion). Full battery: 205/206 focused (the one red is a confirmed periodic-timer timing flake on the loaded devbox — 20/20 isolated), autoCombo vitest 30/30, combo suites 46/46, gates + typecheck clean. Thank you @yourspraveen — the capability probe + routing design was right; it just needed the store contract opened up. Fixes #11087.
88 lines
3.3 KiB
TypeScript
88 lines
3.3 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { createRequire } from "node:module";
|
|
|
|
const require = createRequire(import.meta.url);
|
|
const {
|
|
CLOSE_BEHAVIOR_KEEP_LOADED,
|
|
CLOSE_BEHAVIOR_UNLOAD,
|
|
normalizeCloseBehavior,
|
|
resolveRendererUrl,
|
|
} = require("../../electron/lib/windowClosePolicy");
|
|
|
|
describe("Electron window close policy", () => {
|
|
it("accepts only the two deliberate close behaviors", () => {
|
|
assert.equal(normalizeCloseBehavior("keep-loaded"), CLOSE_BEHAVIOR_KEEP_LOADED);
|
|
assert.equal(normalizeCloseBehavior("unload"), CLOSE_BEHAVIOR_UNLOAD);
|
|
assert.equal(normalizeCloseBehavior("destroy"), null);
|
|
assert.equal(normalizeCloseBehavior(undefined), null);
|
|
});
|
|
|
|
it("preserves same-origin dashboard navigation when recreating the renderer", () => {
|
|
assert.equal(
|
|
resolveRendererUrl(
|
|
"http://localhost:20128/dashboard/settings?tab=providers",
|
|
"http://localhost:20128"
|
|
),
|
|
"http://localhost:20128/dashboard/settings?tab=providers"
|
|
);
|
|
});
|
|
|
|
it("falls back to the active server for invalid or cross-origin URLs", () => {
|
|
assert.equal(
|
|
resolveRendererUrl("https://example.com/dashboard", "http://localhost:20128"),
|
|
"http://localhost:20128/"
|
|
);
|
|
assert.equal(
|
|
resolveRendererUrl("not a url", "http://localhost:20128"),
|
|
"http://localhost:20128"
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("Electron main-process close policy wiring", () => {
|
|
const mainSrc = readFileSync(join(import.meta.dirname, "../../electron/main.js"), "utf8");
|
|
|
|
it("defaults to keeping the renderer loaded and exposes both policies in the tray", () => {
|
|
assert.match(mainSrc, /electronPreferences\.closeBehavior/);
|
|
assert.match(mainSrc, /Keep Loaded \(Faster Reopen\)/);
|
|
assert.match(mainSrc, /Unload Renderer \(Lower Memory\)/);
|
|
assert.match(mainSrc, /writeCloseBehavior\(REMOTE_SERVER_PREFS_PATH, closeBehavior\)/);
|
|
});
|
|
|
|
it("destroys only the renderer in unload mode and otherwise hides the window", () => {
|
|
const closeHandler = mainSrc.slice(
|
|
mainSrc.indexOf('window.on("close"'),
|
|
mainSrc.indexOf('window.on("closed"')
|
|
);
|
|
assert.ok(closeHandler.includes("closeBehavior === CLOSE_BEHAVIOR_UNLOAD"));
|
|
assert.ok(closeHandler.includes("window.destroy()"));
|
|
assert.ok(closeHandler.includes("window.hide()"));
|
|
assert.ok(!closeHandler.includes("stopNextServer"));
|
|
});
|
|
|
|
it("recreates the renderer from every explicit reopen path", () => {
|
|
const secondInstanceHandler = mainSrc.slice(
|
|
mainSrc.indexOf('app.on("second-instance"'),
|
|
mainSrc.indexOf("// ── Environment Detection")
|
|
);
|
|
assert.ok(secondInstanceHandler.includes("showMainWindow()"));
|
|
assert.ok(secondInstanceHandler.includes("if (isHeadless) return"));
|
|
assert.match(mainSrc, /label: "Open OmniRoute",\s*click: \(\) => showMainWindow\(\)/);
|
|
assert.match(mainSrc, /tray\.on\("double-click", \(\) => showMainWindow\(\)\)/);
|
|
assert.match(
|
|
mainSrc,
|
|
/app\.on\("activate", \(\) => \{\s*if \(isHeadless\) return;\s*showMainWindow\(\);/
|
|
);
|
|
});
|
|
|
|
it("keeps the non-macOS app alive when unloading its last renderer", () => {
|
|
assert.match(
|
|
mainSrc,
|
|
/process\.platform !== "darwin"[\s\S]*closeBehavior !== CLOSE_BEHAVIOR_UNLOAD[\s\S]*app\.quit\(\)/
|
|
);
|
|
});
|
|
});
|