@zkochan/pnpm
Version:
A fast implementation of npm install
196 lines (158 loc) • 5.18 kB
JavaScript
/**
* Copyright 2015 Google Inc. All Rights Reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file or at
* https://github.com/firebase/superstatic/blob/master/LICENSE
*/
;
var fs = require('fs-extra');
var expect = require('chai').expect;
var request = require('supertest');
var connect = require('connect');
var helpers = require('../../helpers');
var files = helpers.decorator(require('../../../lib/middleware/files'));
var fsProvider = require('../../../lib/providers/fs');
var Responder = require('../../../lib/responder');
describe('static server with trailing slash customization', function() {
var provider = fsProvider({
public: '.tmp'
});
var app;
beforeEach(function() {
fs.outputFileSync('.tmp/index.html', 'index', 'utf8');
fs.outputFileSync('.tmp/me.html', 'testing', 'utf8');
fs.outputFileSync('.tmp/about/index.html', 'about index', 'utf8');
app = connect()
.use(function(req, res, next) {
res.superstatic = new Responder(req, res, {
provider: provider
});
next();
});
});
afterEach(function() {
fs.removeSync('.tmp');
});
it('serves html file', function(done) {
fs.outputFileSync('.tmp/superstatic.html', 'test', 'utf8');
app.use(files({}, {provider: provider}));
request(app)
.get('/superstatic.html')
.expect(200)
.expect('test')
.expect('content-type', 'text/html; charset=utf-8')
.end(done);
});
it('serves html file with unicode name', function(done) {
fs.outputFileSync('.tmp/äää.html', 'test', 'utf8');
app.use(files({}, {provider: provider}));
request(app)
.get('/äää.html')
.expect(200)
.expect('test')
.expect('content-type', 'text/html; charset=utf-8')
.end(done);
});
it('serves css file', function(done) {
fs.outputFileSync('.tmp/style.css', 'body {}', 'utf8');
app.use(files({}, {provider: provider}));
request(app)
.get('/style.css')
.expect(200)
.expect('body {}')
.expect('content-type', 'text/css; charset=utf-8')
.end(done);
});
it('serves a directory index file', function(done) {
fs.outputFileSync('.tmp/index.html', 'test', 'utf8');
app.use(files({}, {provider: provider}));
request(app)
.get('/')
.expect(200)
.expect('test')
.expect('content-type', 'text/html; charset=utf-8')
.end(done);
});
it('serves a file with query parameters', function(done) {
fs.outputFileSync('.tmp/superstatic.html', 'test', 'utf8');
app.use(files({}, {provider: provider}));
request(app)
.get('/superstatic.html?key=value')
.expect(200)
.expect('test')
.end(done);
});
it('does not redirect the root url because of the trailing slash', function(done) {
app.use(files({}, {provider: provider}));
request(app)
.get('/')
.expect(200)
.end(done);
});
it('does not redirect for directory index files', function(done) {
app.use(files({}, {provider: provider}));
request(app)
.get('/about/')
.expect(200)
.expect(function(data) {
expect(data.req.path).to.equal('/about/');
})
.end(done);
});
it('function() directory index to have a trailing slash', function(done) {
app.use(files({}, {provider: provider}));
request(app)
.get('/about')
.expect(function(req) {
expect(req.headers.location).to.equal('/about/');
})
.expect(301)
.end(done);
});
it('preserves query parameters and slash on subdirectory directory index redirect', function(done) {
app.use(files({}, {provider: provider}));
request(app)
.get('/about?query=params')
.expect(function(req) {
expect(req.headers.location).to.equal('/about/?query=params');
})
.expect(301)
.end(done);
});
describe('force trailing slash', function() {
it('adds slash to url with no extension', function(done) {
app.use(files({trailingSlash: true}, {provider: provider}));
request(app)
.get('/testing')
.expect(301)
.expect('Location', '/testing/')
.end(done);
});
});
describe('force remove trailing slash', function() {
it('removes trailing slash on urls with no file extension', function(done) {
app.use(files({trailingSlash: false}, {provider: provider}));
request(app)
.get('/testing/')
.expect(301)
.expect('Location', '/testing')
.end(done);
});
it('removes trailing slash on urls with file extension', function(done) {
app.use(files({trailingSlash: false}, {provider: provider}));
request(app)
.get('/me.html/')
.expect(301)
.expect('Location', '/me.html')
.end(done);
});
it('removes trailing slash on directory index urls', function(done) {
app.use(files({trailingSlash: false}, {provider: provider}));
request(app)
.get('/about/')
.expect(301)
.expect('Location', '/about')
.end(done);
});
});
});