@goa/goa
Version:
The Goa Source Code For Compilation Into @Goa/Koa That Includes Modules, Tests, Types And Dependencies.
189 lines (171 loc) • 3.85 kB
JavaScript
import { equal } from '@zoroaster/assert'
import Context from '../../context'
export const context = Context
/** @type {TestSuite} */
export const message = {
'sets .status to 500'({ ctx }) {
try {
ctx.throw('boom')
} catch (err) {
equal(err.status, 500)
equal(err.expose, false)
}
},
}
/** @type {TestSuite} */
export const error = {
'should set .status to 500'({ ctx }) {
const err = new Error('test')
try {
ctx.throw(err)
} catch (e) {
equal(e.status, 500)
equal(e.message, 'test')
equal(e.expose, false)
}
},
}
/** @type {TestSuite} */
export const errStatus = {
'should throw the error and set .status'({ ctx }) {
const err = new Error('test')
try {
ctx.throw(err, 422)
} catch (e) {
equal(e.status, 422)
equal(e.message, 'test')
equal(e.expose, true)
}
},
}
/** @type {TestSuite} */
export const statusErr = {
'should throw the error and set .status'({ ctx }) {
const err = new Error('test')
try {
ctx.throw(422, err)
} catch (e) {
equal(e.status, 422)
equal(e.message, 'test')
equal(e.expose, true)
}
},
}
/** @type {TestSuite} */
export const msgStatus = {
'should throw an error'({ ctx }) {
try {
ctx.throw('name required', 400)
} catch (err) {
equal(err.message, 'name required')
equal(err.status, 400)
equal(err.expose, true)
}
},
}
/** @type {TestSuite} */
export const statusMsg = {
'should throw an error'({ ctx }) {
try {
ctx.throw(400, 'name required')
} catch (err) {
equal(err.message, 'name required')
equal(400, err.status)
equal(true, err.expose)
}
},
}
/** @type {TestSuite} */
export const status = {
'should throw an error'({ ctx }) {
try {
ctx.throw(400)
} catch (err) {
equal(err.message, 'Bad Request')
equal(err.status, 400)
equal(err.expose, true)
}
},
'when not valid status': {
'should not expose'({ ctx }) {
try {
const err = new Error('some error')
err.status = -1
ctx.throw(err)
} catch (err) {
equal(err.message, 'some error')
equal(err.expose, false)
}
},
},
}
/** @type {TestSuite} */
export const statusMsgProps = {
'should mixin props'({ ctx }) {
try {
ctx.throw(400, 'msg', { prop: true })
} catch (err) {
equal(err.message, 'msg')
equal(err.status, 400)
equal(err.expose, true)
equal(err.prop, true)
}
},
'when props include status': {
'should be ignored'({ ctx }) {
try {
ctx.throw(400, 'msg', {
prop: true,
status: -1,
})
} catch (err) {
equal(err.message, 'msg')
equal(err.status, 400)
equal(err.expose, true)
equal(err.prop, true)
}
},
},
}
/** @type {TestSuite} */
export const msgProps = {
'should mixin props'({ ctx }) {
try {
ctx.throw('msg', { prop: true })
} catch (err) {
equal(err.message, 'msg')
equal(err.status, 500)
equal(err.expose, false)
equal(err.prop, true)
}
},
}
/** @type {TestSuite} */
export const statusProps = {
'should mixin props'({ ctx }) {
try {
ctx.throw(400, { prop: true })
} catch (err) {
equal(err.message, 'Bad Request')
equal(err.status, 400)
equal(err.expose, true)
equal(err.prop, true)
}
},
}
/** @type {TestSuite} */
export const errProps = {
'should mixin props'({ ctx }) {
try {
ctx.throw(new Error('test'), { prop: true })
} catch (err) {
equal(err.message, 'test')
equal(err.status, 500)
equal(err.expose, false)
equal(err.prop, true)
}
},
}
/**
* @typedef {import('../../context').TestSuite} TestSuite
*/