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

'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' })
})
})