103 lines
3.4 KiB
JavaScript
103 lines
3.4 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var expect = require('chai').expect;
|
||
|
var request = require('request');
|
||
|
var connect = require('connect');
|
||
|
var serveStatic = require('serve-static');
|
||
|
var pushState = require('../index');
|
||
|
var www = __dirname + '/fixtures/www';
|
||
|
|
||
|
describe('pushState', function() {
|
||
|
var app = connect()
|
||
|
.use(pushState())
|
||
|
.use(serveStatic(www));
|
||
|
|
||
|
it('calls the next middleware', function(done) {
|
||
|
var server = app.listen(3000).on('listening', function() {
|
||
|
request('http://0.0.0.0:3000', function(err, res, body) {
|
||
|
expect(res.statusCode).to.equal(200);
|
||
|
expect(body).to.contain('www/index.html');
|
||
|
server.close(done);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('rewrites the request url to point at the root when the request does not include a file extension', function(done) {
|
||
|
var server = app.listen(3000).on('listening', function() {
|
||
|
request('http://0.0.0.0:3000/pathname', function(err, res, body) {
|
||
|
expect(res.statusCode).to.equal(200);
|
||
|
expect(body).to.contain('www/index.html');
|
||
|
server.close(done);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('rewrites the request url to point at the root regardless of whether the querystring contains a file extension', function(done) {
|
||
|
var server = app.listen(3000).on('listening', function() {
|
||
|
request('http://0.0.0.0:3000/pathname/?q=foo.bar', function(err, res, body) {
|
||
|
expect(res.statusCode).to.equal(200);
|
||
|
expect(body).to.contain('www/index.html');
|
||
|
server.close(done);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('does not rewrite the request url when the request includes a file extension', function(done) {
|
||
|
var server = app.listen(3000).on('listening', function() {
|
||
|
request('http://0.0.0.0:3000/images/image.png', function(err, res, body) {
|
||
|
expect(res.statusCode).to.equal(200);
|
||
|
expect(res.headers['content-type']).to.contain('image/png');
|
||
|
server.close(done);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('rewrites the request url to point at a custom root if defined', function(done) {
|
||
|
var app = connect()
|
||
|
.use(pushState({ root: '/other/' }))
|
||
|
.use(serveStatic(www));
|
||
|
|
||
|
var server = app.listen(3000).on('listening', function() {
|
||
|
request('http://0.0.0.0:3000/other/pathname', function(err, res, body) {
|
||
|
expect(res.statusCode).to.equal(200);
|
||
|
expect(body).to.contain('www/other/index.html');
|
||
|
server.close(done);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('does not rewrite the request url when specified as allowed', function(done) {
|
||
|
var app = connect()
|
||
|
.use(pushState({ allow: '^/api' }))
|
||
|
.use(serveStatic(www))
|
||
|
.use('/api/users', function(req, res, next) {
|
||
|
res.end('users');
|
||
|
});
|
||
|
|
||
|
var server = app.listen(3000).on('listening', function() {
|
||
|
request('http://0.0.0.0:3000/api/users', function(err, res, body) {
|
||
|
expect(res.statusCode).to.equal(200);
|
||
|
expect(body).to.contain('users');
|
||
|
server.close(done);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('rewrites the request url when specified as disallowed', function(done) {
|
||
|
var app = connect()
|
||
|
.use(pushState({ disallow: '^/version' }))
|
||
|
.use(serveStatic(www))
|
||
|
.use('/version', function(req, res, next) {
|
||
|
res.end('version');
|
||
|
});
|
||
|
|
||
|
var server = app.listen(3000).on('listening', function() {
|
||
|
request('http://0.0.0.0:3000/version/1.2.3', function(err, res, body) {
|
||
|
expect(res.statusCode).to.equal(200);
|
||
|
expect(body).to.contain('www/index.html');
|
||
|
server.close(done);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|