robbie-sdk
Version:
Robbie Visio SDK to send events for analaysis
109 lines (108 loc) • 3.02 kB
JavaScript
import RobbieApi, { CREATE_SESSION_ROUTE, REQUEST_EMOTIONS_ROUTE, CLOSE_SESSION_ROUTE } from '../../src/RobbieApi';
import jsdom from 'jsdom';
import sinon from 'sinon';
import canvasMockify from 'canvas-mock';
import RobbieVisio from '../../src';
import MockResponse from './MockResponse.json';
export default {
/**
* Mock browser devices.
* @param kinds {array} List of devices to mock. Ex: videoinput, audio:input
*/
navigatorDevices: (kinds) => {
if (!navigator) {
throw new Error('No navigator present to mock devices');
}
navigator.mediaDevices = {
enumerateDevices: (callback) => {
const devices = kinds.map(kind => {
return {kind}
});
return callback(devices);
}
}
},
cameraPermissionAllowed: (isAllowed) => {
navigator.getUserMedia = (params, onSuccess, onError) => {
if (isAllowed) {
onSuccess();
return;
}
onError();
}
},
sinon: {
/**
* 1st parameter: REST method
* 2nd parameter: url
* 3rd parameter: response status, response headers and response body
*/
okCreateSession: [
'POST',
RobbieApi.baseUrl + CREATE_SESSION_ROUTE,
[
201,
{ 'Content-type': 'application/json' },
JSON.stringify({id: "mock-session-id"})
]
],
okRequestFrame: [
'POST',
`${RobbieApi.baseUrl}${REQUEST_EMOTIONS_ROUTE}?single=true&persist=false&gender=false`,
[
201,
{ 'Content-type': 'application/json' },
JSON.stringify(MockResponse["REQUEST_EMOTIONS"])
]
],
okCloseSession: [
'POST',
new RegExp(RobbieApi.baseUrl+CLOSE_SESSION_ROUTE+"\\w+"),
[
200,
{ 'Content-type': 'application/json' },
JSON.stringify(MockResponse["CLOSE_SESSION"]),
]
]
},
mockWindow() {
global.document = jsdom.jsdom('<!doctype html><html><body></body></html>');
global.window = document.defaultView;
global.window.URL = {
createObjectURL: () => {}
}
},
mockNavigator() {
if (typeof window === 'undefined') {
throw new Error('No window present, mock it first')
}
global.navigator = window.navigator;
},
canvas() {
if (typeof window === 'undefined') {
throw new Error('No window present, mock it first')
}
const canvas = window.document.createElement('canvas');
canvasMockify(canvas);
canvas.toDataURL = () => ('ABCD1234');
return canvas;
},
video() {
if (typeof window === 'undefined') {
throw new Error('No window present, mock it first')
}
const video = window.document.createElement('video');
video.width = 1234;
video.height = 1234;
return video;
},
mockImageCreators() {
RobbieVisio._createImageCaptureElements = () => {
RobbieVisio._video = this.video();
RobbieVisio._canvas = this.canvas();
}
},
mockXMLHttpRequest() {
global.XMLHttpRequest = sinon.useFakeXMLHttpRequest();
}
}