You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					98 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					98 lines
				
				1.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const test = require('tap').test
							 | 
						||
| 
								 | 
							
								const boot = require('..')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('chainable standalone', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const readyResult = boot()
							 | 
						||
| 
								 | 
							
								    .use(function (ctx, opts, done) {
							 | 
						||
| 
								 | 
							
								      t.pass('1st plugin')
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    }).after(function (err, done) {
							 | 
						||
| 
								 | 
							
								      t.error(err)
							 | 
						||
| 
								 | 
							
								      t.pass('2nd after')
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    }).ready(function () {
							 | 
						||
| 
								 | 
							
								      t.pass('we are ready')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  t.equal(readyResult, undefined)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('chainable automatically binded', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = {}
							 | 
						||
| 
								 | 
							
								  boot(app)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const readyResult = app
							 | 
						||
| 
								 | 
							
								    .use(function (ctx, opts, done) {
							 | 
						||
| 
								 | 
							
								      t.pass('1st plugin')
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    }).after(function (err, done) {
							 | 
						||
| 
								 | 
							
								      t.error(err)
							 | 
						||
| 
								 | 
							
								      t.pass('2nd after')
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    }).ready(function () {
							 | 
						||
| 
								 | 
							
								      t.pass('we are ready')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  t.equal(readyResult, undefined)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								;['use', 'after', 'ready'].forEach((key) => {
							 | 
						||
| 
								 | 
							
								  test('throws if ' + key + ' is already there', (t) => {
							 | 
						||
| 
								 | 
							
								    t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const app = {}
							 | 
						||
| 
								 | 
							
								    app[key] = () => {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								      boot(app)
							 | 
						||
| 
								 | 
							
								      t.fail('error must happen')
							 | 
						||
| 
								 | 
							
								    } catch (err) {
							 | 
						||
| 
								 | 
							
								      t.equal(err.message, key + '() is already defined, specify an expose option')
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test('support expose for ' + key, (t) => {
							 | 
						||
| 
								 | 
							
								    const app = {}
							 | 
						||
| 
								 | 
							
								    app[key] = () => {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const expose = {}
							 | 
						||
| 
								 | 
							
								    expose[key] = 'muahah'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    boot(app, {
							 | 
						||
| 
								 | 
							
								      expose: expose
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t.end()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('chainable standalone with server', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(6)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const server = {}
							 | 
						||
| 
								 | 
							
								  boot(server, {
							 | 
						||
| 
								 | 
							
								    expose: {
							 | 
						||
| 
								 | 
							
								      use: 'register'
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const readyResult = server.register(function (ctx, opts, done) {
							 | 
						||
| 
								 | 
							
								    t.pass('1st plugin')
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  }).after(function (err, done) {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.pass('2nd after')
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  }).register(function (ctx, opts, done) {
							 | 
						||
| 
								 | 
							
								    t.pass('3rd plugin')
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  }).ready(function () {
							 | 
						||
| 
								 | 
							
								    t.pass('we are ready')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  t.equal(readyResult, undefined)
							 | 
						||
| 
								 | 
							
								})
							 |