0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-13 22:41:32 -05:00
ghost/core/test/unit/middleware/serve-shared-file_spec.js
Cameron Viner faba83d5dc deps: should@8.2.1
closes #6448
-upgraded should.js to the latest version (8.2.1)
-Changed the tests so that they comply with the breaking changes introduced in the new version of should.js
-Installs the package should-http so should.be.json() can be used
-Installs the package should-sinon so that should.be.calledOnce() can be used
2016-02-09 13:39:10 +00:00

105 lines
3.5 KiB
JavaScript

/*globals describe, it, beforeEach, afterEach */
/*jshint expr:true*/
var fs = require('fs'),
sinon = require('sinon'),
serveSharedFile = require('../../../server/middleware/serve-shared-file'),
sandbox = sinon.sandbox.create();
describe('serveSharedFile', function () {
var res, req, next;
beforeEach(function () {
res = sinon.spy();
req = sinon.spy();
next = sinon.spy();
});
afterEach(function () {
sandbox.restore();
});
it('should return a middleware', function () {
var result = serveSharedFile('robots.txt', 'text/plain', 3600);
result.should.be.a.Function();
});
it('should skip if the request does NOT match the file', function () {
var middleware = serveSharedFile('robots.txt', 'text/plain', 3600);
req.path = '/favicon.ico';
middleware(req, res, next);
next.called.should.be.true();
});
it('should load the file and send it', function () {
var middleware = serveSharedFile('robots.txt', 'text/plain', 3600),
body = 'User-agent: * Disallow: /';
req.path = '/robots.txt';
sandbox.stub(fs, 'readFile', function (file, cb) {
cb(null, body);
});
res = {
writeHead: sinon.spy(),
end: sinon.spy()
};
middleware(req, res, next);
next.called.should.be.false();
res.writeHead.called.should.be.true();
res.writeHead.args[0][0].should.equal(200);
res.writeHead.calledWith(200, sinon.match.has('Content-Type')).should.be.true();
res.writeHead.calledWith(200, sinon.match.has('Content-Length')).should.be.true();
res.writeHead.calledWith(200, sinon.match.has('ETag')).should.be.true();
res.writeHead.calledWith(200, sinon.match.has('Cache-Control', 'public, max-age=3600')).should.be.true();
res.end.calledWith(body).should.be.true();
});
it('should send the correct headers', function () {
var middleware = serveSharedFile('robots.txt', 'text/plain', 3600),
body = 'User-agent: * Disallow: /';
req.path = '/robots.txt';
sandbox.stub(fs, 'readFile', function (file, cb) {
cb(null, body);
});
res = {
writeHead: sinon.spy(),
end: sinon.spy()
};
middleware(req, res, next);
next.called.should.be.false();
res.writeHead.called.should.be.true();
res.writeHead.args[0][0].should.equal(200);
res.writeHead.calledWith(200, sinon.match.has('Content-Type')).should.be.true();
res.writeHead.calledWith(200, sinon.match.has('Content-Length')).should.be.true();
res.writeHead.calledWith(200, sinon.match.has('ETag')).should.be.true();
res.writeHead.calledWith(200, sinon.match.has('Cache-Control', 'public, max-age=3600')).should.be.true();
});
it('should replace {{blog-url}} in text/plain', function () {
var middleware = serveSharedFile('robots.txt', 'text/plain', 3600),
body = 'User-agent: {{blog-url}}';
req.path = '/robots.txt';
sandbox.stub(fs, 'readFile', function (file, cb) {
cb(null, body);
});
res = {
writeHead: sinon.spy(),
end: sinon.spy()
};
middleware(req, res, next);
next.called.should.be.false();
res.writeHead.called.should.be.true();
res.end.calledWith('User-agent: http://127.0.0.1:2369').should.be.true();
});
});