Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

165 lines (121 sloc) 4.774 kb
assert = require 'assert'
{ Router } = require '../index'
router = null
verbs =
get: 'GET'
post: 'POST'
put: 'PUT'
patch: 'PATCH'
del: 'DELETE'
options: 'OPTIONS'
describe 'Barista', ->
describe 'new Router', ->
it 'should return a blank Router object', ->
router = new Router
assert.ok router instanceof Router
assert.equal [].length, router.routes.length
describe 'calling #match', ->
beforeEach ->
router = new Router
describe 'with a static route', ->
it 'should not throw an exception', ->
route = router.match '/path/to/thing'
assert.ok route, @fail
describe 'with a keyed route', ->
it 'should not throw an exception', ->
route = router.match '/:controller/:action/:id'
assert.ok route, @fail
describe 'with a static route and an optional segment', ->
it 'should not throw an exception', ->
route = router.match '/:controller/:action/:id(.:format)'
assert.ok route, @fail
describe 'with a static route and multiple optional segments', ->
it 'should not throw an exception', ->
route = router.match '/:controller/:id(/:action)(.:format)'
assert.ok route, @fail
badPaths =
number: 5
regexp: /bob/
object: {}
array: []
date: new Date
# string: 'sadsa'
for key, val of badPaths # BAD BAD BAD, callbacks are referring to the last item set in the outer scope
do (key,val)->
it "should throw an error when called with a #{key} for the URL", ->
assert.throws ->
router.match val
, /path must be a string/
, @fail
describe '#match with HTTP verbs', ->
beforeEach ->
router = new Router
for method, verb of verbs
do (method, verb)->
describe verb, ->
it 'should not throw an exception', ->
route = router.match '/:controller/:action', verb
assert.ok route, @fail
describe 'WTF', ->
it 'should throw an exception', ->
assert.throws ->
route = router.match '/:controller/:action', 'WTF'
describe 'convenience methods', ->
beforeEach ->
router = new Router
for method, verb of verbs
do (method, verb)->
describe "##{method}", ->
it "should not throw an exception", ->
route = router[method] '/path/to/thing'
assert.ok route
it "should be equivalent to #match with #{verb}", ->
one = router[method] '/path/to/thing'
two = router.match '/path/to/thing', verb
assert.equal JSON.stringify(one), JSON.stringify two
it 'should NOT be equivalent to a generic match', ->
one = router[method] '/path/to/thing'
two = router.match '/path/to/thing'
assert.notEqual JSON.stringify(one), JSON.stringify two
it 'should NOT be equivalent to a false match', ->
one = router[method] '/path/to/thing'
two = router.match '/path/to/thing', 'HEAD'
assert.notEqual JSON.stringify(one), JSON.stringify two
describe '#first', ->
beforeEach ->
router = new Router
describe 'with a static route', ->
beforeEach ->
router.match('/path/to/thing','GET').to('someController.someAction')
it 'params should match', ->
paramsIn =
method: 'GET'
controller: 'someController'
action: 'someAction'
paramsOut = router.first '/path/to/thing', 'GET'
for key, val of paramsIn
assert.equal paramsIn[key], paramsOut[key]
describe 'a where clause with a period', ->
beforeEach ->
router.match('/sites/:id/edit','GET').to('sites.edit').where(id:/[\w.]+/)
it 'params should match', ->
paramsIn =
method: 'GET'
controller: 'sites'
action: 'edit'
id: 'site.ru'
paramsOut = router.first '/sites/site.ru/edit', 'GET'
for key, val of paramsIn
assert.equal paramsIn[key], paramsOut[key]
# describe 'a keyed route', ->
# it 'should not throw an exception', ->
# route = router.match '/:controller/:action/:id'
# assert.ok route, @fail
# describe 'a static route with an optional segment', ->
# it 'should not throw an exception', ->
# route = router.match '/:controller/:action/:id(.:format)'
# assert.ok route, @fail
# describe 'a static route with multiple optional segments', ->
# it 'should not throw an exception', ->
# route = router.match '/:controller/:id(/:action)(.:format)'
# assert.ok route, @fail
Jump to Line
Something went wrong with that request. Please try again.