1
0
mirror of https://github.com/pavlobu/deskreen.git synced 2025-05-18 08:20:10 -07:00
deskreen/app/features/PeerConnection/handleRecieveEncryptedMessage.spec.ts

202 lines
5.9 KiB
TypeScript

/* eslint-disable @typescript-eslint/ban-ts-comment */
import uuid from 'uuid';
import {
TEST_APP_LANGUAGE,
TEST_APP_THEME,
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 { process as processMessage } from '../../utils/message';
import NullSimplePeer from './NullSimplePeer';
import handleRecieveEncryptedMessage, {
handleDeviceIPMessage,
} from './handleRecieveEncryptedMessage';
import DesktopCapturerSourcesService from '../DesktopCapturerSourcesService';
jest.useFakeTimers();
jest.mock('simple-peer');
jest.mock('../../utils/message', () => {
return { process: jest.fn() };
});
jest.mock('uuid', () => {
return {
v4: () => '1234kdkd',
};
});
const TEST_DEVICE_DETAILS_PAYLOAD = {
socketID: '123',
deviceType: 'computer',
os: 'Windows',
browser: 'Chrome 72',
deviceScreenWidth: 640,
deviceScreenHeight: 480,
};
const TEST_DUMMY_ENCRYPTED_MESSAGE_PAYLOAD = ({
fromSocketID: '2411',
} as unknown) as ReceiveEncryptedMessagePayload;
describe('handleRecieveEncryptedMessage.ts', () => {
let peerConnection: PeerConnection;
beforeEach(() => {
peerConnection = new PeerConnection(
TEST_ROOM_ID,
TEST_SHARING_SESSION_ID,
TEST_USER,
TEST_APP_THEME,
TEST_APP_LANGUAGE,
{} as RoomIDService,
{} as ConnectedDevicesService,
{} as SharingSessionService,
{} as DesktopCapturerSourcesService
);
});
afterEach(() => {
jest.clearAllMocks();
jest.restoreAllMocks();
});
describe('when handleRecieveEncryptedMessage called properly', () => {
describe('when processed message type is CALL_ACCEPTED', () => {
it('should call peer.signal() with proper signal data', async () => {
const TEST_SIGNAL_DATA = 'a32sdlf';
// @ts-ignore
processMessage.mockImplementation(() => {
return {
type: 'CALL_ACCEPTED',
payload: {
signalData: TEST_SIGNAL_DATA,
},
};
});
peerConnection.peer = ({
signal: jest.fn(),
} as unknown) as typeof NullSimplePeer;
await handleRecieveEncryptedMessage(
peerConnection,
TEST_DUMMY_ENCRYPTED_MESSAGE_PAYLOAD
);
expect(peerConnection.peer.signal).toBeCalledWith(TEST_SIGNAL_DATA);
});
});
describe('when processed message type is DEVICE_DETAILS', () => {
it('should call socket.emit() to get partner device IP', async () => {
peerConnection.socket = ({
emit: jest.fn(),
} as unknown) as SocketIOClient.Socket;
// @ts-ignore
processMessage.mockImplementation(() => {
return {
type: 'DEVICE_DETAILS',
payload: TEST_DEVICE_DETAILS_PAYLOAD,
};
});
await handleRecieveEncryptedMessage(
peerConnection,
TEST_DUMMY_ENCRYPTED_MESSAGE_PAYLOAD
);
expect(peerConnection.socket.emit).toBeCalledWith(
'GET_IP_BY_SOCKET_ID',
expect.anything(),
expect.anything()
);
});
});
describe('when processed message type is GET_APP_THEME', () => {
it('should call .sendEncryptedMessage with proper payload', async () => {
peerConnection.sendEncryptedMessage = jest.fn();
const TEST_GET_APP_THEME_PAYLOAD = {
type: 'APP_THEME',
payload: { value: peerConnection.appColorTheme },
};
// @ts-ignore
processMessage.mockImplementation(() => {
return {
type: 'GET_APP_THEME',
payload: {},
};
});
await handleRecieveEncryptedMessage(
peerConnection,
TEST_DUMMY_ENCRYPTED_MESSAGE_PAYLOAD
);
expect(peerConnection.sendEncryptedMessage).toBeCalledWith(
TEST_GET_APP_THEME_PAYLOAD
);
});
});
describe('when processed message type is GET_APP_LANGUAGE', () => {
it('should call .sendEncryptedMessage with proper payload', async () => {
peerConnection.sendEncryptedMessage = jest.fn();
const TEST_GET_APP_LANGUAGE_PAYLOAD = {
type: 'APP_LANGUAGE',
payload: { value: peerConnection.appLanguage },
};
// @ts-ignore
processMessage.mockImplementation(() => {
return {
type: 'GET_APP_LANGUAGE',
payload: {},
};
});
await handleRecieveEncryptedMessage(
peerConnection,
TEST_DUMMY_ENCRYPTED_MESSAGE_PAYLOAD
);
expect(peerConnection.sendEncryptedMessage).toBeCalledWith(
TEST_GET_APP_LANGUAGE_PAYLOAD
);
});
});
});
describe('when handleDeviceIPMessage was called properly', () => {
it('should set partnerDeviceDetails with message payload and call device connected callback', async () => {
const TEST_DEVICE_IP = '123.123.123.123';
const TEST_DEVICE_TO_BE_SET = {
deviceIP: TEST_DEVICE_IP,
deviceType: TEST_DEVICE_DETAILS_PAYLOAD.deviceType,
deviceOS: TEST_DEVICE_DETAILS_PAYLOAD.os,
deviceBrowser: TEST_DEVICE_DETAILS_PAYLOAD.browser,
deviceScreenWidth: TEST_DEVICE_DETAILS_PAYLOAD.deviceScreenWidth,
deviceScreenHeight: TEST_DEVICE_DETAILS_PAYLOAD.deviceScreenHeight,
sharingSessionID: peerConnection.sharingSessionID,
id: uuid.v4(),
};
peerConnection.onDeviceConnectedCallback = jest.fn();
handleDeviceIPMessage(TEST_DEVICE_IP, peerConnection, {
type: 'DEVICE_DETAILS',
payload: TEST_DEVICE_DETAILS_PAYLOAD,
});
expect(peerConnection.partnerDeviceDetails).toEqual(
TEST_DEVICE_TO_BE_SET
);
expect(peerConnection.onDeviceConnectedCallback).toBeCalledWith(
TEST_DEVICE_TO_BE_SET
);
});
});
});