var assert = require("assert"); var sinon = require("sinon"); var yaps = require("../"); suite("Server.Constructor", function(){ test("should setup default attributes", function(){ var server = new yaps.server(); assert.deepEqual(server.settings, {}); assert.equal(server.bind, "0.0.0.0:8000"); assert.deepEqual(server.enabledPlugins, []); assert.deepEqual(server.routes, {}); assert.deepEqual(server.notFound, []); assert.deepEqual(server.setup, []); assert.ok(server.server.yaps); }); test("should take our provided settings", function(){ var server = new yaps.server({ test: true, bind: "127.0.0.1:9090", }); assert.deepEqual(server.settings, { test: true, bind: "127.0.0.1:9090", }); assert.equal(server.bind, "127.0.0.1:9090"); }); test("should take out provided http server", function(){ var server = new yaps.server({}, { test: true, }); var keys = []; for(var key in server.server){ keys.push(key); } assert.deepEqual(keys, ["test", "yaps"]); assert.equal(server.server.test, true); assert.ok(server.server.yaps); }); }); suite("Server.Stop", function(){ test("should call http_server.close on stop", function(){ var http_server_api = { close: function(){} }; var http_server = sinon.mock(http_server_api); http_server.expects("close").once(); var server = new yaps.server({}, http_server_api); server.stop(); http_server.verify(); }); }); suite("Server.ErrorHandler", function(){ test("should raise Error when errorHandler is called", function(){ var server = new yaps.server(); assert.throws(function(){ server.errorHandler("test error message"); }, Error); }); }); suite("Server.RegisterPlugin", function(){ test("should push an instance of the plugin to server.enabledPlugins", function(){ var plugin = function(options){ this.test = true; this.settings = options; }; var server = new yaps.server({ some: "setting", }); server.registerPlugin(plugin); assert.equal(server.enabledPlugins.length, 1); assert.equal(server.enabledPlugins[0].test, true); assert.deepEqual(server.enabledPlugins[0].settings, { some: "setting", }); }); test("should transfer routes from plugin to server", function(){ var plugin = function(options){ this.routes = { GET: { "/test": [ "handler_1", "handler_2", ] }, TEST: { "/test": [ "handler_3", "handler_4", ] } }; }; var server = new yaps.server(); server.registerPlugin(plugin); assert.ok(server.routes.GET); assert.ok(server.routes.TEST); assert.deepEqual(server.routes.GET["/test"], ["handler_1", "handler_2"]); assert.deepEqual(server.routes.TEST["/test"], ["handler_3", "handler_4"]); }); test("should transfer routes from multiple plugins without overwriting any", function(){ var plugin_1 = function(options){ this.routes = { GET: { "/test": [ "handler_1", "handler_2", ] }, }; }; var plugin_2 = function(options){ this.routes = { GET: { "/test": [ "handler_3", "handler_4", ] }, }; }; var server = new yaps.server(); server.registerPlugin(plugin_1); server.registerPlugin(plugin_2); assert.ok(server.routes.GET); assert.deepEqual(server.routes.GET["/test"], ["handler_1", "handler_2", "handler_3", "handler_4"]); }); test("should append plugins notFound to server", function(){ var plugin = function(options){ this.notFound = "handler"; }; var server = new yaps.server(); server.registerPlugin(plugin); assert.deepEqual(server.notFound, ["handler"]); }); test("should append notFound from multiple plugins", function(){ var plugin_1 = function(options){ this.notFound = "handler_1"; }; var plugin_2 = function(options){ this.notFound = "handler_2"; }; var server = new yaps.server(); server.registerPlugin(plugin_1); server.registerPlugin(plugin_2); assert.deepEqual(server.notFound, ["handler_1", "handler_2"]); }); test("should append plugins setup to server", function(){ var plugin = function(options){ this.setup = ["handler_1", "handler_2"]; }; var server = new yaps.server(); server.registerPlugin(plugin); assert.deepEqual(server.setup, ["handler_1", "handler_2"]); }); test("should append setup from multiple plugins", function(){ var plugin_1 = function(options){ this.setup = ["handler_1", "handler_2"]; }; var plugin_2 = function(options){ this.setup = ["handler_3", "handler_4"]; }; var server = new yaps.server(); server.registerPlugin(plugin_1); server.registerPlugin(plugin_2); assert.deepEqual(server.setup, ["handler_1", "handler_2", "handler_3", "handler_4"]); }); }); suite("Server.Start", function(){ test("should call http_server.on and http_server.listen", function(){ var http_server_api = { on: function(){}, listen: function(){} }; var http_server = sinon.mock(http_server_api); http_server.expects("listen").withArgs("8000", "0.0.0.0").once(); http_server.expects("on").twice(); var server = new yaps.server({}, http_server_api); server.start(); http_server.verify(); }); test("should call http_server.listen with different http bind", function(){ var http_server_api = { on: function(){}, listen: function(){} }; var http_server = sinon.mock(http_server_api); http_server.expects("listen").withArgs("9090", "127.0.0.1").once(); http_server.expects("on").twice(); var server = new yaps.server({ bind: "127.0.0.1:9090", }, http_server_api); server.start(); http_server.verify(); }); test("should call http_server.listen with unix socket", function(){ var http_server_api = { on: function(){}, listen: function(){} }; var http_server = sinon.mock(http_server_api); http_server.expects("listen").withArgs("unix://tmp/my.sock").once(); http_server.expects("on").twice(); var server = new yaps.server({ bind: "unix://tmp/my.sock", }, http_server_api); server.start(); http_server.verify(); }); test("should raise error when bind has more than 1 :", function(){ var http_server_api = { on: function(){}, listen: function(){} }; var http_server = sinon.mock(http_server_api); var server = new yaps.server({ bind: "127.0.0.1:90:90", }, http_server_api); assert.throws(function(){ server.start(); }, Error); }); test("should call http_server.listen properly with only port number", function(){ var http_server_api = { on: function(){}, listen: function(){} }; var http_server = sinon.mock(http_server_api); http_server.expects("listen").withArgs("9090", "0.0.0.0").once(); http_server.expects("on").twice(); var server = new yaps.server({ bind: "9090", }, http_server_api); server.start(); http_server.verify(); }); });