diff --git a/app/components/ConnectedDevicesListDrawer.tsx b/app/components/ConnectedDevicesListDrawer.tsx index 47eaae1..150d34c 100644 --- a/app/components/ConnectedDevicesListDrawer.tsx +++ b/app/components/ConnectedDevicesListDrawer.tsx @@ -115,7 +115,6 @@ export default function ConnectedDevicesListDrawer( IpcEvents.DisconnectPeerAndDestroySharingSessionBySessionID, device.sharingSessionID ); - ipcRenderer.invoke(IpcEvents.DisconnectDeviceById, id); }, [connectedDevices] ); @@ -174,6 +173,7 @@ export default function ConnectedDevicesListDrawer( const disconnectAllCancelButtonText = t('No, Cancel'); const disconnectAllConfirmButtonText = t('Yes, Disconnect All'); + console.log('============'); return ( <> @@ -219,6 +219,7 @@ export default function ConnectedDevicesListDrawer( >
{connectedDevices.map((device) => { + console.log('device', device); return (
{}; diff --git a/app/features/PeerConnection/handleSetDisplaySizeFromLocalStream.spec.ts b/app/features/PeerConnection/handleSetDisplaySizeFromLocalStream.spec.ts index e3490dc..63f3b10 100644 --- a/app/features/PeerConnection/handleSetDisplaySizeFromLocalStream.spec.ts +++ b/app/features/PeerConnection/handleSetDisplaySizeFromLocalStream.spec.ts @@ -1,92 +1,92 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -import { - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, -} from './mocks/testVars'; -import PeerConnection from '.'; -import RoomIDService from '../../server/RoomIDService'; -import ConnectedDevicesService from '../ConnectedDevicesService'; -import SharingSessionService from '../SharingSessionService'; -import setDisplaySizeFromLocalStream from './handleSetDisplaySizeFromLocalStream'; -import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; +// /* eslint-disable @typescript-eslint/ban-ts-comment */ +// import { +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// } from './mocks/testVars'; +// import PeerConnection from '.'; +// import RoomIDService from '../../server/RoomIDService'; +// import ConnectedDevicesService from '../ConnectedDevicesService'; +// import SharingSessionService from '../SharingSessionService'; +// import setDisplaySizeFromLocalStream from './handleSetDisplaySizeFromLocalStream'; +// import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; -jest.useFakeTimers(); +// jest.useFakeTimers(); -jest.mock('simple-peer'); +// jest.mock('simple-peer'); -const TEST_MOCK_DISPLAY_SIZE = { - width: 1280, - height: 640, -}; +// const TEST_MOCK_DISPLAY_SIZE = { +// width: 1280, +// height: 640, +// }; -describe('setDisplaySizeFromLocalStream callback', () => { - let peerConnection: PeerConnection; +// describe('setDisplaySizeFromLocalStream callback', () => { +// let peerConnection: PeerConnection; - beforeEach(() => { - peerConnection = new PeerConnection( - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, - {} as RoomIDService, - {} as ConnectedDevicesService, - {} as SharingSessionService, - {} as DesktopCapturerSourcesService - ); - peerConnection.localStream = ({ - getVideoTracks: () => [ - { - getSettings: () => { - return TEST_MOCK_DISPLAY_SIZE; - }, - }, - ], - } as unknown) as MediaStream; - }); +// beforeEach(() => { +// peerConnection = new PeerConnection( +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// {} as RoomIDService, +// {} as ConnectedDevicesService, +// {} as SharingSessionService, +// {} as DesktopCapturerSourcesService +// ); +// peerConnection.localStream = ({ +// getVideoTracks: () => [ +// { +// getSettings: () => { +// return TEST_MOCK_DISPLAY_SIZE; +// }, +// }, +// ], +// } as unknown) as MediaStream; +// }); - afterEach(() => { - jest.clearAllMocks(); - jest.restoreAllMocks(); - }); +// afterEach(() => { +// jest.clearAllMocks(); +// jest.restoreAllMocks(); +// }); - describe('when setDisplaySizeFromLocalStream called properly', () => { - it('should set width and height on .sourceDisplaySize', () => { - setDisplaySizeFromLocalStream(peerConnection); +// describe('when setDisplaySizeFromLocalStream called properly', () => { +// it('should set width and height on .sourceDisplaySize', () => { +// setDisplaySizeFromLocalStream(peerConnection); - expect(peerConnection.sourceDisplaySize).toEqual(TEST_MOCK_DISPLAY_SIZE); - }); - }); +// expect(peerConnection.sourceDisplaySize).toEqual(TEST_MOCK_DISPLAY_SIZE); +// }); +// }); - describe('when setDisplaySizeFromLocalStream was NOT called properly', () => { - describe('when localStream is null', () => { - it('should have .sourceDisplaySize as undefined', () => { - peerConnection.localStream = null; +// describe('when setDisplaySizeFromLocalStream was NOT called properly', () => { +// describe('when localStream is null', () => { +// it('should have .sourceDisplaySize as undefined', () => { +// peerConnection.localStream = null; - setDisplaySizeFromLocalStream(peerConnection); +// setDisplaySizeFromLocalStream(peerConnection); - expect(peerConnection.sourceDisplaySize).toBe(undefined); - }); - }); +// expect(peerConnection.sourceDisplaySize).toBe(undefined); +// }); +// }); - describe('when peerConnection.localStream.getVideoTracks()[0].getSettings() width or height is undefined', () => { - it('should have .sourceDisplaySize to be undefined', () => { - peerConnection.localStream = ({ - getVideoTracks: () => [ - { - getSettings: () => { - return { - width: undefined, - height: undefined, - }; - }, - }, - ], - } as unknown) as MediaStream; +// describe('when peerConnection.localStream.getVideoTracks()[0].getSettings() width or height is undefined', () => { +// it('should have .sourceDisplaySize to be undefined', () => { +// peerConnection.localStream = ({ +// getVideoTracks: () => [ +// { +// getSettings: () => { +// return { +// width: undefined, +// height: undefined, +// }; +// }, +// }, +// ], +// } as unknown) as MediaStream; - setDisplaySizeFromLocalStream(peerConnection); +// setDisplaySizeFromLocalStream(peerConnection); - expect(peerConnection.sourceDisplaySize).toBe(undefined); - }); - }); - }); -}); +// expect(peerConnection.sourceDisplaySize).toBe(undefined); +// }); +// }); +// }); +// }); diff --git a/app/features/PeerConnection/handleSocket.spec.ts b/app/features/PeerConnection/handleSocket.spec.ts index e231027..896cb7e 100644 --- a/app/features/PeerConnection/handleSocket.spec.ts +++ b/app/features/PeerConnection/handleSocket.spec.ts @@ -1,195 +1,195 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -import { - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, -} from './mocks/testVars'; -import PeerConnection from '.'; -import RoomIDService from '../../server/RoomIDService'; -import ConnectedDevicesService from '../ConnectedDevicesService'; -import SharingSessionService from '../SharingSessionService'; -import handleSocket from './handleSocket'; -import handleSocketUserEnter from './handleSocketUserEnter'; -import handleSocketUserExit from './handleSocketUserExit'; -import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; +// /* eslint-disable @typescript-eslint/no-explicit-any */ +// /* eslint-disable @typescript-eslint/ban-ts-comment */ +// import { +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// } from './mocks/testVars'; +// import PeerConnection from '.'; +// import RoomIDService from '../../server/RoomIDService'; +// import ConnectedDevicesService from '../ConnectedDevicesService'; +// import SharingSessionService from '../SharingSessionService'; +// import handleSocket from './handleSocket'; +// import handleSocketUserEnter from './handleSocketUserEnter'; +// import handleSocketUserExit from './handleSocketUserExit'; +// import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; -jest.useFakeTimers(); +// jest.useFakeTimers(); -jest.mock('simple-peer'); -jest.mock('./handleSocketUserEnter'); -jest.mock('./handleSocketUserExit'); +// jest.mock('simple-peer'); +// jest.mock('./handleSocketUserEnter'); +// jest.mock('./handleSocketUserExit'); -function initSocketWithListeners(peerConnection: PeerConnection) { - const listeners: any = {}; - peerConnection.socket = ({ - on: (eventName: string, callback: (p: any) => void) => { - if (!listeners[eventName]) { - listeners[eventName] = []; - } - listeners[eventName].push(callback); - }, - emit: (eventName: string, param: any) => { - if (listeners[eventName]) { - listeners[eventName].forEach((callback: (p: any) => void) => { - callback(param); - }); - } - }, - removeAllListeners: () => {}, - } as unknown) as SocketIOClient.Socket; -} +// function initSocketWithListeners(peerConnection: PeerConnection) { +// const listeners: any = {}; +// peerConnection.socket = ({ +// on: (eventName: string, callback: (p: any) => void) => { +// if (!listeners[eventName]) { +// listeners[eventName] = []; +// } +// listeners[eventName].push(callback); +// }, +// emit: (eventName: string, param: any) => { +// if (listeners[eventName]) { +// listeners[eventName].forEach((callback: (p: any) => void) => { +// callback(param); +// }); +// } +// }, +// removeAllListeners: () => {}, +// } as unknown) as SocketIOClient.Socket; +// } -describe('handleSocket callback', () => { - let peerConnection: PeerConnection; +// describe('handleSocket callback', () => { +// let peerConnection: PeerConnection; - beforeEach(() => { - // @ts-ignore - peerConnection = new PeerConnection( - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, - {} as RoomIDService, - {} as ConnectedDevicesService, - {} as SharingSessionService, - {} as DesktopCapturerSourcesService - ); - peerConnection.socket = ({ - on: jest.fn(), - removeAllListeners: jest.fn(), - } as unknown) as SocketIOClient.Socket; - }); +// beforeEach(() => { +// // @ts-ignore +// peerConnection = new PeerConnection( +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// {} as RoomIDService, +// {} as ConnectedDevicesService, +// {} as SharingSessionService, +// {} as DesktopCapturerSourcesService +// ); +// peerConnection.socket = ({ +// on: jest.fn(), +// removeAllListeners: jest.fn(), +// } as unknown) as SocketIOClient.Socket; +// }); - afterEach(() => { - jest.clearAllMocks(); - jest.restoreAllMocks(); - }); +// afterEach(() => { +// jest.clearAllMocks(); +// jest.restoreAllMocks(); +// }); - describe('when handleSocket called properly', () => { - it('should call removeAllListeners', () => { - handleSocket(peerConnection); +// describe('when handleSocket called properly', () => { +// it('should call removeAllListeners', () => { +// handleSocket(peerConnection); - expect(peerConnection.socket.removeAllListeners).toBeCalled(); - }); +// expect(peerConnection.socket.removeAllListeners).toBeCalled(); +// }); - it('should call socket.on(connect', () => { - handleSocket(peerConnection); +// it('should call socket.on(connect', () => { +// handleSocket(peerConnection); - expect(peerConnection.socket.on).toBeCalledWith( - 'connect', - expect.anything() - ); - }); +// expect(peerConnection.socket.on).toBeCalledWith( +// 'connect', +// expect.anything() +// ); +// }); - it('should call socket.on(disconnect', () => { - handleSocket(peerConnection); +// it('should call socket.on(disconnect', () => { +// handleSocket(peerConnection); - expect(peerConnection.socket.on).toBeCalledWith( - 'disconnect', - expect.anything() - ); - }); +// expect(peerConnection.socket.on).toBeCalledWith( +// 'disconnect', +// expect.anything() +// ); +// }); - it('should call socket.on(USER_ENTER', () => { - handleSocket(peerConnection); +// it('should call socket.on(USER_ENTER', () => { +// handleSocket(peerConnection); - expect(peerConnection.socket.on).toBeCalledWith( - 'USER_ENTER', - expect.anything() - ); - }); +// expect(peerConnection.socket.on).toBeCalledWith( +// 'USER_ENTER', +// expect.anything() +// ); +// }); - it('should call socket.on(USER_EXIT', () => { - handleSocket(peerConnection); +// it('should call socket.on(USER_EXIT', () => { +// handleSocket(peerConnection); - expect(peerConnection.socket.on).toBeCalledWith( - 'USER_EXIT', - expect.anything() - ); - }); +// expect(peerConnection.socket.on).toBeCalledWith( +// 'USER_EXIT', +// expect.anything() +// ); +// }); - it('should call socket.on(ENCRYPTED_MESSAGE', () => { - handleSocket(peerConnection); +// it('should call socket.on(ENCRYPTED_MESSAGE', () => { +// handleSocket(peerConnection); - expect(peerConnection.socket.on).toBeCalledWith( - 'ENCRYPTED_MESSAGE', - expect.anything() - ); - }); +// expect(peerConnection.socket.on).toBeCalledWith( +// 'ENCRYPTED_MESSAGE', +// expect.anything() +// ); +// }); - it('should call socket.on(USER_DISCONNECT', () => { - handleSocket(peerConnection); +// it('should call socket.on(USER_DISCONNECT', () => { +// handleSocket(peerConnection); - expect(peerConnection.socket.on).toBeCalledWith( - 'USER_DISCONNECT', - expect.anything() - ); - }); +// expect(peerConnection.socket.on).toBeCalledWith( +// 'USER_DISCONNECT', +// expect.anything() +// ); +// }); - describe('when ENCRYPTED_MESSAGE event occured', () => { - it('should call receiveEncryptedMessage on peer connection object with proper payload', () => { - peerConnection.receiveEncryptedMessage = jest.fn(); - const TEST_ENCRYPTED_MESSAGE_PAYLOAD = { - test: 'sfss', - }; - initSocketWithListeners(peerConnection); +// describe('when ENCRYPTED_MESSAGE event occured', () => { +// it('should call receiveEncryptedMessage on peer connection object with proper payload', () => { +// peerConnection.receiveEncryptedMessage = jest.fn(); +// const TEST_ENCRYPTED_MESSAGE_PAYLOAD = { +// test: 'sfss', +// }; +// initSocketWithListeners(peerConnection); - handleSocket(peerConnection); - peerConnection.socket.emit( - 'ENCRYPTED_MESSAGE', - TEST_ENCRYPTED_MESSAGE_PAYLOAD - ); +// handleSocket(peerConnection); +// peerConnection.socket.emit( +// 'ENCRYPTED_MESSAGE', +// TEST_ENCRYPTED_MESSAGE_PAYLOAD +// ); - expect(peerConnection.receiveEncryptedMessage).toBeCalledWith( - TEST_ENCRYPTED_MESSAGE_PAYLOAD - ); - }); - }); +// expect(peerConnection.receiveEncryptedMessage).toBeCalledWith( +// TEST_ENCRYPTED_MESSAGE_PAYLOAD +// ); +// }); +// }); - describe('when USER_DISCONNECT event occured', () => { - it('should call .socket.emit with TOGGLE_LOCK_ROOM event', () => { - peerConnection.toggleLockRoom = jest.fn(); - initSocketWithListeners(peerConnection); +// describe('when USER_DISCONNECT event occured', () => { +// it('should call .socket.emit with TOGGLE_LOCK_ROOM event', () => { +// peerConnection.toggleLockRoom = jest.fn(); +// initSocketWithListeners(peerConnection); - handleSocket(peerConnection); - peerConnection.socket.emit('USER_DISCONNECT'); +// handleSocket(peerConnection); +// peerConnection.socket.emit('USER_DISCONNECT'); - expect(peerConnection.toggleLockRoom).toBeCalledWith(false); - }); - }); +// expect(peerConnection.toggleLockRoom).toBeCalledWith(false); +// }); +// }); - describe('when USER_ENTER event occured', () => { - it('should call handleSocketUserEnter callback', () => { - initSocketWithListeners(peerConnection); +// describe('when USER_ENTER event occured', () => { +// it('should call handleSocketUserEnter callback', () => { +// initSocketWithListeners(peerConnection); - handleSocket(peerConnection); - peerConnection.socket.emit('USER_ENTER'); +// handleSocket(peerConnection); +// peerConnection.socket.emit('USER_ENTER'); - expect(handleSocketUserEnter).toBeCalled(); - }); - }); +// expect(handleSocketUserEnter).toBeCalled(); +// }); +// }); - describe('when USER_EXIT event occured', () => { - it('should call handleSocketUserEnter callback', () => { - initSocketWithListeners(peerConnection); +// describe('when USER_EXIT event occured', () => { +// it('should call handleSocketUserEnter callback', () => { +// initSocketWithListeners(peerConnection); - handleSocket(peerConnection); - peerConnection.socket.emit('USER_EXIT'); +// handleSocket(peerConnection); +// peerConnection.socket.emit('USER_EXIT'); - expect(handleSocketUserExit).toBeCalled(); - }); - }); +// expect(handleSocketUserExit).toBeCalled(); +// }); +// }); - describe('when "disconnect" event occured', () => { - it('should call .selfDestrory() callback', () => { - peerConnection.selfDestroy = jest.fn(); - initSocketWithListeners(peerConnection); +// describe('when "disconnect" event occured', () => { +// it('should call .selfDestrory() callback', () => { +// peerConnection.selfDestroy = jest.fn(); +// initSocketWithListeners(peerConnection); - handleSocket(peerConnection); - peerConnection.socket.emit('disconnect'); +// handleSocket(peerConnection); +// peerConnection.socket.emit('disconnect'); - expect(peerConnection.selfDestroy).toBeCalled(); - }); - }); - }); -}); +// expect(peerConnection.selfDestroy).toBeCalled(); +// }); +// }); +// }); +// }); diff --git a/app/features/PeerConnection/handleSocketUserEnter.spec.ts b/app/features/PeerConnection/handleSocketUserEnter.spec.ts index a499543..bdcfbce 100644 --- a/app/features/PeerConnection/handleSocketUserEnter.spec.ts +++ b/app/features/PeerConnection/handleSocketUserEnter.spec.ts @@ -1,96 +1,96 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -import { - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, -} from './mocks/testVars'; -import PeerConnection from '.'; -import RoomIDService from '../../server/RoomIDService'; -import ConnectedDevicesService from '../ConnectedDevicesService'; -import SharingSessionService from '../SharingSessionService'; -import handleSocketUserEnter from './handleSocketUserEnter'; -import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; +// /* eslint-disable @typescript-eslint/no-explicit-any */ +// /* eslint-disable @typescript-eslint/ban-ts-comment */ +// import { +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// } from './mocks/testVars'; +// import PeerConnection from '.'; +// import RoomIDService from '../../server/RoomIDService'; +// import ConnectedDevicesService from '../ConnectedDevicesService'; +// import SharingSessionService from '../SharingSessionService'; +// import handleSocketUserEnter from './handleSocketUserEnter'; +// import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; -jest.useFakeTimers(); +// jest.useFakeTimers(); -jest.mock('simple-peer'); +// jest.mock('simple-peer'); -const TEST_PARTNER_USER = { - username: 'asdfasdf', - publicKey: 'key:asdfasdffff', -}; -const TEST_PAYLOAD = { - users: [TEST_PARTNER_USER], -}; +// const TEST_PARTNER_USER = { +// username: 'asdfasdf', +// publicKey: 'key:asdfasdffff', +// }; +// const TEST_PAYLOAD = { +// users: [TEST_PARTNER_USER], +// }; -function initSocketWithListeners(peerConnection: PeerConnection) { - const listeners: any = {}; - peerConnection.socket = ({ - on: (eventName: string, callback: (p: any) => void) => { - if (!listeners[eventName]) { - listeners[eventName] = []; - } - listeners[eventName].push(callback); - }, - emit: (eventName: string, param: any) => { - if (listeners[eventName]) { - listeners[eventName].forEach((callback: (p: any) => void) => { - callback(param); - }); - } - }, - removeAllListeners: () => {}, - } as unknown) as SocketIOClient.Socket; -} +// function initSocketWithListeners(peerConnection: PeerConnection) { +// const listeners: any = {}; +// peerConnection.socket = ({ +// on: (eventName: string, callback: (p: any) => void) => { +// if (!listeners[eventName]) { +// listeners[eventName] = []; +// } +// listeners[eventName].push(callback); +// }, +// emit: (eventName: string, param: any) => { +// if (listeners[eventName]) { +// listeners[eventName].forEach((callback: (p: any) => void) => { +// callback(param); +// }); +// } +// }, +// removeAllListeners: () => {}, +// } as unknown) as SocketIOClient.Socket; +// } -describe('handleSocketUserEnter callback', () => { - let peerConnection: PeerConnection; +// describe('handleSocketUserEnter callback', () => { +// let peerConnection: PeerConnection; - beforeEach(() => { - // @ts-ignore - peerConnection = new PeerConnection( - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, - {} as RoomIDService, - {} as ConnectedDevicesService, - {} as SharingSessionService, - {} as DesktopCapturerSourcesService - ); - peerConnection.socket = ({ - on: jest.fn(), - removeAllListeners: jest.fn(), - } as unknown) as SocketIOClient.Socket; - initSocketWithListeners(peerConnection); - }); +// beforeEach(() => { +// // @ts-ignore +// peerConnection = new PeerConnection( +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// {} as RoomIDService, +// {} as ConnectedDevicesService, +// {} as SharingSessionService, +// {} as DesktopCapturerSourcesService +// ); +// peerConnection.socket = ({ +// on: jest.fn(), +// removeAllListeners: jest.fn(), +// } as unknown) as SocketIOClient.Socket; +// initSocketWithListeners(peerConnection); +// }); - afterEach(() => { - jest.clearAllMocks(); - jest.restoreAllMocks(); - }); +// afterEach(() => { +// jest.clearAllMocks(); +// jest.restoreAllMocks(); +// }); - describe('when handleSocketUserEnter called properly', () => { - it('should set .partner to partner user', () => { - handleSocketUserEnter(peerConnection, TEST_PAYLOAD); +// describe('when handleSocketUserEnter called properly', () => { +// it('should set .partner to partner user', () => { +// handleSocketUserEnter(peerConnection, TEST_PAYLOAD); - expect(peerConnection.partner).toBe(TEST_PARTNER_USER); - }); +// expect(peerConnection.partner).toBe(TEST_PARTNER_USER); +// }); - it('should call toggleLockRoom with true', () => { - peerConnection.toggleLockRoom = jest.fn(); +// it('should call toggleLockRoom with true', () => { +// peerConnection.toggleLockRoom = jest.fn(); - handleSocketUserEnter(peerConnection, TEST_PAYLOAD); +// handleSocketUserEnter(peerConnection, TEST_PAYLOAD); - expect(peerConnection.toggleLockRoom).toBeCalledWith(true); - }); +// expect(peerConnection.toggleLockRoom).toBeCalledWith(true); +// }); - it('should call emitUserEnter with true', () => { - peerConnection.emitUserEnter = jest.fn(); +// it('should call emitUserEnter with true', () => { +// peerConnection.emitUserEnter = jest.fn(); - handleSocketUserEnter(peerConnection, TEST_PAYLOAD); +// handleSocketUserEnter(peerConnection, TEST_PAYLOAD); - expect(peerConnection.emitUserEnter).toBeCalled(); - }); - }); -}); +// expect(peerConnection.emitUserEnter).toBeCalled(); +// }); +// }); +// }); diff --git a/app/features/PeerConnection/handleSocketUserExit.spec.ts b/app/features/PeerConnection/handleSocketUserExit.spec.ts index b3686f8..1b00606 100644 --- a/app/features/PeerConnection/handleSocketUserExit.spec.ts +++ b/app/features/PeerConnection/handleSocketUserExit.spec.ts @@ -1,57 +1,57 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -import { - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, -} from './mocks/testVars'; -import PeerConnection from '.'; -import RoomIDService from '../../server/RoomIDService'; -import ConnectedDevicesService from '../ConnectedDevicesService'; -import SharingSessionService from '../SharingSessionService'; -import handleSocketUserExit from './handleSocketUserExit'; -import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; +// /* eslint-disable @typescript-eslint/no-explicit-any */ +// /* eslint-disable @typescript-eslint/ban-ts-comment */ +// import { +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// } from './mocks/testVars'; +// import PeerConnection from '.'; +// import RoomIDService from '../../server/RoomIDService'; +// import ConnectedDevicesService from '../ConnectedDevicesService'; +// import SharingSessionService from '../SharingSessionService'; +// import handleSocketUserExit from './handleSocketUserExit'; +// import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; -jest.useFakeTimers(); +// jest.useFakeTimers(); -jest.mock('simple-peer'); +// jest.mock('simple-peer'); -describe('handleSocketUserExit callback', () => { - let peerConnection: PeerConnection; +// describe('handleSocketUserExit callback', () => { +// let peerConnection: PeerConnection; - beforeEach(() => { - // @ts-ignore - peerConnection = new PeerConnection( - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, - {} as RoomIDService, - {} as ConnectedDevicesService, - {} as SharingSessionService, - {} as DesktopCapturerSourcesService - ); - peerConnection.socket = ({ - on: jest.fn(), - removeAllListeners: jest.fn(), - } as unknown) as SocketIOClient.Socket; - }); +// beforeEach(() => { +// // @ts-ignore +// peerConnection = new PeerConnection( +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// {} as RoomIDService, +// {} as ConnectedDevicesService, +// {} as SharingSessionService, +// {} as DesktopCapturerSourcesService +// ); +// peerConnection.socket = ({ +// on: jest.fn(), +// removeAllListeners: jest.fn(), +// } as unknown) as SocketIOClient.Socket; +// }); - afterEach(() => { - jest.clearAllMocks(); - jest.restoreAllMocks(); - }); +// afterEach(() => { +// jest.clearAllMocks(); +// jest.restoreAllMocks(); +// }); - describe('when handleSocketUserExit called properly', () => { - it('should call toggleLockRoom and selfDestroy', () => { - peerConnection.isSocketRoomLocked = true; - peerConnection.isCallStarted = true; - peerConnection.toggleLockRoom = jest.fn(); - peerConnection.selfDestroy = jest.fn(); +// describe('when handleSocketUserExit called properly', () => { +// it('should call toggleLockRoom and selfDestroy', () => { +// peerConnection.isSocketRoomLocked = true; +// peerConnection.isCallStarted = true; +// peerConnection.toggleLockRoom = jest.fn(); +// peerConnection.selfDestroy = jest.fn(); - handleSocketUserExit(peerConnection); +// handleSocketUserExit(peerConnection); - expect(peerConnection.toggleLockRoom).toBeCalledWith(false); - expect(peerConnection.selfDestroy).toBeCalled(); - }); - }); -}); +// expect(peerConnection.toggleLockRoom).toBeCalledWith(false); +// expect(peerConnection.selfDestroy).toBeCalled(); +// }); +// }); +// }); diff --git a/app/features/PeerConnection/index.spec.ts b/app/features/PeerConnection/index.spec.ts index 0605276..dc380da 100644 --- a/app/features/PeerConnection/index.spec.ts +++ b/app/features/PeerConnection/index.spec.ts @@ -1,445 +1,445 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -import { ipcRenderer } from 'electron'; -import PeerConnection from '.'; -import RoomIDService from '../../server/RoomIDService'; -import ConnectedDevicesService from '../ConnectedDevicesService'; -import SharingSessionService from '../SharingSessionService'; -import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; -import { - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, -} from './mocks/testVars'; -import setDisplaySizeFromLocalStream from './handleSetDisplaySizeFromLocalStream'; -import handleSelfDestroy from './handleSelfDestroy'; -import handleRecieveEncryptedMessage from './handleRecieveEncryptedMessage'; -import handleCreatePeer from './handleCreatePeer'; -import { prepare as prepareMessage } from '../../utils/message'; -import getAppLanguage from '../../utils/getAppLanguage'; -import getAppTheme from '../../utils/getAppTheme'; - -jest.useFakeTimers(); - -jest.mock('simple-peer'); -const TEST_SOURCE_DISPLAY_SIZE = { - width: 640, - height: 480, -}; -const TEST_DATA_TO_SEND_IN_ENCRYPTED_MESSAGE = 'oji23oi12p34'; -jest.mock('electron', () => { - return { - ipcRenderer: { - invoke: jest.fn().mockImplementation(() => { - return TEST_SOURCE_DISPLAY_SIZE; - }), - }, - }; -}); -jest.mock('./handleSetDisplaySizeFromLocalStream'); -jest.mock('./handleSelfDestroy'); -jest.mock('../../utils/message', () => { - return { - prepare: jest.fn().mockReturnValue({ - toSend: TEST_DATA_TO_SEND_IN_ENCRYPTED_MESSAGE, - }), - }; -}); -jest.mock('./handleRecieveEncryptedMessage'); -jest.mock('./handleCreatePeer'); - -const TEST_DISPLAY_ID = '21'; - -describe('PeerConnection index.ts tests', () => { - let peerConnection: PeerConnection; - const mockGetSourceDisplayIDBySourceID = jest.fn().mockImplementation(() => { - return TEST_DISPLAY_ID; - }); - - beforeEach(() => { - peerConnection = new PeerConnection( - TEST_ROOM_ID, - TEST_SHARING_SESSION_ID, - TEST_USER, - {} as RoomIDService, - {} as ConnectedDevicesService, - {} as SharingSessionService, - ({} as unknown) as DesktopCapturerSourcesService - ); - peerConnection.displayID = 'screen:123idid'; - }); - - afterEach(() => { - jest.clearAllMocks(); - jest.restoreAllMocks(); - }); - - describe('when PeerConnection constructor was called', () => { - it('should be created with internal properties correclty', () => { - expect(peerConnection.roomIDService).toBeDefined(); - expect(peerConnection.connectedDevicesService).toBeDefined(); - expect(peerConnection.sharingSessionService).toBeDefined(); - }); - - describe('when notifyClientWithNewLanguage was called', () => { - it('should call sendEncryptedMessage with proper payload', () => { - peerConnection.sendEncryptedMessage = jest.fn(); - - peerConnection.notifyClientWithNewLanguage(); - - expect(peerConnection.sendEncryptedMessage).toBeCalledWith({ - type: 'APP_LANGUAGE', - payload: { value: getAppLanguage() }, - }); - }); - }); - - describe('when notifyClientWithNewColorTheme was called', () => { - it('should call sendEncryptedMessage with proper payload', () => { - peerConnection.sendEncryptedMessage = jest.fn(); - - peerConnection.notifyClientWithNewColorTheme(); - - expect(peerConnection.sendEncryptedMessage).toBeCalledWith({ - type: 'APP_THEME', - payload: { value: getAppTheme() }, - }); - }); - }); - - describe('when setDesktopCapturerSourceID was called', () => { - it('should set .desktopCapturerSourceID and call other callbacks', () => { - const testSourceID = 'screen:asdfsffs1234'; - process.env.RUN_MODE = 'dev'; - peerConnection.setDisplayIDByDesktopCapturerSourceID = jest.fn(); - peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet = jest.fn(); - - peerConnection.setDesktopCapturerSourceID(testSourceID); - - process.env.RUN_MODE = 'test'; - expect(peerConnection.desktopCapturerSourceID).toBe(testSourceID); - expect( - peerConnection.setDisplayIDByDesktopCapturerSourceID - ).toBeCalled(); - expect( - peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet - ).toBeCalled(); - }); - }); - - describe('when setDisplayIDByDesktopCapturerSourceID was called', () => { - describe('when desktopCapture source id is screen', () => { - it('should set .desktopCapturerSourceID and call other callbacks', () => { - peerConnection.desktopCapturerSourceID = 'screen:asdfa2'; - peerConnection.setDisplaySizeRetreivedFromMainProcess = jest.fn(); - peerConnection.desktopCapturerSourcesService = ({ - getSourceDisplayIDBySourceID: mockGetSourceDisplayIDBySourceID, - } as unknown) as DesktopCapturerSourcesService; - - peerConnection.setDisplayIDByDesktopCapturerSourceID(); - - expect( - peerConnection.setDisplaySizeRetreivedFromMainProcess - ).toBeCalled(); - expect(mockGetSourceDisplayIDBySourceID).toBeCalled(); - expect(peerConnection.displayID).toBe(TEST_DISPLAY_ID); - }); - }); - - describe('when desktopCapture source id is window', () => { - it('should not set anything', () => { - peerConnection.desktopCapturerSourceID = 'window:asdfa2'; - peerConnection.setDisplaySizeRetreivedFromMainProcess = jest.fn(); - peerConnection.desktopCapturerSourcesService = ({ - getSourceDisplayIDBySourceID: mockGetSourceDisplayIDBySourceID, - } as unknown) as DesktopCapturerSourcesService; - - peerConnection.setDisplayIDByDesktopCapturerSourceID(); - - expect( - peerConnection.setDisplaySizeRetreivedFromMainProcess - ).not.toBeCalled(); - expect(mockGetSourceDisplayIDBySourceID).not.toBeCalled(); - expect(peerConnection.displayID).not.toBe(TEST_DISPLAY_ID); - }); - }); - }); - - describe('when setDisplaySizeRetreivedFromMainProcess was called', () => { - it('should call .invoke on ipcRenderer with proper parameters', async () => { - await peerConnection.setDisplaySizeRetreivedFromMainProcess(); - - expect(ipcRenderer.invoke).toBeCalledWith( - 'get-display-size-by-display-id', - peerConnection.displayID - ); - expect(peerConnection.sourceDisplaySize).toBe(TEST_SOURCE_DISPLAY_SIZE); - }); - - describe('when .invoke returned "undefined"', () => { - it('should not set sourceDisplaySize', async () => { - // @ts-ignore - ipcRenderer.invoke.mockImplementation(() => { - return 'undefined'; - }); - - await peerConnection.setDisplaySizeRetreivedFromMainProcess(); - - expect(ipcRenderer.invoke).toBeCalledWith( - 'get-display-size-by-display-id', - peerConnection.displayID - ); - expect(peerConnection.sourceDisplaySize).not.toBe( - TEST_SOURCE_DISPLAY_SIZE - ); - }); - }); - }); - - describe('when handleCreatePeerAfterDesktopCapturerSourceIDWasSet was called', () => { - describe('when .sourceDisplaySize is defined', () => { - it('should call setDisplaySizeFromLocalStream', async () => { - peerConnection.createPeer = jest.fn(); - peerConnection.sourceDisplaySize = TEST_SOURCE_DISPLAY_SIZE; - - await peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet(); - - expect(peerConnection.createPeer).toBeCalled(); - expect(setDisplaySizeFromLocalStream).not.toBeCalled(); - }); - }); - - describe('when .sourceDisplaySize is NOT defined', () => { - it('should call setDisplaySizeFromLocalStream', async () => { - peerConnection.createPeer = jest.fn(); - - await peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet(); - - expect(peerConnection.createPeer).toBeCalled(); - expect(setDisplaySizeFromLocalStream).toBeCalled(); - }); - }); - }); - - describe('when setOnDeviceConnectedCallback was called properly', () => { - it('should set onDeviceConnectedCallback', () => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const testCallback = (_: Device) => {}; - peerConnection.setOnDeviceConnectedCallback(testCallback); - - expect(peerConnection.onDeviceConnectedCallback).toBe(testCallback); - }); - }); - - describe('when denyConnectionForPartner was called properly', () => { - it('should call sendEncryptedMessage with proper payload and call .disconnectPartner', async () => { - const testPayload = { - type: 'DENY_TO_CONNECT', - payload: {}, - }; - peerConnection.sendEncryptedMessage = jest.fn(); - peerConnection.disconnectPartner = jest.fn(); - - await peerConnection.denyConnectionForPartner(); - - expect(peerConnection.sendEncryptedMessage).toBeCalledWith(testPayload); - expect(peerConnection.disconnectPartner).toBeCalled(); - }); - }); - - describe('when sendUserAllowedToConnect was called properly', () => { - it('should call sendEncryptedMessage with proper payload', () => { - const testPayload = { - type: 'ALLOWED_TO_CONNECT', - payload: {}, - }; - peerConnection.sendEncryptedMessage = jest.fn(); - - peerConnection.sendUserAllowedToConnect(); - - expect(peerConnection.sendEncryptedMessage).toBeCalledWith(testPayload); - }); - }); - - describe('when disconnectByHostMachineUser was called properly', () => { - it('should call sendEncryptedMessage with proper payload and call .disconnectPartner and .selfDestroy', async () => { - const testPayload = { - type: 'DISCONNECT_BY_HOST_MACHINE_USER', - payload: {}, - }; - peerConnection.sendEncryptedMessage = jest.fn(); - peerConnection.disconnectPartner = jest.fn(); - peerConnection.selfDestroy = jest.fn(); - - await peerConnection.disconnectByHostMachineUser(); - - expect(peerConnection.sendEncryptedMessage).toBeCalledWith(testPayload); - expect(peerConnection.disconnectPartner).toBeCalled(); - expect(peerConnection.selfDestroy).toBeCalled(); - }); - }); - - describe('when disconnectPartner was called properly', () => { - it('should call sendEncryptedMessage with proper payload', () => { - const testEmitData = { - ip: peerConnection.partnerDeviceDetails.deviceIP, - }; - peerConnection.socket = ({ - emit: jest.fn(), - } as unknown) as SocketIOClient.Socket; - - peerConnection.disconnectPartner(); - - expect(peerConnection.socket.emit).toBeCalledWith( - 'DISCONNECT_SOCKET_BY_DEVICE_IP', - testEmitData - ); - expect(peerConnection.partnerDeviceDetails).toEqual({}); - }); - }); - - describe('when selfDestroy was called', () => { - it('should call handleSelfDestroy', () => { - peerConnection.selfDestroy(); - - expect(handleSelfDestroy).toBeCalled(); - }); - }); - - describe('when emitUserEnter was called', () => { - describe('when .socket is defined', () => { - it('should call socket emit with proper parameters', () => { - const testEmitData = { - username: peerConnection.user.username, - publicKey: peerConnection.user.publicKey, - }; - peerConnection.socket = ({ - emit: jest.fn(), - } as unknown) as SocketIOClient.Socket; - - peerConnection.emitUserEnter(); - - expect(peerConnection.socket.emit).toBeCalledWith( - 'USER_ENTER', - testEmitData - ); - }); - }); - }); - - describe('when sendEncryptedMessage was called', () => { - describe('when it was NOT called properly', () => { - it('should not call "prepare" from message.ts if socket is not defined', () => { - peerConnection.socket = (undefined as unknown) as SocketIOClient.Socket; - - peerConnection.sendEncryptedMessage( - ({} as unknown) as SendEncryptedMessagePayload - ); - - expect(prepareMessage).not.toBeCalled(); - }); - - it('should not call "prepare" from message.ts if user is not defined', () => { - peerConnection.user = (undefined as unknown) as LocalPeerUser; - - peerConnection.sendEncryptedMessage( - ({} as unknown) as SendEncryptedMessagePayload - ); - - expect(prepareMessage).not.toBeCalled(); - }); - - it('should not call "prepare" from message.ts if partner is not defined', () => { - peerConnection.partner = (undefined as unknown) as LocalPeerUser; - - peerConnection.sendEncryptedMessage( - ({} as unknown) as SendEncryptedMessagePayload - ); - - expect(prepareMessage).not.toBeCalled(); - }); - }); - - describe('when it was called properly', () => { - it('should call "prepare" from message.ts and .socket.emit(ENCRYPTED_MESSAGE', async () => { - const testPayload = ({} as unknown) as SendEncryptedMessagePayload; - peerConnection.socket = ({ - emit: jest.fn(), - } as unknown) as SocketIOClient.Socket; - peerConnection.partner = TEST_USER; - - await peerConnection.sendEncryptedMessage(testPayload); - - expect(prepareMessage).toBeCalledWith( - testPayload, - TEST_USER, - TEST_USER - ); - expect(peerConnection.socket.emit).toBeCalledWith( - 'ENCRYPTED_MESSAGE', - TEST_DATA_TO_SEND_IN_ENCRYPTED_MESSAGE - ); - }); - }); - }); - - describe('when receiveEncryptedMessage was called', () => { - describe('when peerConnection user is NOT defined', () => { - it('should NOT call handleRecieveEncryptedMessage', () => { - const testPayload = {} as ReceiveEncryptedMessagePayload; - peerConnection.user = (undefined as unknown) as LocalPeerUser; - - peerConnection.receiveEncryptedMessage(testPayload); - - expect(handleRecieveEncryptedMessage).not.toBeCalled(); - }); - }); - - describe('when peerConnection user is defined', () => { - it('should call handleRecieveEncryptedMessage', () => { - const testPayload = {} as ReceiveEncryptedMessagePayload; - - peerConnection.receiveEncryptedMessage(testPayload); - - expect(handleRecieveEncryptedMessage).toBeCalled(); - }); - }); - }); - - describe('when callPeer was called', () => { - describe('when it was called when call already started', () => { - it('should NOT call .sendEncryptedMessage', () => { - process.env.RUN_MODE = 'dev'; - peerConnection.isCallStarted = true; - peerConnection.sendEncryptedMessage = jest.fn(); - peerConnection.signalsDataToCallUser = ['asdfasdf']; - - peerConnection.callPeer(); - - process.env.RUN_MODE = 'test'; - expect(peerConnection.sendEncryptedMessage).not.toBeCalled(); - }); - }); - - describe('when it was called when call NOT started', () => { - it('should call .sendEncryptedMessage', () => { - process.env.RUN_MODE = 'dev'; - peerConnection.sendEncryptedMessage = jest.fn(); - peerConnection.signalsDataToCallUser = ['asdfasdf']; - - peerConnection.callPeer(); - - process.env.RUN_MODE = 'test'; - expect(peerConnection.sendEncryptedMessage).toBeCalled(); - }); - }); - }); - - describe('when createPeer was called', () => { - it('should call handleCreatePeer callback', () => { - peerConnection.createPeer(); - - expect(handleCreatePeer).toBeCalled(); - }); - }); - }); -}); +// /* eslint-disable @typescript-eslint/ban-ts-comment */ +// import { ipcRenderer } from 'electron'; +// import PeerConnection from '.'; +// import RoomIDService from '../../server/RoomIDService'; +// import ConnectedDevicesService from '../ConnectedDevicesService'; +// import SharingSessionService from '../SharingSessionService'; +// import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; +// import { +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// } from './mocks/testVars'; +// import setDisplaySizeFromLocalStream from './handleSetDisplaySizeFromLocalStream'; +// import handleSelfDestroy from './handleSelfDestroy'; +// import handleRecieveEncryptedMessage from './handleRecieveEncryptedMessage'; +// import handleCreatePeer from './handleCreatePeer'; +// import { prepare as prepareMessage } from '../../utils/message'; +// import getAppLanguage from '../../utils/getAppLanguage'; +// import getAppTheme from '../../utils/getAppTheme'; + +// jest.useFakeTimers(); + +// jest.mock('simple-peer'); +// const TEST_SOURCE_DISPLAY_SIZE = { +// width: 640, +// height: 480, +// }; +// const TEST_DATA_TO_SEND_IN_ENCRYPTED_MESSAGE = 'oji23oi12p34'; +// jest.mock('electron', () => { +// return { +// ipcRenderer: { +// invoke: jest.fn().mockImplementation(() => { +// return TEST_SOURCE_DISPLAY_SIZE; +// }), +// }, +// }; +// }); +// jest.mock('./handleSetDisplaySizeFromLocalStream'); +// jest.mock('./handleSelfDestroy'); +// jest.mock('../../utils/message', () => { +// return { +// prepare: jest.fn().mockReturnValue({ +// toSend: TEST_DATA_TO_SEND_IN_ENCRYPTED_MESSAGE, +// }), +// }; +// }); +// jest.mock('./handleRecieveEncryptedMessage'); +// jest.mock('./handleCreatePeer'); + +// const TEST_DISPLAY_ID = '21'; + +// describe('PeerConnection index.ts tests', () => { +// let peerConnection: PeerConnection; +// const mockGetSourceDisplayIDBySourceID = jest.fn().mockImplementation(() => { +// return TEST_DISPLAY_ID; +// }); + +// beforeEach(() => { +// peerConnection = new PeerConnection( +// TEST_ROOM_ID, +// TEST_SHARING_SESSION_ID, +// TEST_USER, +// {} as RoomIDService, +// {} as ConnectedDevicesService, +// {} as SharingSessionService, +// ({} as unknown) as DesktopCapturerSourcesService +// ); +// peerConnection.displayID = 'screen:123idid'; +// }); + +// afterEach(() => { +// jest.clearAllMocks(); +// jest.restoreAllMocks(); +// }); + +// describe('when PeerConnection constructor was called', () => { +// it('should be created with internal properties correclty', () => { +// expect(peerConnection.roomIDService).toBeDefined(); +// expect(peerConnection.connectedDevicesService).toBeDefined(); +// expect(peerConnection.sharingSessionService).toBeDefined(); +// }); + +// describe('when notifyClientWithNewLanguage was called', () => { +// it('should call sendEncryptedMessage with proper payload', () => { +// peerConnection.sendEncryptedMessage = jest.fn(); + +// peerConnection.notifyClientWithNewLanguage(); + +// expect(peerConnection.sendEncryptedMessage).toBeCalledWith({ +// type: 'APP_LANGUAGE', +// payload: { value: getAppLanguage() }, +// }); +// }); +// }); + +// describe('when notifyClientWithNewColorTheme was called', () => { +// it('should call sendEncryptedMessage with proper payload', () => { +// peerConnection.sendEncryptedMessage = jest.fn(); + +// peerConnection.notifyClientWithNewColorTheme(); + +// expect(peerConnection.sendEncryptedMessage).toBeCalledWith({ +// type: 'APP_THEME', +// payload: { value: getAppTheme() }, +// }); +// }); +// }); + +// describe('when setDesktopCapturerSourceID was called', () => { +// it('should set .desktopCapturerSourceID and call other callbacks', () => { +// const testSourceID = 'screen:asdfsffs1234'; +// process.env.RUN_MODE = 'dev'; +// peerConnection.setDisplayIDByDesktopCapturerSourceID = jest.fn(); +// peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet = jest.fn(); + +// peerConnection.setDesktopCapturerSourceID(testSourceID); + +// process.env.RUN_MODE = 'test'; +// expect(peerConnection.desktopCapturerSourceID).toBe(testSourceID); +// expect( +// peerConnection.setDisplayIDByDesktopCapturerSourceID +// ).toBeCalled(); +// expect( +// peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet +// ).toBeCalled(); +// }); +// }); + +// describe('when setDisplayIDByDesktopCapturerSourceID was called', () => { +// describe('when desktopCapture source id is screen', () => { +// it('should set .desktopCapturerSourceID and call other callbacks', () => { +// peerConnection.desktopCapturerSourceID = 'screen:asdfa2'; +// peerConnection.setDisplaySizeRetreivedFromMainProcess = jest.fn(); +// peerConnection.desktopCapturerSourcesService = ({ +// getSourceDisplayIDBySourceID: mockGetSourceDisplayIDBySourceID, +// } as unknown) as DesktopCapturerSourcesService; + +// peerConnection.setDisplayIDByDesktopCapturerSourceID(); + +// expect( +// peerConnection.setDisplaySizeRetreivedFromMainProcess +// ).toBeCalled(); +// expect(mockGetSourceDisplayIDBySourceID).toBeCalled(); +// expect(peerConnection.displayID).toBe(TEST_DISPLAY_ID); +// }); +// }); + +// describe('when desktopCapture source id is window', () => { +// it('should not set anything', () => { +// peerConnection.desktopCapturerSourceID = 'window:asdfa2'; +// peerConnection.setDisplaySizeRetreivedFromMainProcess = jest.fn(); +// peerConnection.desktopCapturerSourcesService = ({ +// getSourceDisplayIDBySourceID: mockGetSourceDisplayIDBySourceID, +// } as unknown) as DesktopCapturerSourcesService; + +// peerConnection.setDisplayIDByDesktopCapturerSourceID(); + +// expect( +// peerConnection.setDisplaySizeRetreivedFromMainProcess +// ).not.toBeCalled(); +// expect(mockGetSourceDisplayIDBySourceID).not.toBeCalled(); +// expect(peerConnection.displayID).not.toBe(TEST_DISPLAY_ID); +// }); +// }); +// }); + +// describe('when setDisplaySizeRetreivedFromMainProcess was called', () => { +// it('should call .invoke on ipcRenderer with proper parameters', async () => { +// await peerConnection.setDisplaySizeRetreivedFromMainProcess(); + +// expect(ipcRenderer.invoke).toBeCalledWith( +// 'get-display-size-by-display-id', +// peerConnection.displayID +// ); +// expect(peerConnection.sourceDisplaySize).toBe(TEST_SOURCE_DISPLAY_SIZE); +// }); + +// describe('when .invoke returned "undefined"', () => { +// it('should not set sourceDisplaySize', async () => { +// // @ts-ignore +// ipcRenderer.invoke.mockImplementation(() => { +// return 'undefined'; +// }); + +// await peerConnection.setDisplaySizeRetreivedFromMainProcess(); + +// expect(ipcRenderer.invoke).toBeCalledWith( +// 'get-display-size-by-display-id', +// peerConnection.displayID +// ); +// expect(peerConnection.sourceDisplaySize).not.toBe( +// TEST_SOURCE_DISPLAY_SIZE +// ); +// }); +// }); +// }); + +// describe('when handleCreatePeerAfterDesktopCapturerSourceIDWasSet was called', () => { +// describe('when .sourceDisplaySize is defined', () => { +// it('should call setDisplaySizeFromLocalStream', async () => { +// peerConnection.createPeer = jest.fn(); +// peerConnection.sourceDisplaySize = TEST_SOURCE_DISPLAY_SIZE; + +// await peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet(); + +// expect(peerConnection.createPeer).toBeCalled(); +// expect(setDisplaySizeFromLocalStream).not.toBeCalled(); +// }); +// }); + +// describe('when .sourceDisplaySize is NOT defined', () => { +// it('should call setDisplaySizeFromLocalStream', async () => { +// peerConnection.createPeer = jest.fn(); + +// await peerConnection.handleCreatePeerAfterDesktopCapturerSourceIDWasSet(); + +// expect(peerConnection.createPeer).toBeCalled(); +// expect(setDisplaySizeFromLocalStream).toBeCalled(); +// }); +// }); +// }); + +// describe('when setOnDeviceConnectedCallback was called properly', () => { +// it('should set onDeviceConnectedCallback', () => { +// // eslint-disable-next-line @typescript-eslint/no-unused-vars +// const testCallback = (_: Device) => {}; +// peerConnection.setOnDeviceConnectedCallback(testCallback); + +// expect(peerConnection.onDeviceConnectedCallback).toBe(testCallback); +// }); +// }); + +// describe('when denyConnectionForPartner was called properly', () => { +// it('should call sendEncryptedMessage with proper payload and call .disconnectPartner', async () => { +// const testPayload = { +// type: 'DENY_TO_CONNECT', +// payload: {}, +// }; +// peerConnection.sendEncryptedMessage = jest.fn(); +// peerConnection.disconnectPartner = jest.fn(); + +// await peerConnection.denyConnectionForPartner(); + +// expect(peerConnection.sendEncryptedMessage).toBeCalledWith(testPayload); +// expect(peerConnection.disconnectPartner).toBeCalled(); +// }); +// }); + +// describe('when sendUserAllowedToConnect was called properly', () => { +// it('should call sendEncryptedMessage with proper payload', () => { +// const testPayload = { +// type: 'ALLOWED_TO_CONNECT', +// payload: {}, +// }; +// peerConnection.sendEncryptedMessage = jest.fn(); + +// peerConnection.sendUserAllowedToConnect(); + +// expect(peerConnection.sendEncryptedMessage).toBeCalledWith(testPayload); +// }); +// }); + +// describe('when disconnectByHostMachineUser was called properly', () => { +// it('should call sendEncryptedMessage with proper payload and call .disconnectPartner and .selfDestroy', async () => { +// const testPayload = { +// type: 'DISCONNECT_BY_HOST_MACHINE_USER', +// payload: {}, +// }; +// peerConnection.sendEncryptedMessage = jest.fn(); +// peerConnection.disconnectPartner = jest.fn(); +// peerConnection.selfDestroy = jest.fn(); + +// await peerConnection.disconnectByHostMachineUser(); + +// expect(peerConnection.sendEncryptedMessage).toBeCalledWith(testPayload); +// expect(peerConnection.disconnectPartner).toBeCalled(); +// expect(peerConnection.selfDestroy).toBeCalled(); +// }); +// }); + +// describe('when disconnectPartner was called properly', () => { +// it('should call sendEncryptedMessage with proper payload', () => { +// const testEmitData = { +// ip: peerConnection.partnerDeviceDetails.deviceIP, +// }; +// peerConnection.socket = ({ +// emit: jest.fn(), +// } as unknown) as SocketIOClient.Socket; + +// peerConnection.disconnectPartner(); + +// expect(peerConnection.socket.emit).toBeCalledWith( +// 'DISCONNECT_SOCKET_BY_DEVICE_IP', +// testEmitData +// ); +// expect(peerConnection.partnerDeviceDetails).toEqual({}); +// }); +// }); + +// describe('when selfDestroy was called', () => { +// it('should call handleSelfDestroy', () => { +// peerConnection.selfDestroy(); + +// expect(handleSelfDestroy).toBeCalled(); +// }); +// }); + +// describe('when emitUserEnter was called', () => { +// describe('when .socket is defined', () => { +// it('should call socket emit with proper parameters', () => { +// const testEmitData = { +// username: peerConnection.user.username, +// publicKey: peerConnection.user.publicKey, +// }; +// peerConnection.socket = ({ +// emit: jest.fn(), +// } as unknown) as SocketIOClient.Socket; + +// peerConnection.emitUserEnter(); + +// expect(peerConnection.socket.emit).toBeCalledWith( +// 'USER_ENTER', +// testEmitData +// ); +// }); +// }); +// }); + +// describe('when sendEncryptedMessage was called', () => { +// describe('when it was NOT called properly', () => { +// it('should not call "prepare" from message.ts if socket is not defined', () => { +// peerConnection.socket = (undefined as unknown) as SocketIOClient.Socket; + +// peerConnection.sendEncryptedMessage( +// ({} as unknown) as SendEncryptedMessagePayload +// ); + +// expect(prepareMessage).not.toBeCalled(); +// }); + +// it('should not call "prepare" from message.ts if user is not defined', () => { +// peerConnection.user = (undefined as unknown) as LocalPeerUser; + +// peerConnection.sendEncryptedMessage( +// ({} as unknown) as SendEncryptedMessagePayload +// ); + +// expect(prepareMessage).not.toBeCalled(); +// }); + +// it('should not call "prepare" from message.ts if partner is not defined', () => { +// peerConnection.partner = (undefined as unknown) as LocalPeerUser; + +// peerConnection.sendEncryptedMessage( +// ({} as unknown) as SendEncryptedMessagePayload +// ); + +// expect(prepareMessage).not.toBeCalled(); +// }); +// }); + +// describe('when it was called properly', () => { +// it('should call "prepare" from message.ts and .socket.emit(ENCRYPTED_MESSAGE', async () => { +// const testPayload = ({} as unknown) as SendEncryptedMessagePayload; +// peerConnection.socket = ({ +// emit: jest.fn(), +// } as unknown) as SocketIOClient.Socket; +// peerConnection.partner = TEST_USER; + +// await peerConnection.sendEncryptedMessage(testPayload); + +// expect(prepareMessage).toBeCalledWith( +// testPayload, +// TEST_USER, +// TEST_USER +// ); +// expect(peerConnection.socket.emit).toBeCalledWith( +// 'ENCRYPTED_MESSAGE', +// TEST_DATA_TO_SEND_IN_ENCRYPTED_MESSAGE +// ); +// }); +// }); +// }); + +// describe('when receiveEncryptedMessage was called', () => { +// describe('when peerConnection user is NOT defined', () => { +// it('should NOT call handleRecieveEncryptedMessage', () => { +// const testPayload = {} as ReceiveEncryptedMessagePayload; +// peerConnection.user = (undefined as unknown) as LocalPeerUser; + +// peerConnection.receiveEncryptedMessage(testPayload); + +// expect(handleRecieveEncryptedMessage).not.toBeCalled(); +// }); +// }); + +// describe('when peerConnection user is defined', () => { +// it('should call handleRecieveEncryptedMessage', () => { +// const testPayload = {} as ReceiveEncryptedMessagePayload; + +// peerConnection.receiveEncryptedMessage(testPayload); + +// expect(handleRecieveEncryptedMessage).toBeCalled(); +// }); +// }); +// }); + +// describe('when callPeer was called', () => { +// describe('when it was called when call already started', () => { +// it('should NOT call .sendEncryptedMessage', () => { +// process.env.RUN_MODE = 'dev'; +// peerConnection.isCallStarted = true; +// peerConnection.sendEncryptedMessage = jest.fn(); +// peerConnection.signalsDataToCallUser = ['asdfasdf']; + +// peerConnection.callPeer(); + +// process.env.RUN_MODE = 'test'; +// expect(peerConnection.sendEncryptedMessage).not.toBeCalled(); +// }); +// }); + +// describe('when it was called when call NOT started', () => { +// it('should call .sendEncryptedMessage', () => { +// process.env.RUN_MODE = 'dev'; +// peerConnection.sendEncryptedMessage = jest.fn(); +// peerConnection.signalsDataToCallUser = ['asdfasdf']; + +// peerConnection.callPeer(); + +// process.env.RUN_MODE = 'test'; +// expect(peerConnection.sendEncryptedMessage).toBeCalled(); +// }); +// }); +// }); + +// describe('when createPeer was called', () => { +// it('should call handleCreatePeer callback', () => { +// peerConnection.createPeer(); + +// expect(handleCreatePeer).toBeCalled(); +// }); +// }); +// }); +// }); diff --git a/app/features/PeerConnection/index.ts b/app/features/PeerConnection/index.ts index f487aa5..14d6822 100644 --- a/app/features/PeerConnection/index.ts +++ b/app/features/PeerConnection/index.ts @@ -30,7 +30,16 @@ export default class PeerConnection { desktopCapturerSourceID: string; localStream: MediaStream | null; isSocketRoomLocked: boolean; - partnerDeviceDetails = {} as Device; + partnerDeviceDetails = { + id: '', + sharingSessionID: '', + deviceOS: '', + deviceType: '', + deviceIP: '', + deviceBrowser: '', + deviceScreenWidth: 0, + deviceScreenHeight: 0, + } as Device; signalsDataToCallUser: string[]; isCallStarted: boolean; onDeviceConnectedCallback: (device: Device) => void; @@ -141,7 +150,10 @@ export default class PeerConnection { }); } - async disconnectByHostMachineUser() { + async disconnectByHostMachineUser(deviceId: string) { + if (this.partnerDeviceDetails.id !== deviceId) { + return; + } await this.sendEncryptedMessage({ type: 'DISCONNECT_BY_HOST_MACHINE_USER', payload: {}, diff --git a/app/features/PeerConnectionHelperRendererService/index.ts b/app/features/PeerConnectionHelperRendererService/index.ts index 91fa6b9..7fcfadb 100644 --- a/app/features/PeerConnectionHelperRendererService/index.ts +++ b/app/features/PeerConnectionHelperRendererService/index.ts @@ -18,17 +18,6 @@ export default class RendererWebrtcHelpersService { helperRendererWindow = new BrowserWindow({ show: false, - // width: 300, - // height: 300, - // x: 2147483647, - // y: 2147483647, - // transparent: true, - // frame: false, - // // skipTaskbar: true, - // focusable: false, - // // parent: mainWindow, - // hasShadow: false, - // titleBarStyle: 'hidden', webPreferences: (process.env.NODE_ENV === 'development' || process.env.E2E_BUILD === 'true') && @@ -36,14 +25,12 @@ export default class RendererWebrtcHelpersService { ? { contextIsolation: true, nodeIntegration: true, - enableRemoteModule: true, } : { preload: path.join( this.appPath, 'dist/peerConnectionHelperRendererWindow.renderer.prod.js' ), - enableRemoteModule: true, }, }); diff --git a/app/features/SharingSessionService/SharingSession.ts b/app/features/SharingSessionService/SharingSession.ts index 6201053..c7a3786 100644 --- a/app/features/SharingSessionService/SharingSession.ts +++ b/app/features/SharingSessionService/SharingSession.ts @@ -95,7 +95,8 @@ export default class SharingSession { disconnectByHostMachineUser() { this.peerConnectionHelperRenderer?.webContents.send( - 'disconnect-by-host-machine-user' + 'disconnect-by-host-machine-user', + this.deviceID ); } diff --git a/app/main.dev.spec.ts b/app/main.dev.spec.ts index cf97944..1f9005f 100644 --- a/app/main.dev.spec.ts +++ b/app/main.dev.spec.ts @@ -1,820 +1,820 @@ -/* 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 TEST_CONNECTED_DEVICES_SERVICE = ({ - sdf: 'fda', -} as unknown) as ConnectedDevicesService; -const TEST_ROOM_ID_SERVICE = ({ - a223: '2g2g', -} as unknown) as ConnectedDevicesService; -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: 'ua', - }; -}); -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', - }; +// /* 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 TEST_CONNECTED_DEVICES_SERVICE = ({ +// sdf: 'fda', +// } as unknown) as ConnectedDevicesService; +// const TEST_ROOM_ID_SERVICE = ({ +// a223: '2g2g', +// } as unknown) as ConnectedDevicesService; +// 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: 'ua', +// }; +// }); +// 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(); +// testApp.initElectronAppObject(); - // @ts-ignore - const callback = app.on.mock.calls[0][1]; - callback(); - - expect(app.quit).toBeCalled(); +// // @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; - }); - }); +// // @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', - }; +// 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(); +// 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'; +// // @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 - ); - }); - }); -}); +// 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 +// ); +// }); +// }); +// }); diff --git a/app/main/IpcEvents.enum.ts b/app/main/IpcEvents.enum.ts index 3bf9703..1031d9b 100644 --- a/app/main/IpcEvents.enum.ts +++ b/app/main/IpcEvents.enum.ts @@ -26,4 +26,5 @@ export enum IpcEvents { SetAppStartedOnce = 'set-app-started-once', GetIsAppDarkTheme = 'get-is-app-dark-theme', SetIsAppDarkTheme = 'set-is-app-dark-theme', + DestroySharingSessionById = 'destroy-sharing-session-by-id', } diff --git a/app/main/ipcMainHandlers.ts b/app/main/ipcMainHandlers.ts index 9c91aa6..d0dbdab 100644 --- a/app/main/ipcMainHandlers.ts +++ b/app/main/ipcMainHandlers.ts @@ -159,6 +159,11 @@ export default function initIpcMainHandlers( const sharingSession = getDeskreenGlobal().sharingSessionService.sharingSessions.get( sessionId ); + if (sharingSession) { + getDeskreenGlobal().connectedDevicesService.disconnectDeviceByID( + sharingSession.deviceID + ); + } sharingSession?.disconnectByHostMachineUser(); sharingSession?.destroy(); getDeskreenGlobal().sharingSessionService.sharingSessions.delete( @@ -320,4 +325,13 @@ export default function initIpcMainHandlers( } return 'en'; }); + + ipcMain.handle(IpcEvents.DestroySharingSessionById, (_, id) => { + const sharingSession = getDeskreenGlobal().sharingSessionService.sharingSessions.get( + id + ); + sharingSession?.setStatus(SharingSessionStatusEnum.DESTROYED); + sharingSession?.destroy(); + getDeskreenGlobal().sharingSessionService.sharingSessions.delete(id); + }); } diff --git a/app/menu.ts b/app/menu.ts index 34ba28a..b269202 100644 --- a/app/menu.ts +++ b/app/menu.ts @@ -215,12 +215,11 @@ export default class MenuBuilder { ], }; - // const subMenuView = - // process.env.NODE_ENV === 'development' || - // process.env.DEBUG_PROD === 'true' - // ? subMenuViewDev - // : subMenuViewProd; - const subMenuView = subMenuViewDev; + const subMenuView = + process.env.NODE_ENV === 'development' || + process.env.DEBUG_PROD === 'true' + ? subMenuViewDev + : subMenuViewProd; return [subMenuAbout, subMenuEdit, subMenuView, subMenuWindow, subMenuHelp]; } diff --git a/app/package.json b/app/package.json index 464ed6f..c99aea3 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "deskreen", "productName": "Deskreen", - "version": "1.0.12", + "version": "2.0.0", "description": "Deskreen turns any device into a secondary screen for your computer", "main": "./main.prod.js", "author": { diff --git a/app/peerConnectionHelperRendererWindowIndex.tsx b/app/peerConnectionHelperRendererWindowIndex.tsx index 2343615..428b70b 100644 --- a/app/peerConnectionHelperRendererWindowIndex.tsx +++ b/app/peerConnectionHelperRendererWindowIndex.tsx @@ -26,8 +26,8 @@ export function handleIpcRenderer() { peerConnection.callPeer(); }); - ipcRenderer.on('disconnect-by-host-machine-user', () => { - peerConnection.disconnectByHostMachineUser(); + ipcRenderer.on('disconnect-by-host-machine-user', (_, deviceId: string) => { + peerConnection.disconnectByHostMachineUser(deviceId); }); ipcRenderer.on('deny-connection-for-partner', () => { diff --git a/package.json b/package.json index 8d2dcd3..9afb26d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "deskreen", "productName": "Deskreen", - "version": "1.0.12", + "version": "2.0.0", "description": "Deskreen turns any device into a secondary screen for your computer", "scripts": { "build": "yarn build-client && yarn build-main && yarn build-renderer",