Skip to content

Commit

Permalink
make sure router config method is case-insensitive
Browse files Browse the repository at this point in the history
  • Loading branch information
lingyan committed Apr 28, 2015
1 parent 26723c9 commit c9d1e5f
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
4 changes: 2 additions & 2 deletions lib/router.js
Expand Up @@ -35,7 +35,7 @@ function Route(name, config) {
*/
Route.prototype.acceptMethod = function (method) {
//TODO support array for method, ['get', 'post']
return method === this.config.method;
return (method && method.toLowerCase()) === (this.config.method && this.config.method.toLowerCase());
};

/**
Expand Down Expand Up @@ -64,7 +64,7 @@ Route.prototype.match = function (url, options) {
var len;

// 1. check method
var method = (options.method && options.method.toLowerCase()) || METHODS.GET;
var method = options.method || METHODS.GET;
if (!self.acceptMethod(method)) {
return null;
}
Expand Down
24 changes: 19 additions & 5 deletions tests/unit/lib/router.js
Expand Up @@ -39,6 +39,11 @@ var routes = {
},
unamed_params: {
path: '/:foo/(.*)'
},
case_insensitive: {
path: '/case_insensitive',
method: 'GET',
page: 'viewCaseInsensitive'
}
};
var router;
Expand All @@ -50,7 +55,7 @@ describe('Router', function () {

describe('#constructor', function () {
it('should init correctly', function () {
expect(Object.keys(router._routes).length).to.equal(6);
expect(Object.keys(router._routes).length).to.equal(7);

expect(router._routes.article.name).to.equal('article');
expect(router._routes.article.config.path).to.equal('/:site/:category?/:subcategory?/:alias');
Expand Down Expand Up @@ -86,16 +91,23 @@ describe('Router', function () {
expect(router._routes.new_article.config.page).to.equal('createArticle');
expect(router._routes.new_article.keys.length).to.equal(0);
expect(router._routes.new_article.regexp).to.be.a('RegExp');

expect(router._routes.case_insensitive.name).to.equal('case_insensitive');
expect(router._routes.case_insensitive.config.path).to.equal('/case_insensitive');
expect(router._routes.case_insensitive.config.method).to.equal('GET');
expect(router._routes.case_insensitive.config.page).to.equal('viewCaseInsensitive');
expect(router._routes.case_insensitive.keys.length).to.equal(0);
expect(router._routes.case_insensitive.regexp).to.be.a('RegExp');
});
it('should not freeze in production env', function () {
var origEnv = process.env.NODE_ENV;
process.env.NODE_ENV = 'production';
var notFrozen = new Router(routes);

expect(Object.keys(notFrozen._routes).length).to.equal(6);
expect(Object.keys(notFrozen._routes).length).to.equal(7);
notFrozen._routes.foo = null;
expect(notFrozen._routes.foo).to.equal(null);
expect(Object.keys(notFrozen._routes).length).to.equal(7);
expect(Object.keys(notFrozen._routes).length).to.equal(8);

var homeRoute = notFrozen._routes.home;
expect(homeRoute.name).to.equal('home');
Expand All @@ -108,7 +120,7 @@ describe('Router', function () {
process.env.NODE_ENV = 'development';
var frozen = new Router(routes);
var homeRoute = frozen._routes.home;
expect(Object.keys(frozen._routes).length).to.equal(6);
expect(Object.keys(frozen._routes).length).to.equal(7);
expect(homeRoute.name).to.equal('home');
expect(homeRoute.config.path).to.equal('/');
expect(homeRoute.config.method).to.equal('get');
Expand All @@ -133,7 +145,7 @@ describe('Router', function () {
expect(function () {
homeRoute.config.regexp = null;
}).to.throw(TypeError);
expect(Object.keys(frozen._routes).length).to.equal(6);
expect(Object.keys(frozen._routes).length).to.equal(7);
expect(frozen._routes.foo).to.equal(undefined);
expect(homeRoute.keys.length).to.equal(0);
expect(homeRoute.name).to.equal('home');
Expand Down Expand Up @@ -193,6 +205,8 @@ describe('Router', function () {
expect(route.name).to.equal('article');
route = router.getRoute('/new_article', {method: 'POST'});
expect(route.name).to.equal('new_article');
route = router.getRoute('/case_insensitive', {method: 'get'});
expect(route.name).to.equal('case_insensitive');
});

it('check navigate.params if defined', function () {
Expand Down

0 comments on commit c9d1e5f

Please sign in to comment.