UNPKG

@house-agency/brewsession

Version:

The Brewery Session Manager

145 lines (134 loc) 4.58 kB
require('@house-agency/brewtils/config').load('test/test.json'); require('@house-agency/brewtils/log').level('fatal'); const expect = require('chai').expect; const express = require('express'); const format = require('util').format; const http = require('http'); const q = require('q'); const request = require('q-io/http').request; const route = require('../route'); const service = require('../service'); const signature = require('cookie-signature'); const webapp = express(); const server = http.createServer(webapp); webapp.use(/\/api(?!\/session\/create)/, route.verify_http_request); webapp.use('/api/session', route.routes); server.listen(5555); describe('Session Route', () => { it('shall post a create session request and verify with a header', done => { service.generate_apikey() .then(key => { return request({ url: 'http://localhost:5555/api/session/create', method: 'POST', headers: { 'Content-Type': 'application/json', 'User-Agent': 'tester' }, body: [format('{"key":"%s"}', key)] }); }) .then(res => { expect(res.status).to.equal(200); return res.body.read(); }) .then(body => { const token = JSON.parse(body).token; expect(token).to.exist; return request({ url: 'http://localhost:5555/api/session/status', method: 'GET', headers: { 'Authorization': format('Bearer %s', token), 'User-Agent': 'tester' } }); }) .then(res => { expect(res.status).to.equal(200); return res.body.read(); }) .then(body => { expect(JSON.parse(body).status).to.equal('ok'); }) .done(done); }); it('shall post a create session request and verify with a cookie', done => { service.generate_apikey() .then(key => { return request({ url: 'http://localhost:5555/api/session/create', method: 'POST', headers: { 'Content-Type': 'application/json', 'User-Agent': 'tester' }, body: [format('{"key":"%s"}', key)] }); }) .then(res => { expect(res.status).to.equal(200); return res.body.read(); }) .then(body => { const token = JSON.parse(body).token; expect(token).to.exist; return request({ url: 'http://localhost:5555/api/session/status', method: 'GET', headers: { 'User-Agent': 'tester', 'Cookie': 'Authorization=' + token } }); }) .then(res => { expect(res.status).to.equal(200); return res.body.read(); }) .then(body => { expect(JSON.parse(body).status).to.equal('ok'); }) .done(done); }); it('shall fail on non-authorized requests', done => { q.all([ request({ url: 'http://localhost:5555/api/session/create', method: 'POST', headers: { 'Content-Type': 'application/json', 'User-Agent': 'tester' }, body: ['{"key":"failing key"}'] }), request({ url: 'http://localhost:5555/api/session/create', method: 'POST', body: ['token=skdfhjskdfhjsdkfhj'] }) ]) .spread((res1, res2) => { expect(res1.status).to.equal(403); expect(res2.status).to.equal(403); return q.all([ request({ url: 'http://localhost:5555/api/session/status', method: 'GET', headers: { 'Authorization': 'Bearing failing token' } }), request({ url: 'http://localhost:5555/api/session/status', method: 'GET' }) ]); }) .spread((res1, res2) => { expect(res1.status).to.equal(403); expect(res2.status).to.equal(403); }) .done(done); }); });