219 lines
6.0 KiB
JavaScript
219 lines
6.0 KiB
JavaScript
'use strict';
|
|
|
|
var should = require('should');
|
|
var sinon = require('sinon');
|
|
var InsightAPI = require('../lib/index');
|
|
|
|
describe('Index', function() {
|
|
describe('@constructor', function() {
|
|
it('will set rate limiter options', function() {
|
|
var options = {};
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
rateLimiterOptions: options,
|
|
node: node
|
|
});
|
|
index.rateLimiterOptions.should.equal(options);
|
|
});
|
|
it('will set disable rate limiter option', function() {
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
disableRateLimiter: true,
|
|
node: node
|
|
});
|
|
index.disableRateLimiter.should.equal(true);
|
|
});
|
|
});
|
|
describe('#_getRateLimiter', function() {
|
|
it('will pass options to rate limiter', function() {
|
|
var options = {
|
|
whitelist: ['127.0.0.1']
|
|
};
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
rateLimiterOptions: options,
|
|
node: node
|
|
});
|
|
var limiter = index._getRateLimiter();
|
|
limiter.whitelist.should.eql(['127.0.0.1']);
|
|
});
|
|
});
|
|
describe('#cache', function() {
|
|
it('will set cache control header', function(done) {
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
enableCache: true,
|
|
node: node
|
|
});
|
|
var req = {};
|
|
var res = {
|
|
header: sinon.stub()
|
|
};
|
|
var middle = index.cache(10);
|
|
middle(req, res, function() {
|
|
res.header.callCount.should.equal(1);
|
|
res.header.args[0][0].should.equal('Cache-Control');
|
|
res.header.args[0][1].should.equal('public, max-age=10');
|
|
done();
|
|
});
|
|
});
|
|
it('will NOT set cache control header', function(done) {
|
|
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
|
|
var index = new InsightAPI({
|
|
enableCache: false,
|
|
node: node
|
|
});
|
|
var req = {};
|
|
var res = {
|
|
header: sinon.stub()
|
|
};
|
|
var middle = index.cache(10);
|
|
middle(req, res, function() {
|
|
res.header.callCount.should.equal(0);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
describe('#cacheShort', function() {
|
|
it('will set SHORT cache control header', function(done) {
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
enableCache: true,
|
|
cacheShortSeconds: 35,
|
|
node: node
|
|
});
|
|
var req = {};
|
|
var res = {
|
|
header: sinon.stub()
|
|
};
|
|
var middle = index.cacheShort();
|
|
middle(req, res, function() {
|
|
res.header.callCount.should.equal(1);
|
|
res.header.args[0][0].should.equal('Cache-Control');
|
|
res.header.args[0][1].should.equal('public, max-age=35');
|
|
done();
|
|
});
|
|
});
|
|
it('will set SHORT DEFAULT cache control header', function(done) {
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
enableCache: true,
|
|
node: node
|
|
});
|
|
var req = {};
|
|
var res = {
|
|
header: sinon.stub()
|
|
};
|
|
var middle = index.cacheShort();
|
|
middle(req, res, function() {
|
|
res.header.callCount.should.equal(1);
|
|
res.header.args[0][0].should.equal('Cache-Control');
|
|
res.header.args[0][1].should.equal('public, max-age=30');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
describe('#cacheLong', function() {
|
|
it('will set LONG cache control header', function(done) {
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
enableCache: true,
|
|
cacheLongSeconds: 86400000,
|
|
node: node
|
|
});
|
|
var req = {};
|
|
var res = {
|
|
header: sinon.stub()
|
|
};
|
|
var middle = index.cacheLong();
|
|
middle(req, res, function() {
|
|
res.header.callCount.should.equal(1);
|
|
res.header.args[0][0].should.equal('Cache-Control');
|
|
res.header.args[0][1].should.equal('public, max-age=86400000');
|
|
done();
|
|
});
|
|
});
|
|
it('will set LONG DEFAULT cache control header', function(done) {
|
|
|
|
var node = { services: { block: {} },
|
|
log: sinon.stub()
|
|
};
|
|
var index = new InsightAPI({
|
|
enableCache: true,
|
|
node: node
|
|
});
|
|
var req = {};
|
|
var res = {
|
|
header: sinon.stub()
|
|
};
|
|
var middle = index.cacheLong();
|
|
middle(req, res, function() {
|
|
res.header.callCount.should.equal(1);
|
|
res.header.args[0][0].should.equal('Cache-Control');
|
|
res.header.args[0][1].should.equal('public, max-age=86400');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
describe('#setupRoutes', function() {
|
|
it('will use rate limiter by default', function() {
|
|
var node = { services: { block: {} } };
|
|
var index = new InsightAPI({
|
|
node: node
|
|
});
|
|
var middlewareFunc = sinon.stub();
|
|
var middleware = sinon.stub().returns(middlewareFunc);
|
|
var limiter = {
|
|
middleware: middleware
|
|
};
|
|
index._getRateLimiter = sinon.stub().returns(limiter);
|
|
var use = sinon.stub();
|
|
var app = {
|
|
use: use,
|
|
get: sinon.stub(),
|
|
param: sinon.stub(),
|
|
post: sinon.stub()
|
|
};
|
|
index.setupRoutes(app);
|
|
use.callCount.should.be.above(0);
|
|
use.args[0][0].should.equal(middlewareFunc);
|
|
middleware.callCount.should.equal(1);
|
|
});
|
|
it('will NOT use rate limiter if disabled', function() {
|
|
var node = { services: { block: {} } };
|
|
var index = new InsightAPI({
|
|
node: node,
|
|
disableRateLimiter: true
|
|
});
|
|
index._getRateLimiter = sinon.stub();
|
|
var use = sinon.stub();
|
|
var app = {
|
|
use: use,
|
|
get: sinon.stub(),
|
|
param: sinon.stub(),
|
|
post: sinon.stub()
|
|
};
|
|
index.setupRoutes(app);
|
|
index._getRateLimiter.callCount.should.equal(0);
|
|
});
|
|
});
|
|
});
|