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.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							2.4 KiB
						
					
					
				| 'use strict'
 | |
| 
 | |
| const { test } = require('tap')
 | |
| const Fastify = require('fastify')
 | |
| const fastifyAuth = require('../auth')
 | |
| 
 | |
| test('Clean status code through auth pipeline', t => {
 | |
|   t.plan(3)
 | |
| 
 | |
|   const app = Fastify()
 | |
|   app.register(fastifyAuth)
 | |
|     .after(() => {
 | |
|       app.addHook('preHandler', app.auth([failWithCode('one', 501), failWithCode('two', 502)]))
 | |
|       app.get('/', (req, res) => res.send(42))
 | |
|     })
 | |
| 
 | |
|   app.inject({
 | |
|     method: 'GET',
 | |
|     url: '/',
 | |
|     query: {
 | |
|       name: 'two'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     t.equal(res.payload, '42')
 | |
|     t.equal(res.statusCode, 200)
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Avoid status code overwriting', t => {
 | |
|   t.plan(3)
 | |
| 
 | |
|   const app = Fastify()
 | |
|   app.register(fastifyAuth)
 | |
|     .after(() => {
 | |
|       app.addHook('preHandler', app.auth([successWithCode('one', 201), successWithCode('two', 202)]))
 | |
|       app.get('/', (req, res) => res.send(42))
 | |
|     })
 | |
| 
 | |
|   app.inject({
 | |
|     method: 'GET',
 | |
|     url: '/',
 | |
|     query: {
 | |
|       name: 'two'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     t.equal(res.payload, '42')
 | |
|     t.equal(res.statusCode, 202)
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Last win when all failures', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   const app = Fastify()
 | |
|   app.register(fastifyAuth)
 | |
|     .after(() => {
 | |
|       app.addHook('preHandler', app.auth([failWithCode('one', 501), failWithCode('two', 502)]))
 | |
|       app.get('/', (req, res) => res.send(42))
 | |
|     })
 | |
| 
 | |
|   app.inject({
 | |
|     method: 'GET',
 | |
|     url: '/',
 | |
|     query: {
 | |
|       name: 'three'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     t.equal(res.statusCode, 502)
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('First success win', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   const app = Fastify()
 | |
|   app.register(fastifyAuth)
 | |
|     .after(() => {
 | |
|       app.addHook('preHandler', app.auth([successWithCode('one', 201), successWithCode('two', 202)]))
 | |
|       app.get('/', (req, res) => res.send(42))
 | |
|     })
 | |
| 
 | |
|   app.inject({
 | |
|     method: 'GET',
 | |
|     url: '/',
 | |
|     query: {
 | |
|       name: 'two'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     t.equal(res.statusCode, 202)
 | |
|   })
 | |
| })
 | |
| 
 | |
| function failWithCode (id, status) {
 | |
|   return function (request, reply, done) {
 | |
|     if (request.query.name === id) {
 | |
|       done()
 | |
|     } else {
 | |
|       reply.code(status)
 | |
|       done(new Error('query ' + id))
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| function successWithCode (id, status) {
 | |
|   return function (request, reply, done) {
 | |
|     if (request.query.name === id) {
 | |
|       reply.code(status)
 | |
|       done()
 | |
|     } else {
 | |
|       done(new Error('query ' + id))
 | |
|     }
 | |
|   }
 | |
| }
 |