var Koa = require('koa'); var request = require('supertest'); var unless = require('../index'); describe('koa-unless', function() { var middleware; beforeEach(function() { middleware = function(ctx, next) { ctx.body = {executed: true}; }; middleware.unless = unless; }); describe('with PATH exception', function() { it('should not call the middleware when one of the path match', function(done) { var app = new Koa(); app.use(middleware.unless({ path: ['/foo'] })); request(app.listen()) .get('/foo') .expect(404, done); }); it('should call the middleware when the path doesnt match', function(done) { var app = new Koa(); app.use(middleware.unless({ path: ['/foo'] })); request(app.listen()) .get('/bar') .expect(200, done); }); }); describe('with PATH (regexp) exception', function() { it('should not call the middleware when the regex match', function(done) { var app = new Koa(); app.use(middleware.unless({ path: ['/foo', /ar$/ig] })); request(app.listen()) .get('/bar') .expect(404, done); }); }); describe('with PATH (useOriginalUrl) exception', function() { it('should not call the middleware when one of the path match ctx.url instead of ctx.originalUrl', function(done) { var app = new Koa(); app.use(function(ctx, next) { ctx.url = '/foo'; return next(); }); app.use(middleware.unless({ path: ['/foo'], useOriginalUrl: false })); request(app.listen()) .get('/orig/foo') .expect(404, done); }); it('should call the middleware when the path doesnt match ctx.url even if path matches ctx.originalUrl', function(done) { var app = new Koa(); app.use(function(ctx, next) { ctx.originalUrl = '/foo'; return next(); }); app.use(middleware.unless({ path: ['/foo'], useOriginalUrl: false })); request(app.listen()) .get('/bar') .expect(200, done); }); }); describe('with EXT exception', function() { it('should not call the middleware when the ext match', function(done) { var app = new Koa(); app.use(middleware.unless({ ext: ['html', 'css'] })); request(app.listen()) .get('/index.html') .expect(404, done); }); it('should call the middleware when the ext doesnt match', function(done) { var app = new Koa(); app.use(middleware.unless({ ext: ['html', 'css'] })); request(app.listen()) .get('/index.js') .expect(200, done); }); }); describe('with METHOD exception', function() { it('should not call the middleware when the method match', function(done) { var app = new Koa(); app.use(middleware.unless({ method: ['GET', 'OPTIONS'] })); request(app.listen()) .get('/index') .expect(404, done); }); it('should call the middleware when the method doesnt match', function(done) { var app = new Koa(); app.use(middleware.unless({ method: ['GET', 'OPTIONS'] })); request(app.listen()) .post('/index') .expect(200, done); }); }); describe('with custom exception', function() { it('should not call the middleware when the custom rule match', function(done) { var app = new Koa(); app.use(middleware.unless(function(ctx) { return ctx.url === '/index'; })); request(app.listen()) .get('/index') .expect(404, done); }); it('should call the middleware when the custom rule doesnt match', function(done) { var app = new Koa(); app.use(middleware.unless(function(ctx) { return ctx.url === '/index'; })); request(app.listen()) .get('/home') .expect(200, done); }); }); });