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.
		
		
		
		
		
			
		
			
				
					451 lines
				
				9.8 KiB
			
		
		
			
		
	
	
					451 lines
				
				9.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const t = require('tap')
							 | 
						||
| 
								 | 
							
								const test = t.test
							 | 
						||
| 
								 | 
							
								const build = require('../example-composited')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let fastify = null
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.teardown(() => {
							 | 
						||
| 
								 | 
							
								  fastify.close()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('boot server', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								  fastify = build()
							 | 
						||
| 
								 | 
							
								  t.error(false)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('And Relation sucess for single case', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/singleand',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 11
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('And Relation failed for single case', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/singleand',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 10
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: '`n` is not odd',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Or Relation sucess for single case', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/singleor',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 11
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Or Relation failed for single case', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/singleor',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 10
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: '`n` is not odd',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('And Relation failed for first check', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/checkand',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 'tomas'
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: 'type of `n` is not `number`',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('And Relation failed for first check', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/checkand',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      m: 11
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: 'type of `n` is not `number`',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('And Relation failed for second check', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/checkand',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 10
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: '`n` is not odd',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('And Relation success', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/checkand',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 11
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 200)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Or Relation success under first case', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/checkor',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 1
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 200)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Or Relation success under second case', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/checkor',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 200
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 200)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Or Relation failed for both case', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/checkor',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 90
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: '`n` is not big',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Check run all line fail with AND', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(8)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const fastify = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.after(() => {
							 | 
						||
| 
								 | 
							
								    fastify.route({
							 | 
						||
| 
								 | 
							
								      method: 'GET',
							 | 
						||
| 
								 | 
							
								      url: '/run-all-pipe',
							 | 
						||
| 
								 | 
							
								      preHandler: fastify.auth([
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 1'); done() },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 2'); done(new Error('second')) },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 3'); done() },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 4'); done() },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 5'); done(new Error('fifth')) }
							 | 
						||
| 
								 | 
							
								      ], { relation: 'and', run: 'all' }),
							 | 
						||
| 
								 | 
							
								      handler: (req, reply) => { reply.send({ hello: 'world' }) }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject('/run-all-pipe', (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 401)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: 'second',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Check run all line with AND', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(8)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const fastify = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.after(() => {
							 | 
						||
| 
								 | 
							
								    fastify.route({
							 | 
						||
| 
								 | 
							
								      method: 'GET',
							 | 
						||
| 
								 | 
							
								      url: '/run-all-pipe',
							 | 
						||
| 
								 | 
							
								      preHandler: fastify.auth([
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 1'); done() },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 2'); done() },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 3'); done() },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 4'); done() },
							 | 
						||
| 
								 | 
							
								        (request, reply, done) => { t.pass('executed 5'); done() }
							 | 
						||
| 
								 | 
							
								      ], { relation: 'and', run: 'all' }),
							 | 
						||
| 
								 | 
							
								      handler: (req, reply) => { reply.send({ hello: 'world' }) }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject('/run-all-pipe', (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 200)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Check run all line with OR', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(8)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const fastify = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.after(() => {
							 | 
						||
| 
								 | 
							
								    fastify.route({
							 | 
						||
| 
								 | 
							
								      method: 'GET',
							 | 
						||
| 
								 | 
							
								      url: '/run-all-pipe',
							 | 
						||
| 
								 | 
							
								      preHandler: fastify.auth([
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 1'); done(new Error('primo')) },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 2'); done(new Error('secondo')) },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 3'); done() },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 4'); done(new Error('quarto')) },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 5'); done() }
							 | 
						||
| 
								 | 
							
								      ], { relation: 'or', run: 'all' }),
							 | 
						||
| 
								 | 
							
								      handler: (req, reply) => { reply.send({ hello: 'world' }) }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject('/run-all-pipe', (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 200)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Check run all fail line with OR', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(8)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const fastify = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.after(() => {
							 | 
						||
| 
								 | 
							
								    fastify.route({
							 | 
						||
| 
								 | 
							
								      method: 'GET',
							 | 
						||
| 
								 | 
							
								      url: '/run-all-pipe',
							 | 
						||
| 
								 | 
							
								      preHandler: fastify.auth([
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 1'); done(new Error('primo')) },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 2'); done(new Error('secondo')) },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 3'); done(new Error('terzo')) },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 4'); done(new Error('quarto')) },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 5'); done(new Error('quinto')) }
							 | 
						||
| 
								 | 
							
								      ], { relation: 'or', run: 'all' }),
							 | 
						||
| 
								 | 
							
								      handler: (req, reply) => { reply.send({ hello: 'world' }) }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject('/run-all-pipe', (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 401)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: 'quinto',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Ignore last status', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const fastify = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.after(() => {
							 | 
						||
| 
								 | 
							
								    fastify.route({
							 | 
						||
| 
								 | 
							
								      method: 'GET',
							 | 
						||
| 
								 | 
							
								      url: '/run-all-status',
							 | 
						||
| 
								 | 
							
								      preHandler: fastify.auth([
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 1'); done() },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 2'); done(new Error('last')) }
							 | 
						||
| 
								 | 
							
								      ], { relation: 'or', run: 'all' }),
							 | 
						||
| 
								 | 
							
								      handler: (req, reply) => { reply.send({ hello: 'world' }) }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject('/run-all-status', (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 200)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Or Relation run all', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/run-all-or',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 11
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      odd: true,
							 | 
						||
| 
								 | 
							
								      big: false,
							 | 
						||
| 
								 | 
							
								      number: true
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Or Relation run all fail', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/run-all-or',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 'foo'
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      error: 'Unauthorized',
							 | 
						||
| 
								 | 
							
								      message: 'type of `n` is not `number`',
							 | 
						||
| 
								 | 
							
								      statusCode: 401
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('And Relation run all', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject({
							 | 
						||
| 
								 | 
							
								    method: 'POST',
							 | 
						||
| 
								 | 
							
								    url: '/run-all-and',
							 | 
						||
| 
								 | 
							
								    payload: {
							 | 
						||
| 
								 | 
							
								      n: 101
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, {
							 | 
						||
| 
								 | 
							
								      odd: true,
							 | 
						||
| 
								 | 
							
								      big: true,
							 | 
						||
| 
								 | 
							
								      number: true
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Clean status code settle by user', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const fastify = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.after(() => {
							 | 
						||
| 
								 | 
							
								    fastify.route({
							 | 
						||
| 
								 | 
							
								      method: 'GET',
							 | 
						||
| 
								 | 
							
								      url: '/run-all-status',
							 | 
						||
| 
								 | 
							
								      preHandler: fastify.auth([
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 1'); done() },
							 | 
						||
| 
								 | 
							
								        (req, reply, done) => { t.pass('executed 2'); reply.code(400); done(new Error('last')) }
							 | 
						||
| 
								 | 
							
								      ], { relation: 'or', run: 'all' }),
							 | 
						||
| 
								 | 
							
								      handler: (req, reply) => { reply.send({ hello: 'world' }) }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fastify.inject('/run-all-status', (err, res) => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.equal(res.statusCode, 200)
							 | 
						||
| 
								 | 
							
								    const payload = JSON.parse(res.payload)
							 | 
						||
| 
								 | 
							
								    t.same(payload, { hello: 'world' })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 |