fix(FN-1339): move executor status bar above mobile nav bar
This commit is contained in:
@@ -92,6 +92,7 @@ describe("ipc handlers", () => {
|
||||
"window:isMaximized",
|
||||
"app:getSystemInfo",
|
||||
"app:checkForUpdates",
|
||||
"app:getServerPort",
|
||||
"tray:updateStatus",
|
||||
"native:showExportDialog",
|
||||
"native:showImportDialog",
|
||||
@@ -217,4 +218,25 @@ describe("ipc handlers", () => {
|
||||
|
||||
expect(mocks.updateTrayStatus).toHaveBeenCalledWith(tray, "paused");
|
||||
});
|
||||
|
||||
it("app:getServerPort returns port from environment", async () => {
|
||||
process.env.FUSION_SERVER_PORT = "4545";
|
||||
await registerHandlers();
|
||||
|
||||
const handler = mocks.ipcHandlers.get("app:getServerPort");
|
||||
const result = await handler?.({});
|
||||
|
||||
expect(result).toBe(4545);
|
||||
delete process.env.FUSION_SERVER_PORT;
|
||||
});
|
||||
|
||||
it("app:getServerPort returns undefined when env var not set", async () => {
|
||||
delete process.env.FUSION_SERVER_PORT;
|
||||
await registerHandlers();
|
||||
|
||||
const handler = mocks.ipcHandlers.get("app:getServerPort");
|
||||
const result = await handler?.({});
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -14,6 +14,7 @@ const mocks = vi.hoisted(() => {
|
||||
|
||||
return {
|
||||
loadURL: vi.fn(() => Promise.resolve()),
|
||||
loadFile: vi.fn(() => Promise.resolve()),
|
||||
on: vi.fn((event: string, handler: (...args: unknown[]) => void) => {
|
||||
listeners.set(event, handler);
|
||||
}),
|
||||
@@ -152,6 +153,16 @@ vi.mock("../native.js", () => ({
|
||||
DEFAULT_WINDOW_STATE: mocks.DEFAULT_WINDOW_STATE,
|
||||
}));
|
||||
|
||||
// Mock renderer module
|
||||
vi.mock("../renderer.js", () => ({
|
||||
isDevelopmentMode: vi.fn(() => false),
|
||||
getRendererUrl: vi.fn(() => "file:///path/to/dist/client/index.html"),
|
||||
getRendererFilePath: vi.fn(() => "/path/to/dist/client/index.html"),
|
||||
isUrlRenderer: vi.fn(() => false),
|
||||
IS_DEVELOPMENT: false,
|
||||
DASHBOARD_URL: "file:///path/to/dist/client/index.html",
|
||||
}));
|
||||
|
||||
async function importMainModule() {
|
||||
return import("../main.ts");
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ const mocks = vi.hoisted(() => {
|
||||
|
||||
const browserWindow = {
|
||||
loadURL: vi.fn(),
|
||||
loadFile: vi.fn(),
|
||||
on: vi.fn(),
|
||||
hide: vi.fn(),
|
||||
show: vi.fn(),
|
||||
@@ -75,6 +76,16 @@ vi.mock("../native.js", () => ({
|
||||
setupAutoUpdater: mocks.setupAutoUpdater,
|
||||
}));
|
||||
|
||||
// Mock renderer module
|
||||
vi.mock("../renderer.js", () => ({
|
||||
isDevelopmentMode: vi.fn(() => false),
|
||||
getRendererUrl: vi.fn(() => "file:///path/to/dist/client/index.html"),
|
||||
getRendererFilePath: vi.fn(() => "/path/to/dist/client/index.html"),
|
||||
isUrlRenderer: vi.fn(() => false),
|
||||
IS_DEVELOPMENT: false,
|
||||
DASHBOARD_URL: "file:///path/to/dist/client/index.html",
|
||||
}));
|
||||
|
||||
describe("main module integration", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
|
||||
@@ -3,6 +3,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
const mocks = vi.hoisted(() => {
|
||||
const browserWindowInstance = {
|
||||
loadURL: vi.fn(),
|
||||
loadFile: vi.fn(),
|
||||
on: vi.fn(),
|
||||
isVisible: vi.fn(() => true),
|
||||
show: vi.fn(),
|
||||
@@ -74,12 +75,23 @@ vi.mock("electron", () => ({
|
||||
shell: mocks.shell,
|
||||
}));
|
||||
|
||||
// Mock renderer module
|
||||
vi.mock("../renderer.js", () => ({
|
||||
isDevelopmentMode: vi.fn(() => false),
|
||||
getRendererUrl: vi.fn(() => "file:///path/to/dist/client/index.html"),
|
||||
getRendererFilePath: vi.fn(() => "/path/to/dist/client/index.html"),
|
||||
isUrlRenderer: vi.fn(() => false),
|
||||
IS_DEVELOPMENT: false,
|
||||
DASHBOARD_URL: "file:///path/to/dist/client/index.html",
|
||||
}));
|
||||
|
||||
async function importMainModule() {
|
||||
return import("../main.ts");
|
||||
}
|
||||
|
||||
describe("main process", () => {
|
||||
const originalDashboardUrl = process.env.FUSION_DASHBOARD_URL;
|
||||
const originalNodeEnv = process.env.NODE_ENV;
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
@@ -89,6 +101,16 @@ describe("main process", () => {
|
||||
} else {
|
||||
process.env.FUSION_DASHBOARD_URL = originalDashboardUrl;
|
||||
}
|
||||
if (originalNodeEnv === undefined) {
|
||||
delete process.env.NODE_ENV;
|
||||
} else {
|
||||
process.env.NODE_ENV = originalNodeEnv;
|
||||
}
|
||||
// Ensure we're in production mode for these tests
|
||||
vi.mocked(require("../renderer.js")).isDevelopmentMode.mockReturnValue(false);
|
||||
vi.mocked(require("../renderer.js")).getRendererUrl.mockReturnValue("file:///path/to/dist/client/index.html");
|
||||
vi.mocked(require("../renderer.js")).getRendererFilePath.mockReturnValue("/path/to/dist/client/index.html");
|
||||
vi.mocked(require("../renderer.js")).isUrlRenderer.mockReturnValue(false);
|
||||
});
|
||||
|
||||
it("DASHBOARD_URL defaults to local file URL in production mode", async () => {
|
||||
@@ -100,8 +122,13 @@ describe("main process", () => {
|
||||
expect(DASHBOARD_URL).toContain("/client/index.html");
|
||||
});
|
||||
|
||||
it("DASHBOARD_URL uses env override", async () => {
|
||||
it("DASHBOARD_URL uses env override in development mode", async () => {
|
||||
process.env.FUSION_DASHBOARD_URL = "http://localhost:5050";
|
||||
// Mock development mode to use the env var
|
||||
vi.mocked(require("../renderer.js")).isDevelopmentMode.mockReturnValue(true);
|
||||
vi.mocked(require("../renderer.js")).getRendererUrl.mockReturnValue("http://localhost:5050");
|
||||
vi.mocked(require("../renderer.js")).getRendererFilePath.mockReturnValue("");
|
||||
vi.mocked(require("../renderer.js")).isUrlRenderer.mockReturnValue(true);
|
||||
|
||||
const { DASHBOARD_URL } = await importMainModule();
|
||||
|
||||
@@ -129,12 +156,30 @@ describe("main process", () => {
|
||||
expect(options.webPreferences.preload).toContain("preload.js");
|
||||
});
|
||||
|
||||
it("createMainWindow loads the dashboard URL", async () => {
|
||||
const { createMainWindow, DASHBOARD_URL } = await importMainModule();
|
||||
it("createMainWindow loads the renderer URL in URL mode", async () => {
|
||||
vi.mocked(require("../renderer.js")).isUrlRenderer.mockReturnValue(true);
|
||||
vi.mocked(require("../renderer.js")).getRendererUrl.mockReturnValue("http://localhost:3000/index.html");
|
||||
vi.mocked(require("../renderer.js")).getRendererFilePath.mockReturnValue("");
|
||||
|
||||
const { createMainWindow } = await importMainModule();
|
||||
|
||||
createMainWindow();
|
||||
|
||||
expect(mocks.browserWindowInstance.loadURL).toHaveBeenCalledWith(DASHBOARD_URL);
|
||||
expect(mocks.browserWindowInstance.loadURL).toHaveBeenCalledWith("http://localhost:3000/index.html");
|
||||
expect(mocks.browserWindowInstance.loadFile).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("createMainWindow loads the renderer file in file mode (production)", async () => {
|
||||
vi.mocked(require("../renderer.js")).isUrlRenderer.mockReturnValue(false);
|
||||
vi.mocked(require("../renderer.js")).getRendererUrl.mockReturnValue("file:///path/to/dist/client/index.html");
|
||||
vi.mocked(require("../renderer.js")).getRendererFilePath.mockReturnValue("/path/to/dist/client/index.html");
|
||||
|
||||
const { createMainWindow } = await importMainModule();
|
||||
|
||||
createMainWindow();
|
||||
|
||||
expect(mocks.browserWindowInstance.loadFile).toHaveBeenCalledWith("/path/to/dist/client/index.html");
|
||||
expect(mocks.browserWindowInstance.loadURL).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("exports initializeApp for lifecycle orchestration", async () => {
|
||||
|
||||
@@ -33,6 +33,7 @@ function getFusionApi() {
|
||||
isMaximized: () => Promise<boolean>;
|
||||
getSystemInfo: () => Promise<unknown>;
|
||||
checkForUpdates: () => Promise<unknown>;
|
||||
getServerPort: () => Promise<number | undefined>;
|
||||
updateTrayStatus: (status: string) => Promise<void>;
|
||||
showExportDialog: () => Promise<string | null>;
|
||||
showImportDialog: () => Promise<string | null>;
|
||||
@@ -113,6 +114,15 @@ describe("preload", () => {
|
||||
expect(mocks.ipcRenderer.invoke).toHaveBeenCalledWith("app:checkForUpdates");
|
||||
});
|
||||
|
||||
it("getServerPort invokes app:getServerPort", async () => {
|
||||
await importPreloadModule();
|
||||
|
||||
const api = getFusionApi();
|
||||
await api?.getServerPort();
|
||||
|
||||
expect(mocks.ipcRenderer.invoke).toHaveBeenCalledWith("app:getServerPort");
|
||||
});
|
||||
|
||||
it("updateTrayStatus invokes tray:updateStatus with status argument", async () => {
|
||||
await importPreloadModule();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user