'use strict'; const assert = require('power-assert'); const match = require('..'); describe('egg-path-matching', () => { it('options.match and options.ignore both present should throw', () => { try { match({ ignore: '/api', match: '/dashboard' }); throw new Error('should not exec'); } catch (e) { assert(e.message === 'options.match and options.ignore can not both present'); } }); it('options.match and options.ignore both not present should always return true', () => { const fn = match({}); assert(fn() === true); }); describe('match', () => { it('support string', () => { const fn = match({ match: '/api' }); assert(fn({ path: '/api/hello' }) === true); assert(fn({ path: '/api/' }) === true); assert(fn({ path: '/api' }) === true); assert(fn({ path: '/api1/hello' }) === false); assert(fn({ path: '/api1' }) === false); }); it('support regexp', () => { const fn = match({ match: /^\/api/ }); assert(fn({ path: '/api/hello' }) === true); assert(fn({ path: '/api/' }) === true); assert(fn({ path: '/api' }) === true); assert(fn({ path: '/api1/hello' }) === true); assert(fn({ path: '/api1' }) === true); assert(fn({ path: '/v1/api1' }) === false); }); it('support global regexp', () => { const fn = match({ match: /^\/api/g }); assert(fn({ path: '/api/hello' }) === true); assert(fn({ path: '/api/' }) === true); assert(fn({ path: '/api' }) === true); assert(fn({ path: '/api1/hello' }) === true); assert(fn({ path: '/api1' }) === true); assert(fn({ path: '/v1/api1' }) === false); }); it('support function', () => { const fn = match({ match: ctx => ctx.path.startsWith('/api'), }); assert(fn({ path: '/api/hello' }) === true); assert(fn({ path: '/api/' }) === true); assert(fn({ path: '/api' }) === true); assert(fn({ path: '/api1/hello' }) === true); assert(fn({ path: '/api1' }) === true); assert(fn({ path: '/v1/api1' }) === false); }); it('support array', () => { const fn = match({ match: [ ctx => ctx.path.startsWith('/api'), '/ajax', /^\/foo$/ ], }); assert(fn({ path: '/api/hello' }) === true); assert(fn({ path: '/api/' }) === true); assert(fn({ path: '/api' }) === true); assert(fn({ path: '/api1/hello' }) === true); assert(fn({ path: '/api1' }) === true); assert(fn({ path: '/v1/api1' }) === false); assert(fn({ path: '/ajax/hello' }) === true); assert(fn({ path: '/foo' }) === true); }); }); describe('ignore', () => { it('support string', () => { const fn = match({ ignore: '/api' }); assert(fn({ path: '/api/hello' }) === false); assert(fn({ path: '/api/' }) === false); assert(fn({ path: '/api' }) === false); assert(fn({ path: '/api1/hello' }) === true); assert(fn({ path: '/api1' }) === true); }); it('support regexp', () => { const fn = match({ ignore: /^\/api/ }); assert(fn({ path: '/api/hello' }) === false); assert(fn({ path: '/api/' }) === false); assert(fn({ path: '/api' }) === false); assert(fn({ path: '/api1/hello' }) === false); assert(fn({ path: '/api1' }) === false); assert(fn({ path: '/v1/api1' }) === true); }); it('support global regexp', () => { const fn = match({ ignore: /^\/api/g }); assert(fn({ path: '/api/hello' }) === false); assert(fn({ path: '/api/' }) === false); assert(fn({ path: '/api' }) === false); assert(fn({ path: '/api1/hello' }) === false); assert(fn({ path: '/api1' }) === false); assert(fn({ path: '/v1/api1' }) === true); }); it('support function', () => { const fn = match({ ignore: ctx => ctx.path.startsWith('/api'), }); assert(fn({ path: '/api/hello' }) === false); assert(fn({ path: '/api/' }) === false); assert(fn({ path: '/api' }) === false); assert(fn({ path: '/api1/hello' }) === false); assert(fn({ path: '/api1' }) === false); assert(fn({ path: '/v1/api1' }) === true); }); it('support array', () => { const fn = match({ ignore: [ ctx => ctx.path.startsWith('/api'), '/ajax', /^\/foo$/ ], }); assert(fn({ path: '/api/hello' }) === false); assert(fn({ path: '/api/' }) === false); assert(fn({ path: '/api' }) === false); assert(fn({ path: '/api1/hello' }) === false); assert(fn({ path: '/api1' }) === false); assert(fn({ path: '/v1/api1' }) === true); assert(fn({ path: '/ajax/hello' }) === false); assert(fn({ path: '/foo' }) === false); }); }); });