swint-middleware
Version:
Essential expressJS middlewares and general middleware loader for Swint
383 lines (324 loc) • 7.47 kB
JavaScript
var assert = require('assert'),
express = require('express'),
http = require('http'),
request = require('request'),
swintMiddleware = require('../lib');
global.swintVar.printLevel = 5;
describe('Loader test', function() {
it('Default loads', function() {
var loaded = Object.keys(swintMiddleware.middlewares),
middlewares = [
'body-parser',
'check-hash',
'cookie-parser',
'cors',
'favicon',
'jwt',
'log-end',
'log-start',
'method-override',
'session',
'swint-style-api'
];
middlewares.forEach(function(m) {
assert.notEqual(loaded.indexOf(m), -1);
if(swintMiddleware.middlewares[m].length === 3) {
assert(true);
} else if(swintMiddleware.middlewares[m].length <= 1) {
assert.equal(swintMiddleware.middlewares[m]({}).length, 3);
} else {
assert(false);
}
});
assert.equal(loaded.length, middlewares.length);
});
});
describe('favicon', function() {
var server;
before(function() {
var app = express();
app.set('config', {
http: {
validHost: ['localhost']
}
});
app.use(swintMiddleware.middlewares.favicon({}));
app.get('/', function(req, res) {
res.send('');
});
server = http.createServer(app);
server.listen(8080);
});
it('Check favicon size', function(done) {
request.get({
url: 'http://localhost:8080/favicon.ico',
followRedirect: false
}, function(err, resp, body) {
assert(resp.headers['content-length'], '837');
done();
});
});
after(function(done) {
server.close(function() {
done();
});
});
});
describe('CORS', function() {
var server;
before(function() {
var app = express();
app.set('config', {
http: {
validHost: ['localhost']
}
});
app.use(swintMiddleware.middlewares.cors({
allowedOrigins: ['http://localhost:8080', 'http://example.com']
}));
app.get('/', function(req, res) {
res.send('');
});
server = http.createServer(app);
server.listen(8080);
});
it('Check header', function(done) {
request.get({
url: 'http://localhost:8080/',
followRedirect: false,
headers: {
origin: 'http://example.com'
}
}, function(err, resp, body) {
assert.equal(resp.headers['access-control-allow-origin'], 'http://example.com');
assert.equal(resp.headers['access-control-allow-headers'], 'Origin, X-Requested-With, Content-Type, Accept');
assert.equal(resp.headers['access-control-allow-credentials'], 'true');
done();
});
});
after(function(done) {
server.close(function() {
done();
});
});
});
describe('CORS II', function() {
var server;
before(function() {
var app = express();
app.set('config', {
http: {
validHost: ['localhost']
}
});
app.use(swintMiddleware.middlewares.cors({
allowedOrigins: ['*']
}));
app.get('/', function(req, res) {
res.send('');
});
server = http.createServer(app);
server.listen(8080);
});
it('Check header', function(done) {
request.get({
url: 'http://localhost:8080/',
followRedirect: false,
headers: {
origin: 'http://example.com'
}
}, function(err, resp, body) {
assert.equal(resp.headers['access-control-allow-origin'], 'http://example.com');
assert.equal(resp.headers['access-control-allow-headers'], 'Origin, X-Requested-With, Content-Type, Accept');
assert.equal(resp.headers['access-control-allow-credentials'], 'true');
done();
});
});
after(function(done) {
server.close(function() {
done();
});
});
});
describe('logger', function() {
var server,
log;
before(function() {
var app = express();
app.use(swintMiddleware.middlewares['log-start']());
app.get('/', function(req, res, next) {
res.send('');
next();
});
app.use(swintMiddleware.middlewares['log-end']());
app.use(function(req, res) {
log = req.log;
});
server = http.createServer(app);
server.listen(8080);
});
it('Check header', function(done) {
request.get({
url: 'http://localhost:8080/',
followRedirect: false
}, function(err, resp, body) {
var logKeys = Object.keys(log),
keys = [
'ip',
'protocol',
'host',
'url',
'userAgent',
'input',
'sid',
'timestamp',
'elapsed',
'logTime'
];
logKeys.forEach(function(k) {
assert.notEqual(keys.indexOf(k), -1);
});
assert.equal(logKeys.length, keys.length);
done();
});
});
after(function(done) {
server.close(function() {
done();
});
});
});
describe('swint style api', function() {
var server;
before(function() {
var app = express();
app.use(swintMiddleware.middlewares['log-start']());
app.use(swintMiddleware.middlewares['swint-style-api']);
app.get('/', function(req, res, next) {
req.out('foo', 'bar');
req.success();
next();
});
app.use(swintMiddleware.middlewares['log-end']());
server = http.createServer(app);
server.listen(8080);
});
it('Check header', function(done) {
request.get({
url: 'http://localhost:8080/?input=' + JSON.stringify({
pass: 'foo1',
key: 'bar1',
lv1: {
pwd: 'foo2',
secret: 'bar2',
lv2: {
pw: 'foo3',
lv3: {
password: 'foo4'
}
}
}
}),
followRedirect: false
}, function(err, resp, body) {
assert.deepEqual(JSON.parse(body), {
success: true,
session: false,
error: null,
token: false,
data: {
foo: "bar"
}
});
done();
});
});
after(function(done) {
server.close(function() {
done();
});
});
});
describe('check-hash', function() {
it('basic success', function(done) {
var checkHash = swintMiddleware.middlewares['check-hash'],
checkHashFunc = checkHash({
keys: ['C7tO1ClvR/Gz7jJ']
}),
req = {
headers: {
'x-swint-key': 'C7tO1ClvR/Gz7jJ',
'x-swint-secret': 'cEVEf3Ka3XwijpAH2vMYdD98x'
}
};
checkHashFunc(req, {}, function() {
assert(req.swintCheckHash);
done();
});
});
it('key length fail', function(done) {
var checkHash = swintMiddleware.middlewares['check-hash'],
checkHashFunc = checkHash({
keys: ['C7tO1ClvR/Gz7j']
}),
req = {
headers: {
'x-swint-key': 'C7tO1ClvR/Gz7j',
'x-swint-secret': 'cEVEf3Ka3XwijpAH2vMYdD98x'
}
};
checkHashFunc(req, {}, function() {
assert(!req.swintCheckHash);
done();
});
});
it('key fail', function(done) {
var checkHash = swintMiddleware.middlewares['check-hash'],
checkHashFunc = checkHash({
keys: []
}),
req = {
headers: {
'x-swint-key': 'C7tO1ClvR/Gz7jJ',
'x-swint-secret': 'cEVEf3Ka3XwijpAH2vMYdD98x'
}
};
checkHashFunc(req, {}, function() {
assert(!req.swintCheckHash);
done();
});
});
it('secret fail', function(done) {
var checkHash = swintMiddleware.middlewares['check-hash'],
checkHashFunc = checkHash({
keys: []
}),
req = {
headers: {
'x-swint-key': 'C7tO1ClvR/Gz7jJ',
'x-swint-secret': 'cEVEf3Ka3XwijpAH2vMYdD98y'
}
};
checkHashFunc(req, {}, function() {
assert(!req.swintCheckHash);
done();
});
});
});
describe('jwt', function() {
it('jwt basic', function(done) {
var jwt = require('jsonwebtoken'),
token = jwt.sign({ foo: 'bar' }, 'SwintIsForTwins', { expiresIn: '1d' });
jwtMid = swintMiddleware.middlewares['jwt'],
jwtFunc = jwtMid({}),
req = {
headers: {
authorization: 'Bearer ' + token
}
};
jwtFunc(req, {}, function() {
assert(req.token);
done();
});
});
});