124 lines
3.0 KiB
TypeScript
124 lines
3.0 KiB
TypeScript
jest.mock('../actions/CallActions')
|
|
jest.mock('../socket')
|
|
jest.mock('../window')
|
|
|
|
import React from 'react'
|
|
import ReactDOM from 'react-dom'
|
|
import TestUtils from 'react-dom/test-utils'
|
|
import { Provider } from 'react-redux'
|
|
import { AnyAction, applyMiddleware, createStore } from 'redux'
|
|
import { init } from '../actions/CallActions'
|
|
import { Alert } from '../actions/NotifyActions'
|
|
import * as constants from '../constants'
|
|
import reducers from '../reducers'
|
|
import { middlewares, State, Store } from '../store'
|
|
import { MediaStream } from '../window'
|
|
import App from './App'
|
|
|
|
describe('App', () => {
|
|
|
|
const initAction = { type: 'INIT' }
|
|
|
|
let store: Store
|
|
let state: Partial<State>
|
|
let dispatchSpy: jest.SpyInstance<AnyAction, AnyAction[]>
|
|
beforeEach(() => {
|
|
state = {};
|
|
(init as jest.Mock).mockReturnValue(initAction)
|
|
|
|
window.HTMLMediaElement.prototype.play = jest.fn()
|
|
})
|
|
|
|
afterEach(() => {
|
|
if (dispatchSpy) {
|
|
dispatchSpy.mockReset()
|
|
dispatchSpy.mockRestore()
|
|
}
|
|
})
|
|
|
|
let node: Element
|
|
async function render () {
|
|
store = createStore(
|
|
reducers,
|
|
state,
|
|
applyMiddleware(...middlewares),
|
|
)
|
|
dispatchSpy = jest.spyOn(store, 'dispatch')
|
|
const div = document.createElement('div')
|
|
node = await new Promise<HTMLDivElement>(resolve => {
|
|
ReactDOM.render(
|
|
<Provider store={store}>
|
|
<div ref={div => resolve(div!)}>
|
|
<App />
|
|
</div>
|
|
</Provider>,
|
|
div,
|
|
)
|
|
})
|
|
}
|
|
|
|
describe('render', () => {
|
|
it('renders without issues', async () => {
|
|
await render()
|
|
expect(node).toBeTruthy()
|
|
expect((init as jest.Mock).mock.calls.length).toBe(1)
|
|
})
|
|
})
|
|
|
|
describe('state', () => {
|
|
let alert: Alert
|
|
beforeEach(async () => {
|
|
state.streams = {
|
|
test: {
|
|
mediaStream: new MediaStream(),
|
|
url: 'blob://',
|
|
},
|
|
}
|
|
state.peers = {
|
|
test: {} as any,
|
|
}
|
|
state.notifications = {
|
|
'notification1': {
|
|
id: 'notification1',
|
|
message: 'test',
|
|
type: 'warning',
|
|
},
|
|
}
|
|
alert = {
|
|
dismissable: true,
|
|
action: 'Dismiss',
|
|
message: 'test alert',
|
|
type: 'info',
|
|
}
|
|
state.alerts = [alert]
|
|
await render()
|
|
})
|
|
|
|
describe('alerts', () => {
|
|
it('can be dismissed', () => {
|
|
const dismiss = node.querySelector('.action-alert-dismiss')!
|
|
dispatchSpy.mockReset()
|
|
TestUtils.Simulate.click(dismiss)
|
|
expect(dispatchSpy.mock.calls).toEqual([[{
|
|
type: constants.ALERT_DISMISS,
|
|
payload: alert,
|
|
}]])
|
|
})
|
|
})
|
|
|
|
describe('video', () => {
|
|
it('can be activated', () => {
|
|
dispatchSpy.mockReset()
|
|
const video = node.querySelector('video')!
|
|
TestUtils.Simulate.click(video)
|
|
expect(dispatchSpy.mock.calls).toEqual([[{
|
|
type: constants.ACTIVE_TOGGLE,
|
|
payload: { userId: constants.ME },
|
|
}]])
|
|
})
|
|
})
|
|
|
|
})
|
|
|
|
})
|