Skip to content

Commit

Permalink
feat (web-server): allow injection of custom middleware.
Browse files Browse the repository at this point in the history
Closes #1612
  • Loading branch information
shanear committed Oct 12, 2015
1 parent 3ca7d2f commit 7938cee
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
12 changes: 9 additions & 3 deletions lib/web-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,15 @@ var createWebServer = function (injector, emitter, fileList) {
// TODO(vojta): remove, this is only here because of karma-dart
// we need a better way of custom handlers
.use(injector.invoke(createCustomHandler))
.use(function (request, response) {
common.serve404(response, request.url)
})


if(config.middleware) {
config.middleware(handler);
}

handler.use(function (request, response) {
common.serve404(response, request.url)
})

var serverClass = http
var serverArguments = [handler]
Expand Down
35 changes: 34 additions & 1 deletion test/unit/web-server.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ describe('web-server', () => {
// this relies on the fact that none of these tests mutate fs
var m = mocks.loadFile(__dirname + '/../../lib/web-server.js', _mocks, _globals)

var middlewareActivated = false;
var customFileHandlers = server = emitter = null

var servedFiles = (files) => {
Expand All @@ -41,9 +42,22 @@ describe('web-server', () => {
beforeEach(() => {
customFileHandlers = []
emitter = new EventEmitter()
var config = {
basePath: '/base/path',
urlRoot: '/',
middleware: function(connect) {
connect.use(function (request, response, next) {
if(middlewareActivated) {
response.writeHead(222)
return response.end('middleware!')
}
next()
})
}
}

var injector = new di.Injector([{
config: ['value', {basePath: '/base/path', urlRoot: '/'}],
config: ['value', config],
customFileHandlers: ['value', customFileHandlers],
emitter: ['value', emitter],
fileList: ['value', {files: {served: [], included: []}}],
Expand Down Expand Up @@ -81,6 +95,25 @@ describe('web-server', () => {
.expect(200, 'new-js-source')
})

describe('middleware', function() {
beforeEach(() =>{
servedFiles(new Set([new File('/base/path/one.js')]))
middlewareActivated = true;
})

it('should use injected middleware', () => {
return request(server)
.get('/base/other.js')
.expect(222, 'middleware!')
})

it('should inject middleware behind served files', () => {
return request(server)
.get('/base/one.js')
.expect(200, 'js-source')
})
})

it('should serve no files when they are not available yet', () => {
return request(server)
.get('/base/new.js')
Expand Down

0 comments on commit 7938cee

Please sign in to comment.