UNPKG

shurajs

Version:

A simple and extensible json schema extractor for NodeJS

210 lines (174 loc) 4.21 kB
const _ = require('lodash') const shurajs = require('../../index') test('single property parse success', () => { const expected = { name: 'Ben-hur' } const value = { name: 'Ben-hur' } const template = { '*': 'object', definition: { name: { '*': 'string' } } } const received = shurajs.extract(template, value) expect(JSON.stringify(expected)).toBe(JSON.stringify(received)) }) test('invalid property not bind', () => { const expected = { name: 'Ben-hur' } const value = { name: 'Ben-hur', age: 29 } const template = { '*': 'object', definition: { name: { '*': 'string' } } } const received = shurajs.extract(template, value) expect(JSON.stringify(expected)).toBe(JSON.stringify(received)) }) test('nested object success', () => { const expected = { name: 'Ben-hur', skills: { nodejs: 5, ios: 7 } } const value = { name: 'Ben-hur', skills: { nodejs: 5, ios: 7 } } const template = { '*': 'object', definition: { name: { '*': 'string' }, skills: { '*': 'object', definition: { nodejs: { '*': 'number' }, ios: { '*': 'number' } } } } } const received = shurajs.extract(template, value) expect(JSON.stringify(expected)).toBe(JSON.stringify(received)) }) test('schema larger than object success', () => { const expected = { name: 'Ben-hur' } const value = { name: 'Ben-hur' } const template = { '*': 'object', definition: { name: { '*': 'string' }, skills: { '*': 'object', definition: { nodejs: { '*': 'number' }, ios: { '*': 'number' } } } } } const received = shurajs.extract(template, value) expect(JSON.stringify(expected)).toBe(JSON.stringify(received)) }) test('null property is not removed', () => { const value = { name: null } const template = { '*': 'object', definition: { name: { '*': 'string' } } } const received = shurajs.extract(template, value) expect(received.name).toBeNull() }) test('undefined property is removed', () => { const expected = {} const value = { name: undefined } const template = { '*': 'object', definition: { name: { '*': 'string' } } } const received = shurajs.extract(template, value) expect(JSON.stringify(expected)).toBe(JSON.stringify(received)) }) test('invalid element tree parses successfully', () => { const expected = { name: 'Zyon', skills: { combat: { attack: 5, defense: 5 } } } const schema = { name: { '*': 'string' }, skills: { '*': 'object', definition: { combat: { '*': 'object', definition: { attack: { '*': 'number' }, defense: { '*': 'number' } } } }, defaultValue: { combat: { attack: 5, defense: 5 } } } } const value = { name: 'Zyon', skills: false } const received = shurajs.extract(schema, value) expect(JSON.stringify(received)).toBe(JSON.stringify(expected)) })