123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import type {MaybeMocked} from 'vitest';
- import {beforeEach, expect, test, vi} from 'vitest';
- import {restoreOrCreateWindow} from '../src/mainWindow';
- import {BrowserWindow} from 'electron';
- /**
- * Mock real electron BrowserWindow API
- */
- vi.mock('electron', () => {
- const bw = vi.fn() as MaybeMocked<typeof BrowserWindow>;
- // @ts-expect-error It's work in runtime, but I Haven't idea how to fix this type error
- bw.getAllWindows = vi.fn(() => bw.mock.instances);
- bw.prototype.loadURL = vi.fn();
- bw.prototype.on = vi.fn();
- bw.prototype.destroy = vi.fn();
- bw.prototype.isDestroyed = vi.fn();
- bw.prototype.isMinimized = vi.fn();
- bw.prototype.focus = vi.fn();
- bw.prototype.restore = vi.fn();
- return {BrowserWindow: bw};
- });
- beforeEach(() => {
- vi.clearAllMocks();
- });
- test('Should create new window', async () => {
- const {mock} = vi.mocked(BrowserWindow);
- expect(mock.instances).toHaveLength(0);
- await restoreOrCreateWindow();
- expect(mock.instances).toHaveLength(1);
- expect(mock.instances[0].loadURL).toHaveBeenCalledOnce();
- expect(mock.instances[0].loadURL).toHaveBeenCalledWith(expect.stringMatching(/index\.html$/));
- });
- test('Should restore existing window', async () => {
- const {mock} = vi.mocked(BrowserWindow);
- // Create Window and minimize it
- await restoreOrCreateWindow();
- expect(mock.instances).toHaveLength(1);
- const appWindow = vi.mocked(mock.instances[0]);
- appWindow.isMinimized.mockReturnValueOnce(true);
- await restoreOrCreateWindow();
- expect(mock.instances).toHaveLength(1);
- expect(appWindow.restore).toHaveBeenCalledOnce();
- });
- test('Should create new window if previous was destroyed', async () => {
- const {mock} = vi.mocked(BrowserWindow);
- // Create Window and destroy it
- await restoreOrCreateWindow();
- expect(mock.instances).toHaveLength(1);
- const appWindow = vi.mocked(mock.instances[0]);
- appWindow.isDestroyed.mockReturnValueOnce(true);
- await restoreOrCreateWindow();
- expect(mock.instances).toHaveLength(2);
- });
|