UNPKG

angular-simple-webrtc

Version:

simpleWebRTC service for AngularJS

279 lines (246 loc) 9.12 kB
/*globals module */ describe('SimpleWebRTC', function() { 'use strict'; var $SimpleWebRTC, $rootScope; angular.module('test', ['SimpleWebRTCModule']); beforeEach(function() { module('test'); inject(function(_$SimpleWebRTC_, _$rootScope_) { $SimpleWebRTC = _$SimpleWebRTC_; $rootScope = _$rootScope_; }); }); it('should be declared', function() { expect($SimpleWebRTC).toBeDefined(); }); it('should init webrtc object', function() { $SimpleWebRTC.init({}); expect($SimpleWebRTC.isInitialized()).toBe(true); }); it('should fire joinedRoom', function() { spyOn($rootScope, '$broadcast').and.callThrough(); $rootScope.$on('webrtc:joinedRoom', function(f) { expect(f.name).toBe('webrtc:joinedRoom'); }); $SimpleWebRTC.init({ roomName: 'room'}); $SimpleWebRTC.webrtc.emit('readyToCall'); expect($rootScope.$broadcast).toHaveBeenCalled(); expect($SimpleWebRTC.joinedRoom).toBe('room'); }); it('should fire joinedRoom', function() { spyOn($rootScope, '$broadcast').and.callThrough(); $rootScope.$on('webrtc:joinedRoom', function(f) { expect(f.name).toBe('webrtc:joinedRoom'); }); $SimpleWebRTC.init({}); $SimpleWebRTC.webrtc.emit('readyToCall'); $SimpleWebRTC.joinRoom('room'); expect($rootScope.$broadcast).toHaveBeenCalled(); expect($SimpleWebRTC.joinedRoom).toBe('room'); }); it('should populate streamList with local stream', function() { spyOn($rootScope, '$broadcast').and.callThrough(); $SimpleWebRTC.init({roomName: 'room'}); var s = new Blob(); $SimpleWebRTC.webrtc.emit('localStream', s); expect($SimpleWebRTC.streamList.length).toBe(1); expect($SimpleWebRTC.streamList[0].isRemote).toBe(false); expect($rootScope.$broadcast).toHaveBeenCalled(); }); it('should populate streamList with remote streams', function() { spyOn($rootScope, '$broadcast').and.callThrough(); $SimpleWebRTC.init({roomName: 'room'}); var s = {}; $SimpleWebRTC.webrtc.emit('videoAdded', {}, s); expect($SimpleWebRTC.streamList.length).toBe(1); expect($SimpleWebRTC.streamList[0].isRemote).toBe(true); expect($rootScope.$broadcast).toHaveBeenCalled(); }); it('should populate streamList with remote streams and handles duplicates', function() { spyOn($rootScope, '$broadcast').and.callThrough(); $SimpleWebRTC.init({roomName: 'room'}); var s = {}; s.id = 123; s.videoEl = { id: s.id }; $SimpleWebRTC.webrtc.emit('videoAdded', {}, s); $SimpleWebRTC.webrtc.emit('videoAdded', {}, s); expect($SimpleWebRTC.streamList.length).toBe(1); expect($SimpleWebRTC.streamList[0].isRemote).toBe(true); expect($rootScope.$broadcast).toHaveBeenCalled(); }); it('should remove an entry from streamList', function() { spyOn($rootScope, '$broadcast').and.callThrough(); $SimpleWebRTC.init({roomName: 'room'}); var s = new Blob(); s.id = 123; s.videoEl = { id: s.id }; $SimpleWebRTC.webrtc.emit('videoAdded', {}, s); var s = new Blob(); s.id = 234; s.videoEl = { id: s.id }; $SimpleWebRTC.webrtc.emit('videoAdded', {}, s); var s = new Blob(); s.id = 456; s.videoEl = { id: s.id }; $SimpleWebRTC.webrtc.emit('videoAdded', {}, s); expect($SimpleWebRTC.streamList.length).toBe(3); var s = new Blob(); s.id = 234; $SimpleWebRTC.webrtc.emit('videoRemoved', s); expect($SimpleWebRTC.streamList.length).toBe(2); expect($SimpleWebRTC.streamList[0].id).toBe(123); expect($SimpleWebRTC.streamList[1].id).toBe(456); expect($rootScope.$broadcast).toHaveBeenCalled(); }); it('should be able to pause a video stream', function() { $SimpleWebRTC.init({roomName: 'room'}); var s = new Blob(); $SimpleWebRTC.webrtc.emit('localStream', s); expect($SimpleWebRTC.isLocalVideoEnabled()).toBe(true); $SimpleWebRTC.pauseVideo(); expect($SimpleWebRTC.isLocalVideoEnabled()).toBe(false); }); it('should be able to pause and then resume a video stream', function() { $SimpleWebRTC.init({roomName: 'room'}); var s = new Blob(); $SimpleWebRTC.webrtc.emit('localStream', s); expect($SimpleWebRTC.isLocalVideoEnabled()).toBe(true); $SimpleWebRTC.pauseVideo(); expect($SimpleWebRTC.isLocalVideoEnabled()).toBe(false); $SimpleWebRTC.resumeVideo(); expect($SimpleWebRTC.isLocalVideoEnabled()).toBe(true); }); it('should be able to pause an audio stream', function() { $SimpleWebRTC.init({roomName: 'room'}); var s = new Blob(); $SimpleWebRTC.webrtc.emit('localStream', s); expect($SimpleWebRTC.isMuted()).toBe(false); $SimpleWebRTC.mute(); expect($SimpleWebRTC.isMuted()).toBe(true); }); it('should be able to pause and then resume an audio stream', function() { $SimpleWebRTC.init({roomName: 'room'}); var s = new Blob(); $SimpleWebRTC.webrtc.emit('localStream', s); expect($SimpleWebRTC.isMuted()).toBe(false); $SimpleWebRTC.mute(); expect($SimpleWebRTC.isMuted()).toBe(true); $SimpleWebRTC.unmute(); expect($SimpleWebRTC.isMuted()).toBe(false); }); it('should be able to receive files', function() { spyOn($rootScope, '$broadcast').and.callThrough(); var e = 0; var progress; $rootScope.$on('webrtc:peerCreated', function(f) { expect(f.name).toBe('webrtc:peerCreated'); e ++; }); $rootScope.$on('webrtc:fileTransferStarted', function(f, v) { expect(f.name).toBe('webrtc:fileTransferStarted'); expect(v.metadata.name).toBe(metadata.name); expect(v.metadata.size).toBe(metadata.size); e ++; }); $rootScope.$on('webrtc:fileTransferProgress', function(f, v) { expect(f.name).toBe('webrtc:fileTransferProgress'); expect(progress).toBe(v.byteReceived); expect(v.metadata.name).toBe(metadata.name); expect(v.metadata.size).toBe(metadata.size); e ++; }); $rootScope.$on('webrtc:fileTransferDone', function(f, v) { expect(f.name).toBe('webrtc:fileTransferDone'); expect(v.metadata.name).toBe(metadata.name); expect(v.metadata.size).toBe(metadata.size); e ++; }); $SimpleWebRTC.init({roomName: 'room'}); var s = new Peer(); var metadata = { name: 'abc', size: 512 }; var receiver = new Receiver(); $SimpleWebRTC.webrtc.emit('createdPeer', s); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(1); s.emit('fileTransfer', metadata, receiver); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(2); progress = 10; receiver.emit('progress', progress); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(3); progress = 30; receiver.emit('progress', progress); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(4); progress = 512; var file = new Blob(); receiver.emit('receivedFile', file, metadata); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(5); }); it('should be able to get peers', function() { $SimpleWebRTC.init({roomName: 'room'}); var peerList = $SimpleWebRTC.getPeers(); expect(peerList.length).toBe(5); }); it('should be able to send files', function() { spyOn($rootScope, '$broadcast').and.callThrough(); var e = 0; var progress; $rootScope.$on('webrtc:sentFileProgress', function(f, v) { expect(f.name).toBe('webrtc:sentFileProgress'); expect(progress).toBe(v.byteSent); e ++; }); $rootScope.$on('webrtc:sentFileDone', function(f, v) { expect(f.name).toBe('webrtc:sentFileDone'); e ++; }); $rootScope.$on('webrtc:sentFileReceived', function(f, v) { expect(f.name).toBe('webrtc:sentFileReceived'); e ++; }); $SimpleWebRTC.init({roomName: 'room'}); var s = new Peer(); var file = { name: 'abc', size: 512 }; var sender = $SimpleWebRTC.sendFile(s, file); progress = 10; sender.emit('progress', progress); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(1); progress = 30; sender.emit('progress', progress); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(2); sender.emit('sentFile', progress); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(3); sender.emit('complete', progress); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(4); }); it('should be able to send text message', function() { spyOn($rootScope, '$broadcast').and.callThrough(); var e = 0; var progress; $rootScope.$on('webrtc:textMessage', function(f, v) { expect(f.name).toBe('webrtc:textMessage'); expect(message).toBe(v.message); expect(time).toBe(v.time); e ++; }); var message = 'omama'; $SimpleWebRTC.init({roomName: 'room'}); var time = (new Date()).valueOf(); $SimpleWebRTC.sendTextMessage(message); expect($rootScope.$broadcast).toHaveBeenCalled(); expect(e).toBe(1); }); });