shaman-website-compiler
Version:
Compile raw HTML, CSS and Javascript into the smallest possible, SEO friendly website.
135 lines • 7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
require("mocha");
var chai_1 = require("chai");
var sinon = require("sinon");
var http = require("http");
var fs = require("fs");
var app_composition_1 = require("./composition/app.composition");
var models_1 = require("./models");
var compiler_context_spec_1 = require("./data/compiler.context.spec");
var logger_1 = require("./logger");
var website_server_1 = require("./website-server");
describe('WebsiteRouter', function () {
var sandbox;
beforeEach(function () {
app_composition_1.IoC.snapshot();
sandbox = sinon.createSandbox();
app_composition_1.IoC.bind(app_composition_1.TYPES.WebsiteConfig).toConstantValue(new models_1.WebsiteConfig());
app_composition_1.IoC.bind(app_composition_1.TYPES.Logger).toConstantValue(new logger_1.Logger("error"));
});
afterEach(function () {
app_composition_1.IoC.restore();
sandbox.restore();
});
it('server should listen on port 3000 by default', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(function (_) {
var stub = sandbox.stub();
sandbox.stub(http, 'createServer').returns({ listen: stub });
var server = new website_server_1.WebsiteServer();
server.start([]);
(0, chai_1.expect)(stub.calledWith(3000)).to.be.true;
done();
});
});
it('server should set listening to true', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(function (_) {
sandbox.stub(http, 'createServer').returns({ listen: sandbox.stub() });
var server = new website_server_1.WebsiteServer();
server.start([]);
(0, chai_1.expect)(server.listening).to.be.true;
done();
});
});
it('server should return 404 if route is not found', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(function (_) {
var responseCode = -1;
var response = { writeHead: function (_a, _b) { responseCode = _a; }, end: done };
var stub = sandbox.stub(http, 'createServer');
stub = stub.returns({ listen: sandbox.stub() });
stub = stub.yields({ url: '/' }, response);
var server = new website_server_1.WebsiteServer();
server.start([]);
(0, chai_1.expect)(responseCode).to.equal(404);
});
});
it('server should return 404 if asset file not found', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(function (_) {
var responseCode = -1;
var response = { writeHead: function (_a, _b) { responseCode = _a; }, end: done };
var stub = sandbox.stub(http, 'createServer');
stub = stub.returns({ listen: sandbox.stub() });
stub = stub.yields({ url: '/sample.png' }, response);
var server = new website_server_1.WebsiteServer();
server.start([]);
(0, chai_1.expect)(responseCode).to.equal(404);
});
});
it('server should return asset file', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(addTestAssetFileToContext).then(function (_) {
var responseHeader = { 'Content-Type': 'NA' };
var response = { writeHead: function (_a, _b) { responseHeader = _b; }, end: function () { } };
var stub = sandbox.stub(http, 'createServer');
stub = stub.returns({ listen: sandbox.stub() });
stub = stub.yields({ url: '/sample.png' }, response);
sandbox.stub(fs, 'createReadStream').returns({ pipe: function (_res) { } });
var server = new website_server_1.WebsiteServer();
server.start([]);
(0, chai_1.expect)(responseHeader['Content-Type']).to.equal('image/png');
done();
});
});
it('server should return index.html file', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(function (_) {
var onWrite = function (content) {
(0, chai_1.expect)(content).to.equal('<html>index.html</html>');
done();
};
var response = { writeHead: function (_a, _b) { }, end: function () { }, write: onWrite };
var stub = sandbox.stub(http, 'createServer');
stub = stub.returns({ listen: sandbox.stub() });
stub = stub.yields({ url: '/index.html' }, response);
var server = new website_server_1.WebsiteServer();
var route = new models_1.Route('index.html', '<html>index.html</html>', 'html');
server.start([route]);
});
});
it('server should return sitemap.xml file', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(function (_) {
var onWrite = function (content) {
(0, chai_1.expect)(content).to.equal('<xml>sitemap.xml</xml>');
done();
};
var response = { writeHead: function (_a, _b) { }, end: function () { }, write: onWrite };
var stub = sandbox.stub(http, 'createServer');
stub = stub.returns({ listen: sandbox.stub() });
stub = stub.yields({ url: '/sitemap.xml' }, response);
sandbox.stub(fs, 'createReadStream').returns({ pipe: function (_res) { } });
var server = new website_server_1.WebsiteServer();
var route = new models_1.Route('sitemap.xml', '<xml>sitemap.xml</xml>', 'xml');
server.start([route]);
});
});
it('server should remove query string when looking for route', function (done) {
(0, compiler_context_spec_1.CreateDataContext)(app_composition_1.IoC).then(function (_) {
var onWrite = function (content) {
(0, chai_1.expect)(content).to.equal('<html>index.html</html>');
done();
};
var response = { writeHead: function (_a, _b) { }, end: function () { }, write: onWrite };
var stub = sandbox.stub(http, 'createServer');
stub = stub.returns({ listen: sandbox.stub() });
stub = stub.yields({ url: '/index.html?test=true' }, response);
var server = new website_server_1.WebsiteServer();
var route = new models_1.Route('index.html', '<html>index.html</html>', 'html');
server.start([route]);
});
});
});
function addTestAssetFileToContext(context) {
var file = new models_1.FileData('sample.png', './sample.png');
file.available = true;
context.models.assets.add('sample.png', file);
return context.saveChanges().then(function (_) { return (context); });
}
//# sourceMappingURL=website-server.spec.js.map