From 4dcb789f1762940d28b89e1ba703e9c276d51c2d Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 8 Mar 2012 01:02:38 +0000 Subject: [PATCH] added a simple test for the host_redirect middleware using mocha and should.js --- Makefile | 11 +++++-- package.json | 4 ++- src/test/host_redirect.test.coffee | 28 +++++++++++++++++ test/host_redirect.test.js | 50 ++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 src/test/host_redirect.test.coffee create mode 100644 test/host_redirect.test.js diff --git a/Makefile b/Makefile index 2b393a2..42006f5 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,11 @@ .SILENT: -.PHONY: build watch +.PHONY: build watch docs test -COFFEE_SRC = src -COFFEE_OUT = . BIN = ./node_modules/.bin +COFFEE_SRC = ./src +COFFEE_OUT = ./ +REPORTER = spec +TEST_DIR = ./test build: $(BIN)/coffee -c -o $(COFFEE_OUT) $(COFFEE_SRC) @@ -13,3 +15,6 @@ watch: docs: $(BIN)/docco $(shell find $(COFFEE_SRC) -name '*.coffee') + +test: + $(BIN)/mocha -R $(REPORTER) $(TEST_DIR)/*.js diff --git a/package.json b/package.json index 62ae46f..f68d1f2 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "coffeekup": "0.3.1" }, "devDependencies": { - "docco": "0.3.0" + "docco": "*", + "mocha": "*", + "should": "*" } } diff --git a/src/test/host_redirect.test.coffee b/src/test/host_redirect.test.coffee new file mode 100644 index 0000000..13172f7 --- /dev/null +++ b/src/test/host_redirect.test.coffee @@ -0,0 +1,28 @@ +require 'should' + +host_rewrite = require '../middleware/host_redirect' + +describe 'host_redirect', -> + + redirect_map = + 'www.foo.com': 'http://foo.com/', + 'img.foo.com': 'http://images.foo.com/' + + redirector = host_rewrite(redirect_map) + + describe 'when request does not match any entry in map', -> + it 'next() is called to pass on the request', (done) -> + req = { header: -> 'www.bar.com' } + res = {} + next = -> done() + redirector(req, res, next) + + describe 'when request matches an entry in map', -> + it 'req.redirect() is called with the new URL', (done) -> + req = { header: -> 'img.foo.com' } + res = + redirect: (url) -> + url.should.equal(redirect_map[req.header()]) + done() + next = -> + redirector(req, res, next) \ No newline at end of file diff --git a/test/host_redirect.test.js b/test/host_redirect.test.js new file mode 100644 index 0000000..50798ab --- /dev/null +++ b/test/host_redirect.test.js @@ -0,0 +1,50 @@ +(function() { + var host_rewrite; + + require('should'); + + host_rewrite = require('../middleware/host_redirect'); + + describe('host_redirect', function() { + var redirect_map, redirector; + redirect_map = { + 'www.foo.com': 'http://foo.com/', + 'img.foo.com': 'http://images.foo.com/' + }; + redirector = host_rewrite(redirect_map); + describe('when request does not match any entry in map', function() { + return it('next() is called to pass on the request', function(done) { + var next, req, res; + req = { + header: function() { + return 'www.bar.com'; + } + }; + res = {}; + next = function() { + return done(); + }; + return redirector(req, res, next); + }); + }); + return describe('when request matches an entry in map', function() { + return it('req.redirect() is called with the new URL', function(done) { + var next, req, res; + req = { + header: function() { + return 'img.foo.com'; + } + }; + res = { + redirect: function(url) { + url.should.equal(redirect_map[req.header()]); + return done(); + } + }; + next = function() {}; + return redirector(req, res, next); + }); + }); + }); + +}).call(this);