// // /* eslint-disable @typescript-eslint/ban-ts-comment */ // // import { BrowserWindow, app, ipcMain, screen } from 'electron'; // // import settings from 'electron-settings'; // // import DeskreenApp from './main.dev'; // // import initGlobals from './utils/mainProcessHelpers/initGlobals'; // // import signalingServer from './server'; // // import MenuBuilder from './menu'; // // import i18n from './configs/i18next.config'; // // import getDeskreenGlobal from './utils/mainProcessHelpers/getDeskreenGlobal'; // // import ConnectedDevicesService from './features/ConnectedDevicesService'; // // import SharingSessionService from './features/SharingSessionService'; // // import RendererWebrtcHelpersService from './features/PeerConnectionHelperRendererService'; // // import installExtensions from './utils/installExtensions'; // // const sourceMapSupport = require('source-map-support'); // // const electronDebug = require('electron-debug'); // // const electronDevToolsInstaller = require('electron-devtools-installer'); // // const TEST_SIGNALING_SERVER_PORT = '4343'; // // const TEST_DISPLAY_ID = 'd1'; // // const TEST_DISPLAY_SIZE = { width: 600, height: 400 }; // // const TEST_SCREEN_GET_ALL_DISPLAYS_RESULT = [ // // { id: 'd1', size: { width: 600, height: 400 } }, // // { id: 'd2' }, // // { id: 'd3' }, // // ]; // const testMapSharingSessions = new Map(); // testMapSharingSessions.set('1', { // denyConnectionForPartner: jest.fn(), // destroy: jest.fn(), // }); // testMapSharingSessions.set('2', { // denyConnectionForPartner: jest.fn(), // destroy: jest.fn(), // }); // const TEST_SHARING_SESSIONS_SERVICE = ({ // waitingForConnectionSharingSession: '2342a', // sharingSessions: testMapSharingSessions, // } as unknown) as SharingSessionService; // const testMapHelpers = new Map(); // testMapHelpers.set('1', { close: jest.fn() }); // testMapHelpers.set('2', { close: jest.fn() }); // const TEST_RENDERER_WEBRTC_HELPERS_SERVICE = ({ // helpers: testMapHelpers, // } as unknown) as RendererWebrtcHelpersService; // const mockGlobal = { // connectedDevicesService: TEST_CONNECTED_DEVICES_SERVICE, // roomIDService: TEST_ROOM_ID_SERVICE, // sharingSessionService: TEST_SHARING_SESSIONS_SERVICE, // rendererWebrtcHelpersService: TEST_RENDERER_WEBRTC_HELPERS_SERVICE, // }; // jest.useFakeTimers(); // jest.mock('./utils/installExtensions'); // jest.mock('./utils/AppUpdater'); // jest.mock('./main.dev', () => { // return { // __esModule: true, // this property makes it work // default: jest.requireActual('./main.dev').default, // }; // }); // jest.mock('./utils/mainProcessHelpers/getDeskreenGlobal'); // jest.mock('./utils/mainProcessHelpers/initGlobals'); // jest.mock('electron', () => { // return { // app: { // quit: jest.fn(), // on: jest.fn(), // getName: jest.fn(), // getVersion: jest.fn(), // commandLine: { // appendSwitch: jest.fn(), // }, // whenReady: jest // .fn() // .mockReturnValue(new Promise((resolve) => resolve(undefined))), // }, // ipcMain: { // handle: jest.fn(), // on: jest.fn(), // }, // screen: { // getAllDisplays: jest // .fn() // .mockReturnValue(TEST_SCREEN_GET_ALL_DISPLAYS_RESULT), // }, // BrowserWindow: jest.fn().mockReturnValue({ // loadURL: jest.fn(), // on: jest.fn(), // webContents: { // on: jest.fn(), // toggleDevTools: jest.fn(), // }, // minimize: jest.fn(), // show: jest.fn(), // focus: jest.fn(), // }), // }; // }); // jest.mock('./server', () => { // return { // start: jest.fn(), // port: TEST_SIGNALING_SERVER_PORT, // }; // }); // jest.mock('source-map-support', () => { // return { // install: jest.fn(), // }; // }); // jest.mock('electron-debug'); // jest.mock('electron-devtools-installer', () => { // return { // default: jest.fn(), // REACT_DEVELOPER_TOOLS: 'REACT_DEVELOPER_TOOLS', // REDUX_DEVTOOLS: 'REDUX_DEVTOOLS', // }; // }); // jest.mock('./configs/i18next.config', () => { // return { // on: jest.fn(), // changeLanguage: jest.fn(), // off: jest.fn(), // language: 'sv', // }; // }); // jest.mock('./menu'); // jest.mock('electron-settings', () => { // return { // set: jest.fn(), // }; // }); // describe('app main.dev tests', () => { // let testApp: DeskreenApp; // beforeEach(() => { // jest.clearAllMocks(); // jest.restoreAllMocks(); // // @ts-ignore // MenuBuilder.mockClear(); // // @ts-ignore // installExtensions.mockClear(); // testApp = new DeskreenApp(); // }); // describe('when DeskreenApp created properly', () => { // describe('when .start() was called', () => { // it('should call initGlobals', () => { // testApp.start(); // expect(initGlobals).toBeCalled(); // }); // it('should call signalingServer.start()', () => { // testApp.start(); // expect(signalingServer.start).toBeCalled(); // }); // it('should call .initElectronAppObject()', () => { // testApp.initElectronAppObject = jest.fn(); // testApp.start(); // expect(testApp.initElectronAppObject).toBeCalled(); // }); // it('should call .initIpcMain()', () => { // testApp.initIpcMain = jest.fn(); // testApp.start(); // expect(testApp.initIpcMain).toBeCalled(); // }); // describe('when initElectronAppObject was called', () => { // it('should set app.on("window-all-closed" listener', () => { // testApp.initElectronAppObject(); // expect(app.on).toHaveBeenCalledWith( // 'window-all-closed', // expect.anything() // ); // }); // it('should call app.commandLine.appendSwitch with "webrtc-max-cpu-consumption-percentage","100"', () => { // testApp.initElectronAppObject(); // expect(app.commandLine.appendSwitch).toHaveBeenCalledWith( // 'webrtc-max-cpu-consumption-percentage', // '100' // ); // }); // describe('when process.env.E2E_BUILD !== "true"', () => { // it('should set app.on("ready" listener', () => { // const processEnvBackup = process.env.E2E_BUILD; // process.env.E2E_BUILD = 'false'; // testApp.initElectronAppObject(); // expect(app.on).toHaveBeenCalledWith('ready', expect.anything()); // process.env.E2E_BUILD = processEnvBackup; // }); // }); // describe('when process.env.E2E_BUILD === "true"', () => { // it('should set app.on("ready" listener', () => { // const processEnvBackup = process.env.E2E_BUILD; // process.env.E2E_BUILD = 'true'; // testApp.initElectronAppObject(); // expect(app.whenReady).toHaveBeenCalled(); // process.env.E2E_BUILD = processEnvBackup; // }); // }); // describe('when app.on("window-all-closed" event occured', () => { // describe('when running on NOT darwin platform', () => { // it('should call app.quit()', () => { // const processBackup = process; // // @ts-ignore // // eslint-disable-next-line no-global-assign // process = { // ...processBackup, // platform: 'linux', // }; // // testApp.initElectronAppObject(); // // // @ts-ignore // // const callback = app.on.mock.calls[0][1]; // // callback(); // // expect(app.quit).toBeCalled(); // // // @ts-ignore // // // eslint-disable-next-line no-global-assign // // process = processBackup; // // }); // // }); // // describe('when running on darwin platform', () => { // // it('should NOT call app.quit()', () => { // // const processBackup = process; // // // @ts-ignore // // // eslint-disable-next-line no-global-assign // // process = { // // ...processBackup, // // platform: 'darwin', // // }; // // testApp.initElectronAppObject(); // // // @ts-ignore // // const callback = app.on.mock.calls[0][1]; // // callback(); // // expect(app.quit).not.toBeCalled(); // // // @ts-ignore // // // eslint-disable-next-line no-global-assign // // process = processBackup; // // }); // // }); // // }); // // describe('when app.on("activate" event occured', () => { // // it('should call .createWindow if mainWindow is null', () => { // // testApp.mainWindow = null; // // testApp.createWindow = jest.fn(); // // testApp.initElectronAppObject(); // // // @ts-ignore // // const callback = app.on.mock.calls[2][1]; // // callback({ preventDefault: () => {} }); // // expect(testApp.createWindow).toBeCalled(); // // }); // // it('should NOT call .createWindow if mainWindow is not null', () => { // // testApp.mainWindow = ({ // // asdf: 'agasg', // // } as unknown) as BrowserWindow; // // testApp.createWindow = jest.fn(); // // testApp.initElectronAppObject(); // // // @ts-ignore // // const callback = app.on.mock.calls[2][1]; // // callback({ preventDefault: () => {} }); // // expect(testApp.createWindow).not.toBeCalled(); // // }); // // }); // // }); // // describe('when initIpcMain was called', () => { // // it('should set ipcMain.on("client-changed-language" listener', () => { // // testApp.initIpcMain(); // // expect(ipcMain.on).toHaveBeenCalledWith( // // 'client-changed-language', // // expect.anything() // // ); // // }); // // it('should set ipcMain.handle("get-signaling-server-port" listener', () => { // // testApp.initIpcMain(); // // expect(ipcMain.handle).toHaveBeenCalledWith( // // 'get-signaling-server-port', // // expect.anything() // // ); // // }); // // it('should set ipcMain.handle("get-all-displays" listener', () => { // // testApp.initIpcMain(); // // expect(ipcMain.handle).toHaveBeenCalledWith( // // 'get-all-displays', // // expect.anything() // // ); // // }); // // it('should set ipcMain.handle("get-display-size-by-display-id" listener', () => { // // testApp.initIpcMain(); // // expect(ipcMain.handle).toHaveBeenCalledWith( // // 'get-display-size-by-display-id', // // expect.anything() // // ); // // }); // // it('should set ipcMain.handle("main-window-onbeforeunload" listener', () => { // // testApp.initIpcMain(); // // expect(ipcMain.handle).toHaveBeenCalledWith( // // 'main-window-onbeforeunload', // // expect.anything() // // ); // // }); // // describe('when ipcMain.on("client-changed-language" callback was called', () => { // // it('should call i18n.changeLanguage and settings.set("appLanguage", newLangCode)', async () => { // // const testNewLang = 'bz'; // // testApp.initIpcMain(); // // // @ts-ignore // // const callback = ipcMain.on.mock.calls[0][1]; // // await callback(undefined, testNewLang); // // expect(i18n.changeLanguage).toHaveBeenCalledWith(testNewLang); // // expect(settings.set).toHaveBeenCalledWith( // // 'appLanguage', // // testNewLang // // ); // // }); // // }); // // describe('when ipcMain.on("get-signaling-server-port" callback was called', () => { // // describe('when main window is defined', () => { // // it('should send a signaling server port to main window', () => { // // testApp.mainWindow = ({ // // webContents: { send: jest.fn() }, // // } as unknown) as BrowserWindow; // // testApp.initIpcMain(); // // // @ts-ignore // // const callback = ipcMain.handle.mock.calls[0][1]; // // callback(); // // expect(testApp.mainWindow.webContents.send).toHaveBeenCalledWith( // // 'sending-port-from-main', // // TEST_SIGNALING_SERVER_PORT // // ); // // }); // // }); // // }); // // describe('when ipcMain.on("get-all-displays" callback was called', () => { // // it('should return screen.getAllDisplays() result', () => { // // testApp.initIpcMain(); // // // @ts-ignore // // const callback = ipcMain.handle.mock.calls[1][1]; // // const res = callback(); // // expect(res).toBe(TEST_SCREEN_GET_ALL_DISPLAYS_RESULT); // // expect(screen.getAllDisplays).toBeCalled(); // // }); // // }); // // describe('when ipcMain.on("get-display-size-by-display-id" callback was called', () => { // // describe('when displayID exists in screen.getAllDisplays() result', () => { // // it('should return display size as expected', () => { // // testApp.initIpcMain(); // // // @ts-ignore // // const callback = ipcMain.handle.mock.calls[2][1]; // // const res = callback(undefined, TEST_DISPLAY_ID); // // expect(res).toEqual(TEST_DISPLAY_SIZE); // // }); // // }); // // describe('when displayID NOT exist in screen.getAllDisplays() result', () => { // // it('should return undefined expected', () => { // // testApp.initIpcMain(); // // // @ts-ignore // // const callback = ipcMain.handle.mock.calls[2][1]; // // const res = callback(undefined, 'dagaw22ds'); // // expect(res).toBe(undefined); // // }); // // }); // // }); // // describe('when ipcMain.on("main-window-onbeforeunload" callback was called', () => { // // it('should reset globals', () => { // // // @ts-ignore // // getDeskreenGlobal.mockReturnValue(mockGlobal); // // testApp.initIpcMain(); // // // @ts-ignore // // const callback = ipcMain.handle.mock.calls[3][1]; // // callback(); // // const deskreenGlobal = getDeskreenGlobal(); // // expect(deskreenGlobal.connectedDevicesService).not.toBe( // // TEST_CONNECTED_DEVICES_SERVICE // // ); // // expect(deskreenGlobal.roomIDService).not.toBe(TEST_ROOM_ID_SERVICE); // // testMapSharingSessions.forEach((s) => { // // expect(s.denyConnectionForPartner).toBeCalled(); // // expect(s.destroy).toBeCalled(); // // }); // // testMapHelpers.forEach((s) => { // // expect(s.close).toBeCalled(); // // }); // // expect( // // deskreenGlobal.sharingSessionService // // .waitingForConnectionSharingSession // // ).toBe(null); // // expect(testMapHelpers.size).toBe(0); // // expect(testMapSharingSessions.size).toBe(0); // // }); // // }); // // describe('when createWindow is called', () => { // // describe('when in dev environment', () => { // // it('should call installExtensions', async () => { // // // @ts-ignore // // // installExtensions = jest.fn(); // // const processEnvNodeEnvBackup = process.env.NODE_ENV; // // process.env.NODE_ENV = 'development'; // // await testApp.createWindow(); // // expect(installExtensions).toBeCalledTimes(1); // // process.env.NODE_ENV = processEnvNodeEnvBackup; // // const processDebugProdBackup = process.env.DEBUG_PROD; // // process.env.DEBUG_PROD = 'true'; // // await testApp.createWindow(); // // expect(installExtensions).toBeCalledTimes(2); // // process.env.DEBUG_PROD = processDebugProdBackup; // // }); // // }); // // describe('when mainWindow is created', () => { // // it('should call .mainWindow.loadURL with proper parameter', () => { // // testApp.createWindow(); // // expect(testApp.mainWindow?.loadURL).toHaveBeenCalledWith( // // `file://${__dirname}/app.html` // // ); // // }); // // it('should set .mainWindow.webContents.on("did-finish-load"', () => { // // testApp.createWindow(); // // expect(testApp.mainWindow?.webContents.on).toHaveBeenCalledWith( // // 'did-finish-load', // // expect.anything() // // ); // // }); // // describe('when process.env.NODE_ENV === "dev"', () => { // // it('should call this.mainWindow.webContents.toggleDevTools', () => { // // const backProcEnvNodeEnv = process.env.NODE_ENV; // // process.env.NODE_ENV = 'dev'; // // testApp.createWindow(); // // expect( // // testApp.mainWindow?.webContents.toggleDevTools // // ).toBeCalled(); // // process.env.NODE_ENV = backProcEnvNodeEnv; // // }); // // }); // // describe('when .mainWindow?.webContents.on("did-finish-load" callback called', () => { // // describe('when mainWindow is not defined', () => { // // it('should throw an error', () => { // // testApp.createWindow(); // // const callback = // // // @ts-ignore // // testApp.mainWindow.webContents.on.mock.calls[0][1]; // // testApp.mainWindow = null; // // try { // // callback(); // // // eslint-disable-next-line jest/no-jasmine-globals // // fail(); // // } catch (e) { // // // eslint-disable-next-line jest/no-try-expect // // expect(e).toEqual(new Error('"mainWindow" is not defined')); // // } // // }); // // }); // // describe('when process.env.START_MINIMIZED is defined', () => { // // it('should call mainWindow.minimize', () => { // // testApp.createWindow(); // // const backProcessEnvStartMinimized = // // process.env.START_MINIMIZED; // // process.env.START_MINIMIZED = 'true'; // // const callback = // // // @ts-ignore // // testApp.mainWindow.webContents.on.mock.calls[0][1]; // // callback(); // // expect(testApp.mainWindow?.minimize).toBeCalled(); // // process.env.START_MINIMIZED = backProcessEnvStartMinimized; // // }); // // }); // // describe('when process.env.START_MINIMIZED is NOT defined', () => { // // it('should call mainWindow.show and mainWindow.focus', () => { // // testApp.createWindow(); // // const backProcessEnvStartMinimized = // // process.env.START_MINIMIZED; // // process.env.START_MINIMIZED = 'false'; // // const callback = // // // @ts-ignore // // testApp.mainWindow.webContents.on.mock.calls[0][1]; // // callback(); // // expect(testApp.mainWindow?.show).toBeCalled(); // // expect(testApp.mainWindow?.focus).toBeCalled(); // // process.env.START_MINIMIZED = backProcessEnvStartMinimized; // // }); // // }); // // }); // // describe('when .mainWindow?.on("closed" callback called', () => { // // it('should set main window to null', () => { // // testApp.createWindow(); // // const callback = // // // @ts-ignore // // testApp.mainWindow.on.mock.calls[0][1]; // // callback(); // // expect(testApp.mainWindow).toBeNull(); // // }); // // describe('when process.platform !== "darwin"', () => { // // it('should call app.quit()', () => { // // const processBackup = process; // // // @ts-ignore // // // eslint-disable-next-line no-global-assign // // process = { // // ...processBackup, // // platform: 'linux', // // }; // // testApp.createWindow(); // // const callback = // // // @ts-ignore // // testApp.mainWindow.on.mock.calls[0][1]; // // callback(); // // expect(app.quit).toBeCalled(); // // // @ts-ignore // // // eslint-disable-next-line no-global-assign // // process = processBackup; // // }); // // }); // // describe('when process.platform === "darwin"', () => { // // it('should call app.quit()', () => { // // const processBackup = process; // // // @ts-ignore // // // eslint-disable-next-line no-global-assign // // process = { // // ...processBackup, // // platform: 'darwin', // // }; // // testApp.createWindow(); // // const callback = // // // @ts-ignore // // testApp.mainWindow.on.mock.calls[0][1]; // // callback(); // // expect(app.quit).not.toBeCalled(); // // // @ts-ignore // // // eslint-disable-next-line no-global-assign // // process = processBackup; // // }); // // }); // // }); // // }); // // }); // // }); // // describe('when process.env.NODE_ENV === "production"', () => { // // it('should call sourceMapSupport to be called when ', () => { // // const envNodeEnvBackup = process.env.NODE_ENV; // // process.env.NODE_ENV = 'production'; // // testApp.start(); // // expect(sourceMapSupport.install).toBeCalled(); // // process.env.NODE_ENV = envNodeEnvBackup; // // }); // // }); // // describe('when process.env.NODE_ENV === "development"', () => { // // it('should call electron-debug ', () => { // // const envNodeEnvBackup = process.env.NODE_ENV; // // process.env.NODE_ENV = 'development'; // // testApp.start(); // // expect(electronDebug).toBeCalled(); // // process.env.NODE_ENV = envNodeEnvBackup; // // }); // // }); // // describe('when process.env.DEBUG_PROD === "true"', () => { // // it('should call electron-debug ', () => { // // const envDebugProdBackup = process.env.DEBUG_PROD; // // process.env.DEBUG_PROD = 'true'; // // testApp.start(); // // expect(electronDebug).toBeCalled(); // // process.env.DEBUG_PROD = envDebugProdBackup; // // }); // // }); // // }); // // describe('when .initI18n() was called', () => { // // it('should init i18n object with .on("loaded" event', () => { // // testApp.initI18n(); // // expect(i18n.on).toBeCalledWith('loaded', expect.anything()); // // }); // // it('should init i18n object with .on("languageChanged" event', () => { // // testApp.initI18n(); // // expect(i18n.on).toBeCalledWith('languageChanged', expect.anything()); // // }); // // describe('when "loaded" event occured', () => { // // it('should call changleLanguage("en") and i18n.off("loaded"', () => { // // testApp.initI18n(); // // // @ts-ignore // // const callback = i18n.on.mock.calls[0][1]; // // callback(); // // expect(i18n.changeLanguage).toBeCalledWith('en'); // // expect(i18n.off).toBeCalledWith('loaded'); // // }); // // }); // // describe('when "languageChanged" event occured', () => { // // describe('when mainWindow is defined', () => { // // it('should create new MenuBuilder', () => { // // testApp.mainWindow = ({} as unknown) as BrowserWindow; // // testApp.initI18n(); // // // @ts-ignore // // const callback = i18n.on.mock.calls[1][1]; // // callback(); // // expect(MenuBuilder).toHaveBeenCalledTimes(1); // // expect(MenuBuilder).toHaveBeenCalledWith(testApp.mainWindow, i18n); // // }); // // it('should call .buildMenu() of menuBuilder', () => { // // testApp.mainWindow = ({} as unknown) as BrowserWindow; // // testApp.initI18n(); // // // @ts-ignore // // const callback = i18n.on.mock.calls[1][1]; // // callback(); // // // @ts-ignore // // const mockMenuBuilderInstance = MenuBuilder.mock.instances[0]; // // expect(mockMenuBuilderInstance.buildMenu).toBeCalled(); // // }); // // it('should call setTimeout with callback and delay', () => { // // testApp.mainWindow = ({} as unknown) as BrowserWindow; // // testApp.initI18n(); // // // @ts-ignore // // const callback = i18n.on.mock.calls[1][1]; // // callback(); // // expect(setTimeout).toHaveBeenCalledWith(expect.anything(), 400); // // }); // // describe('when setTimeout callback triggered after delay', () => { // // describe('when should really change app lang', () => { // // it('should call i18n.changeLanguage with passed language', () => { // // const testLng = 'bg'; // // testApp.mainWindow = ({} as unknown) as BrowserWindow; // // testApp.initI18n(); // // // @ts-ignore // // const callback = i18n.on.mock.calls[1][1]; // // callback(testLng); // // // @ts-ignore // // const timeoutCallback = setTimeout.mock.calls[0][0]; // // timeoutCallback(); // // expect(i18n.changeLanguage).toHaveBeenCalledWith(testLng); // // }); // // it('should set "appLanguage" in electron-settings', async () => { // // const testLng = 'bg'; // // testApp.mainWindow = ({} as unknown) as BrowserWindow; // // testApp.initI18n(); // // // @ts-ignore // // const callback = i18n.on.mock.calls[1][1]; // // callback(testLng); // // // @ts-ignore // // const timeoutCallback = setTimeout.mock.calls[0][0]; // // await timeoutCallback(); // // expect(settings.set).toHaveBeenCalledWith( // // 'appLanguage', // // testLng // // ); // // }); // // }); // // }); // // }); // // }); // // }); // // }); // // describe('when installExtensions was called', () => { // // it('should call electron-devtools-installer with "REACT_DEVELOPER_TOOLS" and "REDUX_DEVTOOLS"', async () => { // // // @ts-ignore // // installExtensions.mockImplementation( // // jest.requireActual('./utils/installExtensions').default // // ); // // await installExtensions(); // // expect(electronDevToolsInstaller.default).toBeCalledWith( // // 'REDUX_DEVTOOLS', // // !!process.env.UPGRADE_EXTENSIONS // // ); // // expect(electronDevToolsInstaller.default).toBeCalledWith( // // 'REACT_DEVELOPER_TOOLS', // // !!process.env.UPGRADE_EXTENSIONS // // ); // // }); // // }); // // });