From edda50b28750a6720a316d3638f7631040237ddc Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Sat, 17 Jun 2017 23:14:26 -0400 Subject: [PATCH] Reorganize window --- src/client/__mocks__/callId.js | 1 - src/client/__mocks__/iceServers.js | 1 - src/client/__mocks__/window.js | 23 +++++++++++ src/client/__tests__/App-test.js | 2 - .../{window => }/__tests__/window-test.js | 38 +++++++++++++++--- src/client/actions/CallActions.js | 3 +- src/client/actions/PeerActions.js | 3 +- .../actions/__tests__/CallActions-test.js | 13 +++--- .../actions/__tests__/PeerActions-test.js | 6 +-- .../actions/__tests__/SocketActions-test.js | 4 +- src/client/callId.js | 1 - src/client/components/__tests__/Input-test.js | 3 -- src/client/iceServers.js | 3 -- src/client/reducers/__tests__/streams-test.js | 4 +- src/client/reducers/streams.js | 2 +- src/client/window.js | 40 +++++++++++++++++++ .../window/__mocks__/createObjectURL.js | 1 - src/client/window/__mocks__/getUserMedia.js | 12 ------ src/client/window/createObjectURL.js | 1 - src/client/window/getUserMedia.js | 14 ------- src/client/window/navigator.js | 1 - src/client/window/video.js | 13 ------ 22 files changed, 107 insertions(+), 82 deletions(-) delete mode 100644 src/client/__mocks__/callId.js delete mode 100644 src/client/__mocks__/iceServers.js create mode 100644 src/client/__mocks__/window.js rename src/client/{window => }/__tests__/window-test.js (79%) delete mode 100644 src/client/callId.js delete mode 100644 src/client/iceServers.js create mode 100644 src/client/window.js delete mode 100644 src/client/window/__mocks__/createObjectURL.js delete mode 100644 src/client/window/__mocks__/getUserMedia.js delete mode 100644 src/client/window/createObjectURL.js delete mode 100644 src/client/window/getUserMedia.js delete mode 100644 src/client/window/navigator.js delete mode 100644 src/client/window/video.js diff --git a/src/client/__mocks__/callId.js b/src/client/__mocks__/callId.js deleted file mode 100644 index 1fcb98c..0000000 --- a/src/client/__mocks__/callId.js +++ /dev/null @@ -1 +0,0 @@ -export default 'call1234' diff --git a/src/client/__mocks__/iceServers.js b/src/client/__mocks__/iceServers.js deleted file mode 100644 index d7faf17..0000000 --- a/src/client/__mocks__/iceServers.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = [] diff --git a/src/client/__mocks__/window.js b/src/client/__mocks__/window.js new file mode 100644 index 0000000..7548158 --- /dev/null +++ b/src/client/__mocks__/window.js @@ -0,0 +1,23 @@ +import Promise from 'bluebird' + +export const createObjectURL = object => 'blob://' + String(object) + +class MediaStream {} +export function getUserMedia () { + return !getUserMedia.shouldFail + ? Promise.resolve(getUserMedia.stream) + : Promise.reject(new Error('test')) +} +getUserMedia.fail = shouldFail => getUserMedia.shouldFail = shouldFail +getUserMedia.stream = new MediaStream() + +export const navigator = window.navigator + +export const play = jest.fn() + +export const valueOf = jest.fn() + +export const callId = 'call1234' + +export const iceServers = [] + diff --git a/src/client/__tests__/App-test.js b/src/client/__tests__/App-test.js index 47ec622..2f005c3 100644 --- a/src/client/__tests__/App-test.js +++ b/src/client/__tests__/App-test.js @@ -1,6 +1,4 @@ jest.mock('../actions/CallActions.js') -jest.mock('../callId.js') -jest.mock('../iceServers.js') jest.mock('../socket.js') import * as constants from '../constants.js' diff --git a/src/client/window/__tests__/window-test.js b/src/client/__tests__/window-test.js similarity index 79% rename from src/client/window/__tests__/window-test.js rename to src/client/__tests__/window-test.js index 1243089..383ce78 100644 --- a/src/client/window/__tests__/window-test.js +++ b/src/client/__tests__/window-test.js @@ -1,8 +1,12 @@ import Promise from 'bluebird' -import createObjectURL from '../createObjectURL.js' -import getUserMedia from '../getUserMedia.js' -import navigator from '../navigator.js' -import { play } from '../video.js' + +import { + createObjectURL, + getUserMedia, + navigator, + play, + valueOf +} from '../window.js' describe('window', () => { @@ -58,8 +62,7 @@ describe('window', () => { window.document.body.appendChild(v2) v1.play = jest.fn() v2.play = jest.fn() - }) - + }) afterEach(() => { window.document.body.removeChild(v1) window.document.body.removeChild(v2) @@ -97,4 +100,27 @@ describe('window', () => { }) + describe('valueOf', () => { + + let input + beforeEach(() => { + input = window.document.createElement('input') + input.setAttribute('id', 'my-main-id') + input.value = 'test' + window.document.body.appendChild(input) + }) + afterEach(() => { + window.document.body.removeChild(input) + }) + + it('should return value of input', () => { + expect(valueOf('my-main-id')).toEqual('test') + }) + + it('does not fail when not found', () => { + expect(valueOf('my-main-id2')).toEqual(null) + }) + + }) + }) diff --git a/src/client/actions/CallActions.js b/src/client/actions/CallActions.js index 0aeb750..08faa9d 100644 --- a/src/client/actions/CallActions.js +++ b/src/client/actions/CallActions.js @@ -3,9 +3,8 @@ import * as SocketActions from './SocketActions.js' import * as StreamActions from './StreamActions.js' import * as constants from '../constants.js' import Promise from 'bluebird' -import callId from '../callId.js' -import getUserMedia from '../window/getUserMedia.js' import socket from '../socket.js' +import { callId, getUserMedia } from '../window.js' export const init = () => dispatch => { return dispatch({ diff --git a/src/client/actions/PeerActions.js b/src/client/actions/PeerActions.js index b4a62bf..b1c83b8 100644 --- a/src/client/actions/PeerActions.js +++ b/src/client/actions/PeerActions.js @@ -4,8 +4,7 @@ import * as constants from '../constants.js' import Peer from 'simple-peer' import _ from 'underscore' import _debug from 'debug' -import iceServers from '../iceServers.js' -import { play } from '../window/video.js' +import { play, iceServers } from '../window.js' const debug = _debug('peercalls') diff --git a/src/client/actions/__tests__/CallActions-test.js b/src/client/actions/__tests__/CallActions-test.js index f081ca1..bc6abe2 100644 --- a/src/client/actions/__tests__/CallActions-test.js +++ b/src/client/actions/__tests__/CallActions-test.js @@ -1,17 +1,14 @@ -jest.mock('../../callId.js') -jest.mock('../../iceServers.js') jest.mock('../../socket.js') -jest.mock('../../window/getUserMedia.js') +jest.mock('../../window.js') jest.mock('../../store.js') jest.mock('../SocketActions.js') import * as CallActions from '../CallActions.js' import * as SocketActions from '../SocketActions.js' import * as constants from '../../constants.js' -import * as getUserMediaMock from '../../window/getUserMedia.js' -import callId from '../../callId.js' import socket from '../../socket.js' import store from '../../store.js' +import { callId, getUserMedia } from '../../window.js' jest.useFakeTimers() @@ -19,7 +16,7 @@ describe('reducers/alerts', () => { beforeEach(() => { store.clearActions() - getUserMediaMock.fail(false) + getUserMedia.fail(false) SocketActions.handshake.mockReturnValue(jest.fn()) }) @@ -47,7 +44,7 @@ describe('reducers/alerts', () => { expect(SocketActions.handshake.mock.calls).toEqual([[{ socket, roomName: callId, - stream: getUserMediaMock.stream + stream: getUserMedia.stream }]]) }) .then(done) @@ -79,7 +76,7 @@ describe('reducers/alerts', () => { }) it('dispatches alert when failed to get media stream', done => { - getUserMediaMock.fail(true) + getUserMedia.fail(true) const promise = store.dispatch(CallActions.init()) socket.emit('connect') promise diff --git a/src/client/actions/__tests__/PeerActions-test.js b/src/client/actions/__tests__/PeerActions-test.js index 046d056..dcaf9a3 100644 --- a/src/client/actions/__tests__/PeerActions-test.js +++ b/src/client/actions/__tests__/PeerActions-test.js @@ -1,13 +1,11 @@ -jest.mock('../../window/video.js') -jest.mock('../../callId.js') -jest.mock('../../iceServers.js') +jest.mock('../../window.js') jest.mock('simple-peer') import * as PeerActions from '../PeerActions.js' import Peer from 'simple-peer' import { EventEmitter } from 'events' import { createStore } from '../../store.js' -import { play } from '../../window/video.js' +import { play } from '../../window.js' describe('PeerActions', () => { function createSocket () { diff --git a/src/client/actions/__tests__/SocketActions-test.js b/src/client/actions/__tests__/SocketActions-test.js index dd4b574..816057c 100644 --- a/src/client/actions/__tests__/SocketActions-test.js +++ b/src/client/actions/__tests__/SocketActions-test.js @@ -1,7 +1,5 @@ jest.mock('simple-peer') -jest.mock('../../callId.js') -jest.mock('../../iceServers.js') -jest.mock('../../window/createObjectURL.js') +jest.mock('../../window.js') import * as SocketActions from '../SocketActions.js' import * as constants from '../../constants.js' diff --git a/src/client/callId.js b/src/client/callId.js deleted file mode 100644 index ffbb994..0000000 --- a/src/client/callId.js +++ /dev/null @@ -1 +0,0 @@ -export default window.document.getElementById('callId').value diff --git a/src/client/components/__tests__/Input-test.js b/src/client/components/__tests__/Input-test.js index 6e89ba2..759748b 100644 --- a/src/client/components/__tests__/Input-test.js +++ b/src/client/components/__tests__/Input-test.js @@ -1,6 +1,3 @@ -jest.mock('../../callId.js') -jest.mock('../../iceServers.js') - import Input from '../Input.js' import React from 'react' import ReactDOM from 'react-dom' diff --git a/src/client/iceServers.js b/src/client/iceServers.js deleted file mode 100644 index d780061..0000000 --- a/src/client/iceServers.js +++ /dev/null @@ -1,3 +0,0 @@ -export default JSON.parse( - window.document.getElementById('iceServers').value -) diff --git a/src/client/reducers/__tests__/streams-test.js b/src/client/reducers/__tests__/streams-test.js index 650c41f..d8d97be 100644 --- a/src/client/reducers/__tests__/streams-test.js +++ b/src/client/reducers/__tests__/streams-test.js @@ -1,6 +1,4 @@ -jest.mock('../../callId.js') -jest.mock('../../iceServers.js') -jest.mock('../../window/createObjectURL.js') +jest.mock('../../window.js') import * as StreamActions from '../../actions/StreamActions.js' import { applyMiddleware, createStore } from 'redux' diff --git a/src/client/reducers/streams.js b/src/client/reducers/streams.js index f2b049d..b572a9c 100644 --- a/src/client/reducers/streams.js +++ b/src/client/reducers/streams.js @@ -1,6 +1,6 @@ import * as constants from '../constants.js' -import createObjectURL from '../window/createObjectURL' import Immutable from 'seamless-immutable' +import { createObjectURL } from '../window.js' const defaultState = Immutable({}) diff --git a/src/client/window.js b/src/client/window.js new file mode 100644 index 0000000..7f1fc60 --- /dev/null +++ b/src/client/window.js @@ -0,0 +1,40 @@ +import Promise from 'bluebird' +import _debug from 'debug' + +const debug = _debug('peercalls') + +export function getUserMedia (constraints) { + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + return navigator.mediaDevices.getUserMedia(constraints) + } + + return new Promise((resolve, reject) => { + const getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia + if (!getMedia) reject(new Error('Browser unsupported')) + getMedia.call(navigator, constraints, resolve, reject) + }) +} + +export const createObjectURL = object => window.URL.createObjectURL(object) + +export const navigator = window.navigator + +export function play () { + let videos = window.document.querySelectorAll('video') + Array.prototype.forEach.call(videos, (video, index) => { + debug('playing video: %s', index) + try { + video.play() + } catch (e) { + debug('error playing video: %s', e.name) + } + }) +} + +export const valueOf = id => { + const el = window.document.getElementById(id) + return el && el.value +} + +export const callId = valueOf('callId') +export const iceServers = JSON.parse(valueOf('iceServers')) diff --git a/src/client/window/__mocks__/createObjectURL.js b/src/client/window/__mocks__/createObjectURL.js deleted file mode 100644 index e876080..0000000 --- a/src/client/window/__mocks__/createObjectURL.js +++ /dev/null @@ -1 +0,0 @@ -export default object => 'blob://' + String(object) diff --git a/src/client/window/__mocks__/getUserMedia.js b/src/client/window/__mocks__/getUserMedia.js deleted file mode 100644 index 8cda099..0000000 --- a/src/client/window/__mocks__/getUserMedia.js +++ /dev/null @@ -1,12 +0,0 @@ -import Promise from 'bluebird' - -class MediaStream {} - -let shouldFail -export const fail = _fail => shouldFail = !!_fail -export const stream = new MediaStream() -export default function getUserMedia () { - return !shouldFail - ? Promise.resolve(stream) - : Promise.reject(new Error('test')) -} diff --git a/src/client/window/createObjectURL.js b/src/client/window/createObjectURL.js deleted file mode 100644 index 026adf9..0000000 --- a/src/client/window/createObjectURL.js +++ /dev/null @@ -1 +0,0 @@ -export default object => window.URL.createObjectURL(object) diff --git a/src/client/window/getUserMedia.js b/src/client/window/getUserMedia.js deleted file mode 100644 index 2bd4f23..0000000 --- a/src/client/window/getUserMedia.js +++ /dev/null @@ -1,14 +0,0 @@ -import Promise from 'bluebird' -import navigator from './navigator.js' - -export default function getUserMedia (constraints) { - if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { - return navigator.mediaDevices.getUserMedia(constraints) - } - - return new Promise((resolve, reject) => { - const getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia - if (!getMedia) reject(new Error('Browser unsupported')) - getMedia.call(navigator, constraints, resolve, reject) - }) -} diff --git a/src/client/window/navigator.js b/src/client/window/navigator.js deleted file mode 100644 index 46f7f47..0000000 --- a/src/client/window/navigator.js +++ /dev/null @@ -1 +0,0 @@ -export default window.navigator diff --git a/src/client/window/video.js b/src/client/window/video.js deleted file mode 100644 index a494685..0000000 --- a/src/client/window/video.js +++ /dev/null @@ -1,13 +0,0 @@ -const debug = require('debug')('peercalls') - -export function play () { - let videos = window.document.querySelectorAll('video') - Array.prototype.forEach.call(videos, (video, index) => { - debug('playing video: %s', index) - try { - video.play() - } catch (e) { - debug('error playing video: %s', e.name) - } - }) -}