Add tests for peers.js
This commit is contained in:
parent
5ec24dd399
commit
942d0f57c4
@ -43,10 +43,11 @@
|
|||||||
"scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
|
"scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
|
||||||
"unmockedModulePathPatterns": [
|
"unmockedModulePathPatterns": [
|
||||||
"<rootDir>/node_modules/debug",
|
"<rootDir>/node_modules/debug",
|
||||||
|
"<rootDir>/node_modules/fbjs",
|
||||||
"<rootDir>/node_modules/react",
|
"<rootDir>/node_modules/react",
|
||||||
"<rootDir>/node_modules/react-dom",
|
|
||||||
"<rootDir>/node_modules/react-addons-test-utils",
|
"<rootDir>/node_modules/react-addons-test-utils",
|
||||||
"<rootDir>/node_modules/fbjs"
|
"<rootDir>/node_modules/react-dom",
|
||||||
|
"<rootDir>/node_modules/underscore"
|
||||||
],
|
],
|
||||||
"modulePathIgnorePatterns": [
|
"modulePathIgnorePatterns": [
|
||||||
"<rootDir>/node_modules/"
|
"<rootDir>/node_modules/"
|
||||||
|
|||||||
165
src/client/peer/__tests__/peers-test.js
Normal file
165
src/client/peer/__tests__/peers-test.js
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
jest.unmock('../peers.js');
|
||||||
|
|
||||||
|
const EventEmitter = require('events').EventEmitter;
|
||||||
|
const Peer = require('../Peer.js');
|
||||||
|
const dispatcher = require('../../dispatcher/dispatcher.js');
|
||||||
|
const notify = require('../../action/notify.js');
|
||||||
|
const peers = require('../peers.js');
|
||||||
|
|
||||||
|
describe('peers', () => {
|
||||||
|
|
||||||
|
function createSocket() {
|
||||||
|
let socket = new EventEmitter();
|
||||||
|
socket.id = 'user1';
|
||||||
|
return socket;
|
||||||
|
}
|
||||||
|
|
||||||
|
let socket, stream, peerInstances, user;
|
||||||
|
beforeEach(() => {
|
||||||
|
dispatcher.dispatch.mockClear();
|
||||||
|
notify.warn.mockClear();
|
||||||
|
|
||||||
|
user = { id: '/#user2' };
|
||||||
|
socket = createSocket();
|
||||||
|
peerInstances = [];
|
||||||
|
stream = { stream: true };
|
||||||
|
|
||||||
|
Peer.init = jest.genMockFunction().mockImplementation(() => {
|
||||||
|
let peer = new EventEmitter();
|
||||||
|
peer.destroy = jest.genMockFunction();
|
||||||
|
peer.signal = jest.genMockFunction();
|
||||||
|
peerInstances.push(peer);
|
||||||
|
return peer;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => peers.clear());
|
||||||
|
|
||||||
|
describe('create', () => {
|
||||||
|
|
||||||
|
it('creates a new peer', () => {
|
||||||
|
peers.create({ socket, user, initiator: '/#user2', stream });
|
||||||
|
|
||||||
|
expect(notify.warn.mock.calls).toEqual([[ 'Connecting to peer...' ]]);
|
||||||
|
|
||||||
|
expect(peerInstances.length).toBe(1);
|
||||||
|
expect(Peer.init.mock.calls.length).toBe(1);
|
||||||
|
expect(Peer.init.mock.calls[0][0].initiator).toBe(false);
|
||||||
|
expect(Peer.init.mock.calls[0][0].stream).toBe(stream);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('sets initiator correctly', () => {
|
||||||
|
peers.create({ socket, user, initiator: '/#user1', stream });
|
||||||
|
|
||||||
|
expect(peerInstances.length).toBe(1);
|
||||||
|
expect(Peer.init.mock.calls.length).toBe(1);
|
||||||
|
expect(Peer.init.mock.calls[0][0].initiator).toBe(true);
|
||||||
|
expect(Peer.init.mock.calls[0][0].stream).toBe(stream);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('destroys old peer before creating new one', () => {
|
||||||
|
peers.create({ socket, user, initiator: '/#user2', stream });
|
||||||
|
peers.create({ socket, user, initiator: '/#user2', stream });
|
||||||
|
|
||||||
|
expect(peerInstances.length).toBe(2);
|
||||||
|
expect(Peer.init.mock.calls.length).toBe(2);
|
||||||
|
expect(peerInstances[0].destroy.mock.calls.length).toBe(1);
|
||||||
|
expect(peerInstances[1].destroy.mock.calls.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('events', () => {
|
||||||
|
|
||||||
|
let peer;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
peers.create({ socket, user, initiator: '/#user1', stream });
|
||||||
|
notify.warn.mockClear();
|
||||||
|
peer = peerInstances[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('connect', () => {
|
||||||
|
|
||||||
|
beforeEach(() => peer.emit('connect'));
|
||||||
|
|
||||||
|
it('sends a notification', () => {
|
||||||
|
expect(notify.warn.mock.calls).toEqual([[
|
||||||
|
'Peer connection established'
|
||||||
|
]]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('dispatches "play" action', () => {
|
||||||
|
expect(dispatcher.dispatch.mock.calls).toEqual([[{ type: 'play' }]]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('get', () => {
|
||||||
|
|
||||||
|
it('returns undefined when not found', () => {
|
||||||
|
expect(peers.get(user.id)).not.toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns Peer instance when found', () => {
|
||||||
|
peers.create({ socket, user, initiator: 'user2', stream });
|
||||||
|
|
||||||
|
expect(peers.get(user.id)).toBe(peerInstances[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getIds', () => {
|
||||||
|
|
||||||
|
it('returns ids of all peers', () => {
|
||||||
|
peers.create({
|
||||||
|
socket, user: {id: '/#user2' }, initiator: '/#user2', stream
|
||||||
|
});
|
||||||
|
peers.create({
|
||||||
|
socket, user: {id: '/#user3' }, initiator: '/#user3', stream
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(peers.getIds()).toEqual([ '/#user2', '/#user3' ]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('destroy', () => {
|
||||||
|
|
||||||
|
it('destroys a peer and removes it', () => {
|
||||||
|
peers.create({ socket, user, initiator: 'user2', stream });
|
||||||
|
|
||||||
|
peers.destroy(user.id);
|
||||||
|
|
||||||
|
expect(peerInstances[0].destroy.mock.calls.length).toEqual(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws no error when peer missing', () => {
|
||||||
|
peers.destroy('bla123');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('clear', () => {
|
||||||
|
|
||||||
|
it('destroys all peers and removes them', () => {
|
||||||
|
peers.create({
|
||||||
|
socket, user: {id: '/#user2' }, initiator: '/#user2', stream
|
||||||
|
});
|
||||||
|
peers.create({
|
||||||
|
socket, user: {id: '/#user3' }, initiator: '/#user3', stream
|
||||||
|
});
|
||||||
|
|
||||||
|
peers.clear();
|
||||||
|
|
||||||
|
expect(peerInstances[0].destroy.mock.calls.length).toEqual(1);
|
||||||
|
expect(peerInstances[1].destroy.mock.calls.length).toEqual(1);
|
||||||
|
|
||||||
|
expect(peers.getIds()).toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
@ -72,7 +72,10 @@ function create({ socket, user, initiator, stream }) {
|
|||||||
type: 'remove-stream',
|
type: 'remove-stream',
|
||||||
userId: user.id
|
userId: user.id
|
||||||
});
|
});
|
||||||
delete peers[user.id];
|
|
||||||
|
// make sure some other peer with different id didn't take place between
|
||||||
|
// calling `destroy()` and `close` event
|
||||||
|
if (peers[user.id] === peer) delete peers[user.id];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user