declarapi
Version:
Declarative API generation
100 lines (86 loc) • 2.68 kB
text/typescript
import { transform } from './transform.js'
describe('Generator', () => {
it('generates basic example without error', async () => {
const result = await transform(require('../../example/single_example.json'))
expect(result.errors).toBeUndefined()
expect(result).toHaveProperty('type', 'result')
})
it('generates for object single contract input', async () => {
const input = {
$schema: '../../schema/singleContractSchema.json',
name: 'test',
authentication: false,
arguments: { myNumber: 'number' },
returns: {}
}
const result: any = await transform(input)
expect(result.errors).toBeUndefined()
expect(result).toStrictEqual({
type: 'result',
key: 'test',
results: [
{
name: 'test',
authentication: false,
manageFields: {},
method: 'GET',
arguments: {
myNumber: 'number'
},
returns: {}
}
]
})
})
it('generates for object crud contract input', async () => {
const input = {
$schema: './schema/crudContractSchema.json',
name: 'test',
authentication: false,
dataType: { id: 'string', myNumber: 'number' }
}
const result: any = await transform(input)
expect(result.errors).toBeUndefined()
expect(result).toHaveProperty('type', 'result')
expect(result.results).toHaveLength(5)
})
it('rejects unknown $schema', async () => {
const input = {
$schema: './random.json',
name: 'test',
authentication: false,
arguments: { myNumber: 'number' },
returns: {}
}
const result: any = await transform(input)
expect(result.errors).toEqual('Unsupported schema for declaration: ./random.json')
})
it('rejects missing $schema', async () => {
const input = {
name: 'test',
authentication: false,
arguments: { myNumber: 'number' },
returns: {}
}
const result: any = await transform(input)
expect(result.errors).toEqual("Schema files must contain $schema that point to it's type")
})
it('rejects invalid type', async () => {
const input = {
$schema: './schema/singleContractSchema.json',
name: 'test',
authentication: false,
arguments: { myNumber: 'number', invalidProp: 'imaginaryType' },
returns: {}
}
const result: any = await transform(input)
expect(result.errors).toHaveLength(14)
expect(result.errors[0]).toEqual({
dataPath: ".arguments['invalidProp']",
keyword: 'type',
message: 'should be object',
params: { type: 'object' },
schemaPath: '#/type'
})
})
})