UNPKG

robbie-sdk

Version:

Robbie Visio SDK to send events for analaysis

157 lines (138 loc) 4.42 kB
import { expect } from 'chai'; import { describe, it, beforeEach, afterEach } from 'mocha'; import sinon from 'sinon'; import RobbieVisio from '../src'; import Mock from './mock'; let server; describe('Robbie Visio', function () { // Changing from default timeout to 3 seconds this.timeout(3000); beforeEach(() => { Mock.mockWindow(); Mock.mockNavigator(); Mock.mockXMLHttpRequest(); Mock.navigatorDevices(['videoinput']); Mock.cameraPermissionAllowed(true); Mock.mockImageCreators(); RobbieVisio.robbieApi = null; RobbieVisio.session = null; server = sinon.fakeServer.create(); server.respondWith(...Mock.sinon.okCreateSession); server.respondWith(...Mock.sinon.okRequestFrame); server.respondWith(...Mock.sinon.okCloseSession); server.autoRespond = true; }); afterEach(() => { server.restore(); }); it('should save specified a token', (done) => { RobbieVisio.init('fake-token') .catch(error => done(error)); expect(RobbieVisio.robbieApi).to.not.equal(undefined); done(); }); it('lets user create Session', (done) => { RobbieVisio.init('fake-token'); RobbieVisio.createSession() .then((session) => { expect(session).to.exist; expect(session.id).to.exist; done(); }) .catch(error => done(error)); }); it('does not let create Session if there is no token', (done) => { RobbieVisio.createSession() .then(() => done(new Error('No session should have been created'))) .catch((error) => { expect(error).to.be.an('error'); done(); }); }); it('does not let create Session if there is no camera', (done) => { Mock.navigatorDevices([]); RobbieVisio.init('fake-token') .then(() => RobbieVisio.createSession()) .then(() => done(new Error('No session should have been created'))) .catch((error) => { expect(error).to.be.an('error'); done(); }); }); it('lets user set camera permission', (done) => { Mock.cameraPermissionAllowed(true); RobbieVisio.init('fake-token') .then(() => RobbieVisio.validateCameraPermissions()) .then(() => done()) .catch(error => done(error)); }); it('let user refuse camera permission', (done) => { Mock.cameraPermissionAllowed(false); RobbieVisio.validateCameraPermissions() .then(() => done(new Error('Camera permission should be refused'))) .catch(() => done()); }); it('automatically create a Session when initialized with no params', (done) => { RobbieVisio.init('fake-token') .then(() => { expect(RobbieVisio.session).to.exist; done(); }) .catch(error => done(error)); }); it('does not allow multiple Session creation', (done) => { RobbieVisio.init('fake-token') .then(() => RobbieVisio.init('fake-token')) .then(() => done(new Error('Should not let event to be sent'))) .catch((error) => { expect(error).to.be.an('error'); done(); }); }); it('allow Session creation after closing it', (done) => { RobbieVisio.init('fake-token') .then(() => { RobbieVisio.close(); return RobbieVisio.init('fake-token'); }) .then(() => done()) .catch(error => done(error)); }); it('returns emotions when session is ok', (done) => { RobbieVisio.init('fake-token', {}, (emotions) => { expect(emotions).to.not.be.undefined; done(); RobbieVisio.close(); }) .catch(error => done(error)); }); it('returns multiple emotions', (done) => { let counter = 0; RobbieVisio.init('fake-token', {}, (emotions) => { counter += 1; if (counter >= 2) { done(); RobbieVisio.close(); } }); }); it('can close recording', (done) => { RobbieVisio.init('fake-token') .then(() => { RobbieVisio.close(); expect(RobbieVisio.session).to.be.null; done(); }) .catch(error => done(error)); }); it('sends labels when is recording', (done) => { RobbieVisio.init('fake-token', { test: 'key' }) .then(() => { const body = JSON.parse(server.requests[1].requestBody); expect(body).to.have.property('labels'); expect(body.labels).to.have.property('test'); expect(body.labels.test).to.equal('key'); done(); }); }); });