UNPKG

bricks

Version:

Bricks Application Server

351 lines (300 loc) 12.7 kB
var vows = require('vows'), assert = require('assert'), server = require('../lib/appserver'), mrequest = require('./mocks/request'), mresponse = require('./mocks/response'); vows.describe('Routes').addBatch({ 'initial appserver': { topic: function () { var appserver = new server.appserver(); return appserver.getRoutes(); }, 'has four empty routes': function (topic) { assert.equal(topic.length, 4); assert.equal(topic[0].length, 0); assert.equal(topic[1].length, 0); assert.equal(topic[2].length, 0); assert.equal(topic[3].length, 0); } }, 'can add a route to pre': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'pre' }); return appserver.getRoutes(); }, 'has an entry in pre': function (topic) { assert.equal(topic.length, 4); assert.equal(topic[0].length, 1); assert.equal(topic[1].length, 0); assert.equal(topic[2].length, 0); assert.equal(topic[3].length, 0); } }, 'a route when added to pre': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'pre', added: 0 }); var route = appserver.addRoute(".+", function () { }, { section: 'pre' }); appserver.addRoute(".+", function () { }, { section: 'pre', added: 1 }); return [ appserver, route ]; }, 'can be removed correctly': function (topic) { var appserver = topic[0]; assert.equal(appserver.removeRoute(topic[1]), true); var routes = appserver.getRoutes(); assert.equal(routes.length, 4); assert.equal(routes[0].length, 2); } }, 'can add a route to main': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'main' }); return appserver.getRoutes(); }, 'has an entry in routes': function (topic) { assert.equal(topic.length, 4); assert.equal(topic[0].length, 0); assert.equal(topic[1].length, 1); assert.equal(topic[2].length, 0); assert.equal(topic[3].length, 0); } }, 'a route when added to main': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'main', added: 0 }); var route = appserver.addRoute(".+", function () { }, { section: 'main' }); appserver.addRoute(".+", function () { }, { section: 'main', added: 1 }); return [ appserver, route ]; }, 'can be removed correctly': function (topic) { var appserver = topic[0]; assert.equal(appserver.removeRoute(topic[1]), true); var routes = appserver.getRoutes(); assert.equal(routes.length, 4); assert.equal(routes[1].length, 2); } }, 'can add a route to post': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'post' }); return appserver.getRoutes(); }, 'has an entry in post': function (topic) { assert.equal(topic.length, 4); assert.equal(topic[0].length, 0); assert.equal(topic[1].length, 0); assert.equal(topic[2].length, 1); assert.equal(topic[3].length, 0); } }, 'a route when added to post': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'post', added: 0 }); var route = appserver.addRoute(".+", function () { }, { section: 'post' }); appserver.addRoute(".+", function () { }, { section: 'post', added: 1 }); return [ appserver, route ]; }, 'can be removed correctly': function (topic) { var appserver = topic[0]; assert.equal(appserver.removeRoute(topic[1]), true); var routes = appserver.getRoutes(); assert.equal(routes.length, 4); assert.equal(routes[2].length, 2); } }, 'can add a route to final': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'final' }); return appserver.getRoutes(); }, 'has an entry in final': function (topic) { assert.equal(topic.length, 4); assert.equal(topic[0].length, 0); assert.equal(topic[1].length, 0); assert.equal(topic[2].length, 0); assert.equal(topic[3].length, 1); } }, 'a route when added to final': { topic: function () { var appserver = new server.appserver(); appserver.addRoute(".+", function () { }, { section: 'final', added: 0 }); var route = appserver.addRoute(".+", function () { }, { section: 'final' }); appserver.addRoute(".+", function () { }, { section: 'final', added: 1 }); return [ appserver, route ]; }, 'can be removed correctly': function (topic) { var appserver = topic[0]; assert.equal(appserver.removeRoute(topic[1]), true); var routes = appserver.getRoutes(); assert.equal(routes.length, 4); assert.equal(routes[3].length, 2); } }, 'a route added to pre as top': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { thisp.callback('wrong one'); }, { section: "pre" }); appserver.addRoute(".+", function (request, response, options) { thisp.callback("ok"); }, { section: "pre", top: true }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'fires in the correct order': function (err, request, response, options) { assert.equal(err, "ok"); } }, 'a route added to main as top': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { thisp.callback('wrong one'); }, { section: "main" }); appserver.addRoute(".+", function (request, response, options) { thisp.callback("ok"); }, { section: "main", top: true }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'fires in the correct order': function (err, request, response, options) { assert.equal(err, "ok"); } }, 'a route added to post as top': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { thisp.callback('wrong one'); }, { section: "post" }); appserver.addRoute(".+", function (request, response, options) { thisp.callback("ok"); }, { section: "post", top: true }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'fires in the correct order': function (err, request, response, options) { assert.equal(err, "ok"); } }, 'a route added to final as top': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { thisp.callback('wrong one'); }, { section: "final" }); appserver.addRoute(".+", function (request, response, options) { thisp.callback("ok"); }, { section: "final", top: true }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'fires in the correct order': function (err, request, response, options) { assert.equal(err, "ok"); } }, 'a route added to pre': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { try { response.write('test'); thisp.callback("ok"); } catch (error) { thisp.callback("error"); } }, { section: "pre" }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'can write without error': function (err, request, response, options) { assert.equal(err, "ok"); } }, 'a route added to main': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { try { response.write('test'); thisp.callback("ok"); } catch (error) { thisp.callback("error"); } }, { section: "main" }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'can write without error': function (err, request, response, options) { assert.equal(err, "ok"); } }, 'a route added to post': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { try { response.write('test'); thisp.callback("ok"); } catch (error) { thisp.callback("error"); } }, { section: "post" }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'can write without error': function (err, request, response, options) { assert.equal(err, "ok"); } }, 'a route added to final': { topic: function () { var thisp = this; var appserver = new server.appserver({ checkRoute: function () { return true; } }); appserver.addRoute(".+", function (request, response, options) { try { response.write('test'); thisp.callback("ok"); } catch (error) { thisp.callback("error"); } }, { section: "final" }); var res = new mresponse.response(); var req = new mrequest.request(); req.url = "/bar"; appserver.handleRequest(req, res, appserver); }, 'cannot write without error': function (err, request, response, options) { assert.equal(err, "error"); } } }).export(module);