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.
		
		
		
		
		
			
		
			
				
					
					
						
							168 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
	
	
							168 lines
						
					
					
						
							3.0 KiB
						
					
					
				| 'use strict'
 | |
| 
 | |
| const t = require('tap')
 | |
| const test = t.test
 | |
| const rimraf = require('rimraf')
 | |
| const build = require('../example')
 | |
| 
 | |
| let fastify = null
 | |
| let token = null
 | |
| 
 | |
| t.teardown(() => {
 | |
|   fastify.close()
 | |
|   rimraf('./authdb', err => {
 | |
|     if (err) throw err
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('boot server', t => {
 | |
|   t.plan(1)
 | |
|   rimraf('./authdb', err => {
 | |
|     fastify = build()
 | |
|     t.error(err)
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Route without auth', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'GET',
 | |
|     url: '/no-auth'
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.same(payload, { hello: 'world' })
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Missing header', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'GET',
 | |
|     url: '/auth',
 | |
|     headers: {}
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.same(payload, {
 | |
|       error: 'Unauthorized',
 | |
|       message: 'Missing token header',
 | |
|       statusCode: 401
 | |
|     })
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Register user', t => {
 | |
|   t.plan(3)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'POST',
 | |
|     url: '/register',
 | |
|     payload: {
 | |
|       user: 'tomas',
 | |
|       password: 'a-very-secure-one'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.equal(res.statusCode, 200)
 | |
|     token = payload.token
 | |
|     t.equal(typeof payload.token, 'string')
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Auth succesful', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'GET',
 | |
|     url: '/auth',
 | |
|     headers: {
 | |
|       auth: token
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.same(payload, { hello: 'world' })
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Auth not succesful', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'GET',
 | |
|     url: '/auth',
 | |
|     headers: {
 | |
|       auth: 'the winter is coming'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.same(payload, {
 | |
|       error: 'Unauthorized',
 | |
|       message: 'Token not valid',
 | |
|       statusCode: 401
 | |
|     })
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Auth succesful (multiple)', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'POST',
 | |
|     url: '/auth-multiple',
 | |
|     payload: {
 | |
|       user: 'tomas',
 | |
|       password: 'a-very-secure-one'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.same(payload, { hello: 'world' })
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Auth not succesful (multiple)', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'POST',
 | |
|     url: '/auth-multiple',
 | |
|     payload: {
 | |
|       user: 'tomas',
 | |
|       password: 'wrong!'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.same(payload, {
 | |
|       error: 'Unauthorized',
 | |
|       message: 'Password not valid',
 | |
|       statusCode: 401
 | |
|     })
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Failure with explicit reply', t => {
 | |
|   t.plan(3)
 | |
| 
 | |
|   fastify.inject({
 | |
|     method: 'POST',
 | |
|     url: '/auth-multiple',
 | |
|     payload: {
 | |
|       failureWithReply: true,
 | |
|       user: 'tomas',
 | |
|       password: 'wrong!'
 | |
|     }
 | |
|   }, (err, res) => {
 | |
|     t.error(err)
 | |
|     const payload = JSON.parse(res.payload)
 | |
|     t.equal(res.statusCode, 401)
 | |
|     t.same(payload, { error: 'Unauthorized' })
 | |
|   })
 | |
| })
 |