robbie-sdk
Version:
Robbie Visio SDK to send events for analaysis
157 lines (138 loc) • 4.42 kB
JavaScript
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();
});
});
});