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