diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/test-json-schema.js (renamed from test/test-schema.js) | 142 |
1 files changed, 131 insertions, 11 deletions
diff --git a/test/test-schema.js b/test/test-json-schema.js index 7a1ea9bc..d8e351be 100644 --- a/test/test-schema.js +++ b/test/test-json-schema.js @@ -28,6 +28,19 @@ vm.execute([ const JsonSchemaValidator = vm.get('JsonSchemaValidator'); +function schemaValidate(schema, value) { + return new JsonSchemaValidator().isValid(value, schema); +} + +function getValidValueOrDefault(schema, value) { + return new JsonSchemaValidator().getValidValueOrDefault(schema, value); +} + +function createProxy(schema, value) { + return new JsonSchemaValidator().createProxy(value, schema); +} + + function testValidate1() { const schema = { allOf: [ @@ -54,10 +67,6 @@ function testValidate1() { ] }; - const schemaValidate = (value) => { - return new JsonSchemaValidator().isValid(value, schema); - }; - const jsValidate = (value) => { return ( typeof value === 'number' && @@ -77,7 +86,7 @@ function testValidate1() { }; for (let i = -111; i <= 111; i++) { - const actual = schemaValidate(i, schema); + const actual = schemaValidate(schema, i); const expected = jsValidate(i); assert.strictEqual(actual, expected); } @@ -403,13 +412,9 @@ function testValidate2() { } ]; - const schemaValidate = (value, schema) => { - return new JsonSchemaValidator().isValid(value, schema); - }; - for (const {schema, inputs} of data) { for (const {expected, value} of inputs) { - const actual = schemaValidate(value, schema); + const actual = schemaValidate(schema, value); assert.strictEqual(actual, expected); } } @@ -686,17 +691,132 @@ function testGetValidValueOrDefault1() { for (const {schema, inputs} of data) { for (const [value, expected] of inputs) { - const actual = new JsonSchemaValidator().getValidValueOrDefault(schema, value); + const actual = getValidValueOrDefault(schema, value); vm.assert.deepStrictEqual(actual, expected); } } } +function testProxy1() { + const data = [ + // Object tests + { + schema: { + type: 'object', + required: ['test'], + additionalProperties: false, + properties: { + test: { + type: 'string', + default: 'default' + } + } + }, + tests: [ + {error: false, value: {test: 'default'}, action: (value) => { value.test = 'string'; }}, + {error: true, value: {test: 'default'}, action: (value) => { value.test = null; }}, + {error: true, value: {test: 'default'}, action: (value) => { delete value.test; }}, + {error: true, value: {test: 'default'}, action: (value) => { value.test2 = 'string'; }}, + {error: false, value: {test: 'default'}, action: (value) => { delete value.test2; }} + ] + }, + { + schema: { + type: 'object', + required: ['test'], + additionalProperties: true, + properties: { + test: { + type: 'string', + default: 'default' + } + } + }, + tests: [ + {error: false, value: {test: 'default'}, action: (value) => { value.test = 'string'; }}, + {error: true, value: {test: 'default'}, action: (value) => { value.test = null; }}, + {error: true, value: {test: 'default'}, action: (value) => { delete value.test; }}, + {error: false, value: {test: 'default'}, action: (value) => { value.test2 = 'string'; }}, + {error: false, value: {test: 'default'}, action: (value) => { delete value.test2; }} + ] + }, + { + schema: { + type: 'object', + required: ['test1'], + additionalProperties: false, + properties: { + test1: { + type: 'object', + required: ['test2'], + additionalProperties: false, + properties: { + test2: { + type: 'object', + required: ['test3'], + additionalProperties: false, + properties: { + test3: { + type: 'string', + default: 'default' + } + } + } + } + } + } + }, + tests: [ + {error: false, action: (value) => { value.test1.test2.test3 = 'string'; }}, + {error: true, action: (value) => { value.test1.test2.test3 = null; }}, + {error: true, action: (value) => { delete value.test1.test2.test3; }}, + {error: true, action: (value) => { value.test1.test2 = null; }}, + {error: true, action: (value) => { value.test1 = null; }}, + {error: true, action: (value) => { value.test4 = 'string'; }}, + {error: false, action: (value) => { delete value.test4; }} + ] + }, + + // Array tests + { + schema: { + type: 'array', + items: { + type: 'string', + default: 'default' + } + }, + tests: [ + {error: false, value: ['default'], action: (value) => { value[0] = 'string'; }}, + {error: true, value: ['default'], action: (value) => { value[0] = null; }}, + {error: true, value: ['default'], action: (value) => { delete value[0]; }}, + {error: false, value: ['default'], action: (value) => { value[1] = 'string'; }} + ] + } + ]; + + for (const {schema, tests} of data) { + for (let {error, value, action} of tests) { + if (typeof value === 'undefined') { value = getValidValueOrDefault(schema, void 0); } + assert.ok(schemaValidate(schema, value)); + console.log(error, value, schema); + const valueProxy = createProxy(schema, value); + if (error) { + assert.throws(() => action(valueProxy)); + } else { + assert.doesNotThrow(() => action(valueProxy)); + } + } + } +} + + function main() { testValidate1(); testValidate2(); testGetValidValueOrDefault1(); + testProxy1(); } |