apeman-app-validate
Version:
apeman app to do schema validation.
145 lines (135 loc) • 3.38 kB
JavaScript
/**
* Test case for create.
* Runs with mocha.
*/
'use strict'
const create = require('../lib/create.js')
const apemanport = require('apemanport')
const assert = require('assert')
const co = require('co')
const apemanApp = require('apeman-app')
const apemanrequest = require('apemanrequest')
const loc = require('../doc/mocks/mock-locales')
describe('create', function () {
let app, server, port
let request = apemanrequest.create({})
before(() => co(function * () {
app = create({
properties: {
accountName: {
type: 'string',
minLength: 2
},
password: {
type: 'string'
}
},
required: [
'accountName',
'password'
]
})
assert.ok(app)
port = yield apemanport.find()
server = yield apemanApp('testing-app', {
port,
configuration: {
$apps: {
'testing-app': {
'': [
require('apeman-app-body')(),
require('apeman-app-locale')(loc),
require('apeman-app-route')({
'/users': {
'POST': [
app
]
}
})
]
}
}
}
})
}))
after(() => co(function * () {
yield server.close()
}))
it('Get multiple data to validate.', () => co(function * () {
let body = {
data: [
{ attributes: { name: 'hoge' } },
{ attributes: { name: 'fuge' } }
]
}
let data = app.parseData(body, 'data/attributes')
assert.deepEqual(
data,
[
{ name: 'hoge' },
{ name: 'fuge' }
]
)
assert.equal(data[ 0 ].$pointer, '/data/0/attributes')
assert.equal(data[ 1 ].$pointer, '/data/1/attributes')
}))
it('Send invalid request', () => co(function * () {
let res = yield request({
url: `http://localhost:${port}/users`,
method: 'POST',
json: true,
form: {
data: {
type: 'users',
attributes: {
accountName: 'f'
}
}
}
})
assert.equal(res.statusCode, 400)
let { body } = res
let errors = body.errors
assert.equal(errors[ 0 ].source.pointer, '/data/attributes/password')
}))
it('Send invalid request with multiple body', () => co(function * () {
let res = yield request({
url: `http://localhost:${port}/users`,
method: 'POST',
form: {
data: [
{
type: 'users',
attributes: {
accountName: 'f',
password: 'hoge'
}
}
]
}
})
let { body } = res
assert.equal(res.statusCode, 400)
let errors = body.errors
assert.equal(errors[ 0 ].source.pointer, '/data/0/attributes/accountName')
assert.ok(errors)
}))
it('Send without data', () => co(function * () {
let res = yield request({
url: `http://localhost:${port}/users`,
method: 'POST',
json: true,
form: {
data: []
}
})
let { body } = res
console.log(body)
assert.equal(res.statusCode, 400)
let errors = body.errors
assert.ok(errors[ 0 ])
assert.equal(errors[ 0 ].status, '422')
assert.equal(errors[ 0 ].source.pointer, '/data/attributes')
}))
})
/* global describe, before, after, it */