Template Upload
This commit is contained in:
250
node_modules/connect-history-api-fallback/test/index_test.js
generated
vendored
Normal file
250
node_modules/connect-history-api-fallback/test/index_test.js
generated
vendored
Normal file
@ -0,0 +1,250 @@
|
||||
'use strict';
|
||||
|
||||
var sinon = require('sinon');
|
||||
var historyApiFallback = require('../lib');
|
||||
|
||||
var tests = module.exports = {};
|
||||
|
||||
var middleware;
|
||||
var req = null;
|
||||
var requestedUrl;
|
||||
var next;
|
||||
|
||||
tests.setUp = function(done) {
|
||||
middleware = historyApiFallback();
|
||||
requestedUrl = '/foo';
|
||||
req = {
|
||||
method: 'GET',
|
||||
url: requestedUrl,
|
||||
headers: {
|
||||
accept: 'text/html, */*'
|
||||
}
|
||||
};
|
||||
next = sinon.stub();
|
||||
|
||||
done();
|
||||
};
|
||||
|
||||
|
||||
['POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS'].forEach(function(method) {
|
||||
tests['should ignore ' + method + ' requests'] = function(test) {
|
||||
req.method = method;
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, requestedUrl);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
tests['should ignore requests that do not accept html'] = function(test) {
|
||||
req.headers.accept = 'application/json';
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, requestedUrl);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
|
||||
tests['should ignore file requests'] = function(test) {
|
||||
var expected = req.url = 'js/app.js';
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, expected);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
|
||||
tests['should rewrite requests when the . rule is disabled'] = function(test) {
|
||||
req.url = 'js/app.js';
|
||||
middleware = historyApiFallback({
|
||||
disableDotRule: true
|
||||
});
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, '/index.html');
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
|
||||
tests['should take JSON preference into account'] = function(test) {
|
||||
req.headers.accept = 'application/json, text/plain, */*';
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, requestedUrl);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
|
||||
tests['should rewrite valid requests'] = function(test) {
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, '/index.html');
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should not fail for missing HTTP accept header'] = function(test) {
|
||||
delete req.headers.accept;
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, requestedUrl);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should not fail for missing headers object'] = function(test) {
|
||||
delete req.headers;
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, requestedUrl);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should work in verbose mode'] = function(test) {
|
||||
var expected = req.url = 'js/app.js';
|
||||
middleware = historyApiFallback({
|
||||
verbose: true
|
||||
});
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, expected);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should work with a custom logger'] = function(test) {
|
||||
var expected = req.url = 'js/app.js';
|
||||
var logger = sinon.stub();
|
||||
middleware = historyApiFallback({
|
||||
logger: logger
|
||||
});
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, expected);
|
||||
test.ok(next.called);
|
||||
test.ok(logger.calledOnce);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should rewrite requested path according to rules'] = function(test) {
|
||||
req.url = '/soccer';
|
||||
middleware = historyApiFallback({
|
||||
rewrites: [
|
||||
{from: /\/soccer/, to: '/soccer.html'}
|
||||
]
|
||||
});
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, '/soccer.html');
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should support functions as rewrite rule'] = function(test) {
|
||||
middleware = historyApiFallback({
|
||||
rewrites: [
|
||||
{
|
||||
from: /^\/libs\/(.*)$/,
|
||||
to: function(context) {
|
||||
return './bower_components' + context.parsedUrl.pathname;
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
req.url = '/libs/jquery/jquery.1.12.0.min.js';
|
||||
middleware(req, null, next);
|
||||
test.equal(req.url, './bower_components/libs/jquery/jquery.1.12.0.min.js');
|
||||
test.ok(next.called);
|
||||
|
||||
next = sinon.stub();
|
||||
var expected = req.url = '/js/main.js';
|
||||
middleware(req, null, next);
|
||||
test.equal(req.url, expected);
|
||||
test.ok(next.called);
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should test rewrite rules'] = function(test) {
|
||||
req.url = '/socer';
|
||||
middleware = historyApiFallback({
|
||||
rewrites: [
|
||||
{from: /\/soccer/, to: '/soccer.html'}
|
||||
]
|
||||
});
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, '/index.html');
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should support custom index file'] = function(test) {
|
||||
var index = 'default.html';
|
||||
req.url = '/socer';
|
||||
middleware = historyApiFallback({
|
||||
index: index
|
||||
});
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, index);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should accept html requests based on headers option'] = function(test) {
|
||||
req.headers.accept = '*/*';
|
||||
middleware = historyApiFallback({
|
||||
htmlAcceptHeaders: ['text/html', 'application/xhtml+xml']
|
||||
});
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, requestedUrl);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
||||
|
||||
tests['should support custom rewrite rules'] = function(test) {
|
||||
req.headers.accept = '*/*';
|
||||
var url = '/app/login/app.js';
|
||||
req.url = url;
|
||||
middleware = historyApiFallback({
|
||||
rewrites: [
|
||||
{
|
||||
from: /\/app\/login/,
|
||||
to: function onMatch(ctx) {
|
||||
if (ctx.parsedUrl.path.indexOf('.js')) {
|
||||
return ctx.parsedUrl.href;
|
||||
}
|
||||
return '/app/login/index.html';
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
middleware(req, null, next);
|
||||
|
||||
test.equal(req.url, url);
|
||||
test.ok(next.called);
|
||||
test.done();
|
||||
};
|
Reference in New Issue
Block a user