123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 'use strict';
- var jsonSchemaTest = require('json-schema-test')
- , Promise = require('./promise')
- , getAjvInstances = require('./ajv_async_instances')
- , Ajv = require('./ajv')
- , suite = require('./browser_test_suite')
- , after = require('./after_test');
- var instances = getAjvInstances({ $data: true });
- instances.forEach(addAsyncFormatsAndKeywords);
- jsonSchemaTest(instances, {
- description: 'asynchronous schemas tests of ' + instances.length + ' ajv instances with different options',
- suites: {
- 'async schemas':
- typeof window == 'object'
- ? suite(require('./async/{**/,}*.json', {mode: 'list'}))
- : './async/{**/,}*.json'
- },
- async: true,
- asyncValid: 'data',
- assert: require('./chai').assert,
- Promise: Promise,
- afterError: after.error,
- // afterEach: after.each,
- cwd: __dirname,
- hideFolder: 'async/',
- timeout: 90000
- });
- function addAsyncFormatsAndKeywords (ajv) {
- ajv.addFormat('english_word', {
- async: true,
- validate: checkWordOnServer
- });
- ajv.addKeyword('idExists', {
- async: true,
- type: 'number',
- validate: checkIdExists,
- errors: false
- });
- ajv.addKeyword('idExistsWithError', {
- async: true,
- type: 'number',
- validate: checkIdExistsWithError,
- errors: true
- });
- ajv.addKeyword('idExistsCompiled', {
- async: true,
- type: 'number',
- compile: compileCheckIdExists
- });
- }
- function checkWordOnServer(str) {
- return str == 'tomorrow' ? Promise.resolve(true)
- : str == 'manana' ? Promise.resolve(false)
- : Promise.reject(new Error('unknown word'));
- }
- function checkIdExists(schema, data) {
- switch (schema.table) {
- case 'users': return check([1, 5, 8]);
- case 'posts': return check([21, 25, 28]);
- default: throw new Error('no such table');
- }
- function check(IDs) {
- return Promise.resolve(IDs.indexOf(data) >= 0);
- }
- }
- function checkIdExistsWithError(schema, data) {
- var table = schema.table;
- switch (table) {
- case 'users': return check(table, [1, 5, 8]);
- case 'posts': return check(table, [21, 25, 28]);
- default: throw new Error('no such table');
- }
- function check(_table, IDs) {
- if (IDs.indexOf(data) >= 0)
- return Promise.resolve(true);
- var error = {
- keyword: 'idExistsWithError',
- message: 'id not found in table ' + _table
- };
- return Promise.reject(new Ajv.ValidationError([error]));
- }
- }
- function compileCheckIdExists(schema) {
- switch (schema.table) {
- case 'users': return compileCheck([1, 5, 8]);
- case 'posts': return compileCheck([21, 25, 28]);
- default: throw new Error('no such table');
- }
- function compileCheck(IDs) {
- return function (data) {
- return Promise.resolve(IDs.indexOf(data) >= 0);
- };
- }
- }
|