unit.spec.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import type {MaybeMocked} from 'vitest';
  2. import {beforeEach, expect, test, vi} from 'vitest';
  3. import {restoreOrCreateWindow} from '../src/mainWindow';
  4. import {BrowserWindow} from 'electron';
  5. /**
  6. * Mock real electron BrowserWindow API
  7. */
  8. vi.mock('electron', () => {
  9. const bw = vi.fn() as MaybeMocked<typeof BrowserWindow>;
  10. // @ts-expect-error It's work in runtime, but I Haven't idea how to fix this type error
  11. bw.getAllWindows = vi.fn(() => bw.mock.instances);
  12. bw.prototype.loadURL = vi.fn();
  13. bw.prototype.on = vi.fn();
  14. bw.prototype.destroy = vi.fn();
  15. bw.prototype.isDestroyed = vi.fn();
  16. bw.prototype.isMinimized = vi.fn();
  17. bw.prototype.focus = vi.fn();
  18. bw.prototype.restore = vi.fn();
  19. return {BrowserWindow: bw};
  20. });
  21. beforeEach(() => {
  22. vi.clearAllMocks();
  23. });
  24. test('Should create new window', async () => {
  25. const {mock} = vi.mocked(BrowserWindow);
  26. expect(mock.instances).toHaveLength(0);
  27. await restoreOrCreateWindow();
  28. expect(mock.instances).toHaveLength(1);
  29. expect(mock.instances[0].loadURL).toHaveBeenCalledOnce();
  30. expect(mock.instances[0].loadURL).toHaveBeenCalledWith(expect.stringMatching(/index\.html$/));
  31. });
  32. test('Should restore existing window', async () => {
  33. const {mock} = vi.mocked(BrowserWindow);
  34. // Create Window and minimize it
  35. await restoreOrCreateWindow();
  36. expect(mock.instances).toHaveLength(1);
  37. const appWindow = vi.mocked(mock.instances[0]);
  38. appWindow.isMinimized.mockReturnValueOnce(true);
  39. await restoreOrCreateWindow();
  40. expect(mock.instances).toHaveLength(1);
  41. expect(appWindow.restore).toHaveBeenCalledOnce();
  42. });
  43. test('Should create new window if previous was destroyed', async () => {
  44. const {mock} = vi.mocked(BrowserWindow);
  45. // Create Window and destroy it
  46. await restoreOrCreateWindow();
  47. expect(mock.instances).toHaveLength(1);
  48. const appWindow = vi.mocked(mock.instances[0]);
  49. appWindow.isDestroyed.mockReturnValueOnce(true);
  50. await restoreOrCreateWindow();
  51. expect(mock.instances).toHaveLength(2);
  52. });