UNPKG

@house-agency/brewsession

Version:

The Brewery Session Manager

177 lines (165 loc) 5.1 kB
require('@house-agency/brewtils/config').load('test/test.json'); require('@house-agency/brewtils/log').level('fatal'); const expect = require('chai').expect; const q = require('q'); const service = require('../service'); describe('Session Service', () => { it('shall set, get and delete session oriented data', done => { service.data('session-token', 'identifier', 'set', 'data') .then(() => { return service.data( 'session-token', 'identifier', 'get' ); }) .then(results => { expect(results).to.equal('data'); return service.data( 'session-token', 'identifier', 'del' ); }) .then(() => { return service.data( 'session-token', 'identifier', 'get' ); }) .catch(error => { expect(error).to.be.an.instanceOf(Error); expect(error.message).to.equal('Not found'); }) .done(done); }); it('shall create, get, match and remove api keys', done => { service.generate_apikey() .then(key => { expect(key).to.match(/^[0-9]+:[0-9a-zA-Z]+$/); return service.match_apikey(key); }) .then(key => { return service.get_apikeys() .then(keys => { expect(keys).to.have.lengthOf(1); expect(keys[0]).to.equal(key); return service.remove_apikey(key); }); }) .then(() => { return service.get_apikeys(); }) .then((keys) => { expect(keys).to.have.lengthOf(0); }) .done(done); }); it('shall throw an error if api key is not matched', done => { service.match_apikey('Some random try of imitate a key') .then(() => { throw new Error('The key must not get validated!'); }) .catch(error => { expect(error).to.be.an.instanceOf(Error); expect(error.message).to.equal('Invalid key'); }) .done(done); }); it('shall create validate the key in config', done => { service.match_apikey('test-key') .then(key => { expect(key).to.equal('test-key'); }) .done(done); }); it('shall create api key and let it time out', done => { service.generate_apikey() .then(key => { return q.all([ q(key), service.generate_apikey() ]); }) .spread((key1, key2) => { if (key2 !== key2) { throw new Error('Only one key should\'ve been created!'); } return key1; }) .delay(500) .then(key => { return q.all([ q(key), service.generate_apikey() ]); }) .spread((key1, key2) => { return q.delay(500) .then(() => { return service.generate_apikey(); }) .then(() => { return q.all([ service.get_apikeys(), service.match_apikey(key1) .catch(error => { expect(error).to.be.an.instanceOf(Error); expect(error.message).to.equal('Invalid key'); }), service.match_apikey(key2) ]); }); }) .spread(keys => { expect(keys).to.have.lengthOf(2); }) .done(done); }); it('shall create api key and create, validate and exceed session', done => { service.generate_apikey() .then(key => { return service.create( key, 'some user-agent', 'some other stuff' ); }) .then(token => { return service.verify(token, 'failing stuff') .then(() => { throw new Error('Fail'); }) .catch(error => { expect(error).to.be.an.instanceOf(Error); expect(error.message).to.equal('Invalid session token'); }) .then(() => { return service.verify( token, 'some user-agent', 'some other stuff' ); }); }) .then(token => { return service.exceed(token); }) .catch(() => { throw new Error('Fail'); }) .delay(500) .then(token => { return service.verify(token); }) .then(() => { throw new Error('Fail'); }) .catch(error => { expect(error).to.be.an.instanceOf(Error); expect(error.message).to.equal('Invalid session token'); }) .done(done); }); });