Reorganize window
This commit is contained in:
parent
368fa5102b
commit
edda50b287
@ -1 +0,0 @@
|
|||||||
export default 'call1234'
|
|
||||||
@ -1 +0,0 @@
|
|||||||
module.exports = []
|
|
||||||
23
src/client/__mocks__/window.js
Normal file
23
src/client/__mocks__/window.js
Normal file
@ -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 = []
|
||||||
|
|
||||||
@ -1,6 +1,4 @@
|
|||||||
jest.mock('../actions/CallActions.js')
|
jest.mock('../actions/CallActions.js')
|
||||||
jest.mock('../callId.js')
|
|
||||||
jest.mock('../iceServers.js')
|
|
||||||
jest.mock('../socket.js')
|
jest.mock('../socket.js')
|
||||||
|
|
||||||
import * as constants from '../constants.js'
|
import * as constants from '../constants.js'
|
||||||
|
|||||||
@ -1,8 +1,12 @@
|
|||||||
import Promise from 'bluebird'
|
import Promise from 'bluebird'
|
||||||
import createObjectURL from '../createObjectURL.js'
|
|
||||||
import getUserMedia from '../getUserMedia.js'
|
import {
|
||||||
import navigator from '../navigator.js'
|
createObjectURL,
|
||||||
import { play } from '../video.js'
|
getUserMedia,
|
||||||
|
navigator,
|
||||||
|
play,
|
||||||
|
valueOf
|
||||||
|
} from '../window.js'
|
||||||
|
|
||||||
describe('window', () => {
|
describe('window', () => {
|
||||||
|
|
||||||
@ -59,7 +63,6 @@ describe('window', () => {
|
|||||||
v1.play = jest.fn()
|
v1.play = jest.fn()
|
||||||
v2.play = jest.fn()
|
v2.play = jest.fn()
|
||||||
})
|
})
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
window.document.body.removeChild(v1)
|
window.document.body.removeChild(v1)
|
||||||
window.document.body.removeChild(v2)
|
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)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -3,9 +3,8 @@ import * as SocketActions from './SocketActions.js'
|
|||||||
import * as StreamActions from './StreamActions.js'
|
import * as StreamActions from './StreamActions.js'
|
||||||
import * as constants from '../constants.js'
|
import * as constants from '../constants.js'
|
||||||
import Promise from 'bluebird'
|
import Promise from 'bluebird'
|
||||||
import callId from '../callId.js'
|
|
||||||
import getUserMedia from '../window/getUserMedia.js'
|
|
||||||
import socket from '../socket.js'
|
import socket from '../socket.js'
|
||||||
|
import { callId, getUserMedia } from '../window.js'
|
||||||
|
|
||||||
export const init = () => dispatch => {
|
export const init = () => dispatch => {
|
||||||
return dispatch({
|
return dispatch({
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import * as constants from '../constants.js'
|
|||||||
import Peer from 'simple-peer'
|
import Peer from 'simple-peer'
|
||||||
import _ from 'underscore'
|
import _ from 'underscore'
|
||||||
import _debug from 'debug'
|
import _debug from 'debug'
|
||||||
import iceServers from '../iceServers.js'
|
import { play, iceServers } from '../window.js'
|
||||||
import { play } from '../window/video.js'
|
|
||||||
|
|
||||||
const debug = _debug('peercalls')
|
const debug = _debug('peercalls')
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,14 @@
|
|||||||
jest.mock('../../callId.js')
|
|
||||||
jest.mock('../../iceServers.js')
|
|
||||||
jest.mock('../../socket.js')
|
jest.mock('../../socket.js')
|
||||||
jest.mock('../../window/getUserMedia.js')
|
jest.mock('../../window.js')
|
||||||
jest.mock('../../store.js')
|
jest.mock('../../store.js')
|
||||||
jest.mock('../SocketActions.js')
|
jest.mock('../SocketActions.js')
|
||||||
|
|
||||||
import * as CallActions from '../CallActions.js'
|
import * as CallActions from '../CallActions.js'
|
||||||
import * as SocketActions from '../SocketActions.js'
|
import * as SocketActions from '../SocketActions.js'
|
||||||
import * as constants from '../../constants.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 socket from '../../socket.js'
|
||||||
import store from '../../store.js'
|
import store from '../../store.js'
|
||||||
|
import { callId, getUserMedia } from '../../window.js'
|
||||||
|
|
||||||
jest.useFakeTimers()
|
jest.useFakeTimers()
|
||||||
|
|
||||||
@ -19,7 +16,7 @@ describe('reducers/alerts', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
store.clearActions()
|
store.clearActions()
|
||||||
getUserMediaMock.fail(false)
|
getUserMedia.fail(false)
|
||||||
SocketActions.handshake.mockReturnValue(jest.fn())
|
SocketActions.handshake.mockReturnValue(jest.fn())
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -47,7 +44,7 @@ describe('reducers/alerts', () => {
|
|||||||
expect(SocketActions.handshake.mock.calls).toEqual([[{
|
expect(SocketActions.handshake.mock.calls).toEqual([[{
|
||||||
socket,
|
socket,
|
||||||
roomName: callId,
|
roomName: callId,
|
||||||
stream: getUserMediaMock.stream
|
stream: getUserMedia.stream
|
||||||
}]])
|
}]])
|
||||||
})
|
})
|
||||||
.then(done)
|
.then(done)
|
||||||
@ -79,7 +76,7 @@ describe('reducers/alerts', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('dispatches alert when failed to get media stream', done => {
|
it('dispatches alert when failed to get media stream', done => {
|
||||||
getUserMediaMock.fail(true)
|
getUserMedia.fail(true)
|
||||||
const promise = store.dispatch(CallActions.init())
|
const promise = store.dispatch(CallActions.init())
|
||||||
socket.emit('connect')
|
socket.emit('connect')
|
||||||
promise
|
promise
|
||||||
|
|||||||
@ -1,13 +1,11 @@
|
|||||||
jest.mock('../../window/video.js')
|
jest.mock('../../window.js')
|
||||||
jest.mock('../../callId.js')
|
|
||||||
jest.mock('../../iceServers.js')
|
|
||||||
jest.mock('simple-peer')
|
jest.mock('simple-peer')
|
||||||
|
|
||||||
import * as PeerActions from '../PeerActions.js'
|
import * as PeerActions from '../PeerActions.js'
|
||||||
import Peer from 'simple-peer'
|
import Peer from 'simple-peer'
|
||||||
import { EventEmitter } from 'events'
|
import { EventEmitter } from 'events'
|
||||||
import { createStore } from '../../store.js'
|
import { createStore } from '../../store.js'
|
||||||
import { play } from '../../window/video.js'
|
import { play } from '../../window.js'
|
||||||
|
|
||||||
describe('PeerActions', () => {
|
describe('PeerActions', () => {
|
||||||
function createSocket () {
|
function createSocket () {
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
jest.mock('simple-peer')
|
jest.mock('simple-peer')
|
||||||
jest.mock('../../callId.js')
|
jest.mock('../../window.js')
|
||||||
jest.mock('../../iceServers.js')
|
|
||||||
jest.mock('../../window/createObjectURL.js')
|
|
||||||
|
|
||||||
import * as SocketActions from '../SocketActions.js'
|
import * as SocketActions from '../SocketActions.js'
|
||||||
import * as constants from '../../constants.js'
|
import * as constants from '../../constants.js'
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
export default window.document.getElementById('callId').value
|
|
||||||
@ -1,6 +1,3 @@
|
|||||||
jest.mock('../../callId.js')
|
|
||||||
jest.mock('../../iceServers.js')
|
|
||||||
|
|
||||||
import Input from '../Input.js'
|
import Input from '../Input.js'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
export default JSON.parse(
|
|
||||||
window.document.getElementById('iceServers').value
|
|
||||||
)
|
|
||||||
@ -1,6 +1,4 @@
|
|||||||
jest.mock('../../callId.js')
|
jest.mock('../../window.js')
|
||||||
jest.mock('../../iceServers.js')
|
|
||||||
jest.mock('../../window/createObjectURL.js')
|
|
||||||
|
|
||||||
import * as StreamActions from '../../actions/StreamActions.js'
|
import * as StreamActions from '../../actions/StreamActions.js'
|
||||||
import { applyMiddleware, createStore } from 'redux'
|
import { applyMiddleware, createStore } from 'redux'
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import * as constants from '../constants.js'
|
import * as constants from '../constants.js'
|
||||||
import createObjectURL from '../window/createObjectURL'
|
|
||||||
import Immutable from 'seamless-immutable'
|
import Immutable from 'seamless-immutable'
|
||||||
|
import { createObjectURL } from '../window.js'
|
||||||
|
|
||||||
const defaultState = Immutable({})
|
const defaultState = Immutable({})
|
||||||
|
|
||||||
|
|||||||
40
src/client/window.js
Normal file
40
src/client/window.js
Normal file
@ -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'))
|
||||||
@ -1 +0,0 @@
|
|||||||
export default object => 'blob://' + String(object)
|
|
||||||
@ -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'))
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
export default object => window.URL.createObjectURL(object)
|
|
||||||
@ -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)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
export default window.navigator
|
|
||||||
@ -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)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user