agent-ecosystem/test/preload/electronApiMemberWorkSync.test.ts

88 lines
2.4 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import type { ElectronAPI } from '@shared/types/api';
const mocks = vi.hoisted(() => {
const memberWorkSyncBridge = {
getStatus: vi.fn(),
getMetrics: vi.fn(),
report: vi.fn(),
};
return {
contextBridge: {
exposeInMainWorld: vi.fn(),
},
ipcRenderer: {
invoke: vi.fn(),
on: vi.fn(),
send: vi.fn(),
},
memberWorkSyncBridge,
createMemberWorkSyncBridge: vi.fn(() => memberWorkSyncBridge),
webUtils: {
getPathForFile: vi.fn(),
},
};
});
vi.mock('electron', () => ({
contextBridge: mocks.contextBridge,
ipcRenderer: mocks.ipcRenderer,
webUtils: mocks.webUtils,
}));
vi.mock('@features/member-work-sync/preload', () => ({
createMemberWorkSyncBridge: mocks.createMemberWorkSyncBridge,
}));
describe('preload electronAPI memberWorkSync wiring', () => {
beforeEach(() => {
vi.resetModules();
vi.useFakeTimers();
mocks.contextBridge.exposeInMainWorld.mockClear();
mocks.ipcRenderer.invoke.mockClear();
mocks.createMemberWorkSyncBridge.mockClear();
});
afterEach(() => {
vi.clearAllTimers();
vi.useRealTimers();
vi.restoreAllMocks();
});
it('exposes the member work sync bridge on the shared Electron API', async () => {
await import('../../src/preload/index');
expect(mocks.createMemberWorkSyncBridge).toHaveBeenCalledWith(mocks.ipcRenderer);
expect(mocks.contextBridge.exposeInMainWorld).toHaveBeenCalledTimes(1);
const [apiName, electronAPI] = mocks.contextBridge.exposeInMainWorld.mock.calls[0] as [
string,
ElectronAPI,
];
expect(apiName).toBe('electronAPI');
expect(electronAPI.memberWorkSync).toBe(mocks.memberWorkSyncBridge);
});
it('wires the Windows elevation status API to the app IPC channel', async () => {
await import('../../src/preload/index');
const [, electronAPI] = mocks.contextBridge.exposeInMainWorld.mock.calls[0] as [
string,
ElectronAPI,
];
const expectedStatus = {
platform: 'win32',
isWindows: true,
isAdministrator: false,
checkFailed: false,
error: null,
};
mocks.ipcRenderer.invoke.mockResolvedValueOnce(expectedStatus);
await expect(electronAPI.getWindowsElevationStatus()).resolves.toBe(expectedStatus);
expect(mocks.ipcRenderer.invoke).toHaveBeenCalledWith('app:getWindowsElevationStatus');
});
});