UNPKG

shaman-website-compiler

Version:

Compile raw HTML, CSS and Javascript into the smallest possible, SEO friendly website.

135 lines 7 kB
"use strict"; 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