UNPKG

slashify

Version:

Express/Connect middleware to handle trailing slashes with options

167 lines (143 loc) 4.06 kB
var slashify = require('../'); var connect = require('connect'); var expect = require('chai').expect; var request = require('supertest'); var query = require('connect-query'); var fs = require('fs-extra'); describe('remove trailing slash middleware', function() { it('removes the trailing slash for a given url', function (done) { var app = connect() .use(slashify()); request(app) .get('/about/') .expect(301) .expect('Location', '/about') .end(done); }); it('does not redirect the root url because of the trailing slash', function (done) { var app = connect() .use(slashify()); request(app) .get('/') .expect(404) .end(done); }); it('does not redirect for directory index files', function (done) { fs.mkdirpSync('.tmp/about'); fs.writeFileSync('.tmp/about/index.html', 'index'); var app = connect() .use(slashify({ root: '.tmp' })); request(app) .get('/about/') .expect(404) .expect(function (data) { expect(data.req.path).to.equal('/about/'); }) .end(function (err) { fs.removeSync('.tmp'); done(err); }); }); it('handles custom directory index file names', function (done) { fs.mkdirpSync('.tmp/about'); fs.writeFileSync('.tmp/about/custom.html', 'index'); var app = connect() .use(slashify({ root: '.tmp', index: 'custom.html' })); request(app) .get('/about/') .expect(404) .expect(function (data) { expect(data.req.path).to.equal('/about/'); }) .end(function (err) { fs.removeSync('.tmp'); done(err); }); }); it('ignores the directory index rule', function (done) { fs.mkdirpSync('.tmp/about'); fs.writeFileSync('.tmp/about/index.html', 'index'); var app = connect() .use(slashify({ root: '.tmp', directory: false })); request(app) .get('/about/') .expect(301) .expect('Location', '/about') .end(function (err) { fs.removeSync('.tmp'); done(err); }); }); it('redirects directory index to have a trailing slash', function (done) { fs.mkdirpSync('.tmp/about'); fs.writeFileSync('.tmp/about/index.html', 'index'); var app = connect() .use(slashify({ root: '.tmp' })); request(app) .get('/about') .expect(function (req) { expect(req.headers.location).to.equal('/about/'); }) .expect(301) .end(function (err) { fs.removeSync('.tmp'); done(err); }); }); it('preserves the query parameters on redirect', function (done) { var app = connect() .use(query()) .use(slashify()); request(app) .get('/contact/?query=param') .expect(301) .expect('Location', '/contact?query=param') .end(done); }); it('preserves query parameters and slash on subdirectory directory index redirect', function (done) { fs.mkdirpSync('.tmp/about'); fs.writeFileSync('.tmp/about/index.html', 'index'); var app = connect() .use(query()) .use(slashify({ root: '.tmp' })); request(app) .get('/about?query=params') .expect(function (req) { expect(req.headers.location).to.equal('/about/?query=params'); }) .expect(301) .end(function (err) { fs.removeSync('.tmp'); done(err); }); }); it('overrides the file exists method with a custom method', function (done) { fs.mkdirpSync('.tmp'); fs.writeFileSync('.tmp/test.html', 'test'); var app = connect() .use(slashify({ exists: function () { return false } })); request(app) .get('/.tmp/test.html') .expect(404) .end(function (err) { fs.removeSync('.tmp'); done(err); }); }); });