/* 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 handleCreatePeer from './handleCreatePeer'; import createDesktopCapturerStream from './createDesktopCapturerStream'; import NullSimplePeer from './NullSimplePeer'; import handlePeerOnData from './handlePeerOnData'; import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService'; jest.useFakeTimers(); jest.mock('simple-peer'); jest.mock('./createDesktopCapturerStream', () => { return jest.fn(); }); jest.mock('./handlePeerOnData'); const TEST_MOCK_LOCAL_STREAM = ({} as unknown) as MediaStream; function initPeerWithListeners(peerConnection: PeerConnection) { const listeners: any = {}; peerConnection.peer = ({ 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); }); } }, } as unknown) as typeof NullSimplePeer; } describe('handleCreatePeer callback', () => { let peerConnection: PeerConnection; beforeEach(() => { // @ts-ignore createDesktopCapturerStream.mockImplementation(() => { return new Promise((resolve) => resolve(TEST_MOCK_LOCAL_STREAM)); }); peerConnection = new PeerConnection( TEST_ROOM_ID, TEST_SHARING_SESSION_ID, TEST_USER, {} as RoomIDService, {} as ConnectedDevicesService, {} as SharingSessionService, {} as DesktopCapturerSourcesService ); }); afterEach(() => { jest.clearAllMocks(); jest.restoreAllMocks(); }); describe('when handleCreatePeer called properly', () => { it('should call createDesktopCapturerStream', async () => { await handleCreatePeer(peerConnection); expect(createDesktopCapturerStream).toBeCalled(); }); it('should make .peer defined', async () => { await handleCreatePeer(peerConnection); expect(peerConnection.peer).not.toEqual(NullSimplePeer); }); it('should add localStream to peer with addStream', async () => { peerConnection.localStream = TEST_MOCK_LOCAL_STREAM; await handleCreatePeer(peerConnection); expect(peerConnection.peer.addStream).toBeCalledWith( TEST_MOCK_LOCAL_STREAM ); }); it('should set .peer.on(signal event listner', async () => { await handleCreatePeer(peerConnection); expect(peerConnection.peer.on).toBeCalledWith( 'signal', expect.anything() ); }); it('should set .peer.on(data event listner', async () => { await handleCreatePeer(peerConnection); expect(peerConnection.peer.on).toBeCalledWith('data', expect.anything()); }); it('should resolve with undefined', async () => { const res = await handleCreatePeer(peerConnection); expect(res).toBe(undefined); }); describe('when peer on "signal" even occured', () => { it('should add signal to .signalsDataToCallUser', async () => { const TEST_SIGNAL_DATA = '1234'; initPeerWithListeners(peerConnection); await handleCreatePeer(peerConnection); peerConnection.peer.emit('signal', TEST_SIGNAL_DATA); expect(peerConnection.signalsDataToCallUser).toEqual([ TEST_SIGNAL_DATA, ]); }); }); describe('when peer on "data" even occured', () => { it('should add signal to .signalsDataToCallUser', async () => { const TEST_DATA = 'asdfasdfasdf'; initPeerWithListeners(peerConnection); await handleCreatePeer(peerConnection); peerConnection.peer.emit('data', TEST_DATA); expect(handlePeerOnData).toBeCalled(); }); }); }); });