@house-agency/brewsession
Version:
The Brewery Session Manager
145 lines (134 loc) • 4.58 kB
JavaScript
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);
});
});