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

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