tachi
Version:
Node.js MVC framework for seriously rapid application development.
228 lines (183 loc) • 5.05 kB
JavaScript
// This is heplful for some of the tests.
Utils = require('../../Utilities/utils');
describe('UrlParser', function() {
var urlParser;
beforeEach(function() {
urlParser = require('../../Router/urlParser');
});
describe('isStaticUrl', function() {
it('should return false if the URL is dynamic.', function() {
var result = urlParser.isStaticUrl(['/test'], '/test.html?test=1');
result.should.be.false;
});
it('should return false if the URL is not a file.', function() {
var result = urlParser.isStaticUrl(['/test'], '/test/test2');
result.should.be.false;
});
it('should return true if the URL matches a static path.', function() {
var result = urlParser.isStaticUrl(['/test'], '/test/test2.js');
result.should.be.true;
});
it('should return true if the URL matches one of many static paths.', function() {
var result = urlParser.isStaticUrl(['/test', '/tes', '/t', '/hello', '/content'], '/test/test2.js');
result.should.be.true;
});
it('should return false if the URL matches a static path not at the root level.', function() {
var result = urlParser.isStaticUrl(['/test'], '/hello/test/test2.js');
result.should.be.false;
});
});
describe('#parseParameters()', function() {
it('should return an empty object for a blank URL.', function() {
var result = urlParser.parseParameters([], '');
result.should.eql({});
});
it('should return an empty object when no route matches.', function() {
var result = urlParser.parseParameters([], '/test');
result.should.eql({});
});
it('should gain parameters based on the matched route\'s additional parameters.', function() {
var routeFunction = function() {
return {};
};
var routeData = {
someData: 'yes'
};
var result = urlParser.parseParameters([{
func: routeFunction,
data: routeData
}
], '/');
result.should.eql({
someData: 'yes',
_isStatic: false
});
});
it('should gain parameters from the query string.', function() {
var routeFunction = function() {
return {};
};
var routeData = {};
var result = urlParser.parseParameters([{
func: routeFunction,
data: routeData
}
], '/?testData=test');
result.should.eql({
testData: 'test',
_isStatic: false
});
});
it('should override default parameters with query string parameters.', function() {
var routeFunction = function() {
return {};
};
var routeData = {
testData: 'original data.'
};
var result = urlParser.parseParameters([{
func: routeFunction,
data: routeData
}
], '/?testData=test');
result.should.eql({
testData: 'test',
_isStatic: false
});
});
it('should only gain parameters from a matching route.', function() {
var routeFunction = function() {
return {};
};
var failedRouteFunction = function() {
return false;
};
var routeData = {
testData: 'original data.'
};
var failedRouteData = {
otherTestData: 'original failed route data.'
};
var result = urlParser.parseParameters([{
func: failedRouteFunction,
data: failedRouteData
}, {
func: routeFunction,
data: routeData
}, {
func: failedRouteFunction,
data: failedRouteData
}
], '/test');
result.should.eql({
testData: 'original data.',
_isStatic: false
});
});
});
describe('public interface', function() {
it('should return an object with only the _isStatic property if the URL matches a static path.', function() {
var parseUrl = urlParser([], ['/test']);
var path = parseUrl('/test/test.html');
path.should.eql({
_isStatic: true
});
});
it('should ignore matching routes if a static path is available.', function() {
var parseUrl = urlParser([{
func: function() {
return {};
},
data: {
test: 'data'
}
}
], ['/test']);
var path = parseUrl('/test/test.html');
path.should.eql({
_isStatic: true
});
});
it('should use a route if no static path matches.', function() {
var parseUrl = urlParser([{
func: function() {
return {};
},
data: {
test: 'data'
}
}
], ['/Content']);
var path = parseUrl('/test/test.html');
path.should.eql({
test: 'data',
_isStatic: false
});
});
it('should check the routes in order.', function() {
var parseUrl = urlParser([{
func: function() {
return {};
},
data: {
test: 'data'
}
}, {
func: function() {
return {
wrongData: true
}
},
data: {
nope: 'not this one.'
}
}
], ['/Content']);
var path = parseUrl('/test/test.html');
path.should.eql({
test: 'data',
_isStatic: false
});
});
});
});