@atlassian/bitbucket-server
Version:
Bitbucket Server API client for Browser and Node.js
77 lines (59 loc) • 1.89 kB
JavaScript
const HTTPError = require('../../../request/http-error')
const validate = require('../validate')
const paramsSpecs = {
boolean: { type: 'boolean' },
enum: { enum: ['validEnum'], type: 'string' },
integer: { type: 'integer' },
required: { required: true, type: 'string' },
string: { type: 'string' }
}
let validParams = {
boolean: true,
enum: 'validEnum',
integer: 42,
required: 'required',
string: 'string',
xtra: 'xtra'
}
let params
beforeEach(() => {
params = { ...validParams }
})
describe('plugins:endpoint-methods/validate', () => {
it('returns valid params as is', () => {
expect(validate(paramsSpecs, params)).toEqual(validParams)
})
it('returns passed params as is when non-required params missing', () => {
delete params.boolean
delete params.enum
delete params.integer
delete params.string
expect(validate(paramsSpecs, params)).toEqual(params)
})
it('throws HTTPError when required params missing', () => {
delete params.required
expect(() => validate(paramsSpecs, params)).toThrow(HTTPError)
})
it('parses string value to int when type is integer', () => {
params.integer = '42'
expect(() => validate(paramsSpecs, params)).not.toThrow()
})
it.each([['false'], ['true']])(
'accepts as boolean type when value is string',
value => {
params.boolean = value
expect(() => validate(paramsSpecs, params)).not.toThrow()
}
)
it.each([['integer', 'forty-two'], ['boolean', 'yes']])(
'throws HTTPError when invalid params passed: (type value)',
(paramName, paramValue) => {
params[paramName] = paramValue
expect(() => validate(paramsSpecs, params)).toThrow(HTTPError)
}
)
it('throws HTTPError when param value not in enum', () => {
params.enum = 'invalidEnum'
expect(() => validate(paramsSpecs, params)).toThrow(HTTPError)
})
})