UNPKG

deneric

Version:

Serialization and deserialization JSON to Entity

261 lines (255 loc) 8.89 kB
import deneric, { DEFAULT_VALUE } from '../source/index' import assert from 'assert' import mocha from 'mocha' // const assert from 'assert' const describe = mocha.describe class ChildEntity extends deneric.Entity { constructor(data) { super(data, { name: ['child_name', deneric.String], age: ['profile.age', deneric.Number], active: ['profile.is_active', deneric.Boolean] }) } } class BeautifulEntity extends deneric.Entity { constructor(data) { super(data, { username: ['name', deneric.String], password: ['pass', deneric.String], displayName: ['profile.display_name', deneric.String], age: ['profile.age_int', deneric.Number], active: ['status_desc.is_active', deneric.Boolean], child: ['child.info', ChildEntity] }) } } describe('Deneric Unit Test', () => { describe('valid data init', () => { const data = { username: 'user123', name: 'user1', pass: 'pass2@123', profile: { display_name: 'User One', age_int: 12, age_double: 12.31 }, status_desc: { is_active: true, is_deactive: false }, child: { extras: [1, 2], info: { child_name: 'Son 1', profile: { age: 12, is_active: true, is_deactive: false } } } } const serialize = { name: 'user1', pass: 'pass2@123', profile: { display_name: 'User One', age_int: 12 }, status_desc: { is_active: true }, child: { info: { child_name: 'Son 1', profile: { age: 12, is_active: true } } } } it('Full data', () => { let tmp = new BeautifulEntity(data) assert.equal(tmp.username, data.name) assert.equal(tmp.password, data.pass) assert.equal(tmp.displayName, data.profile.display_name) assert.equal(tmp.age, data.profile.age_int) assert.equal(tmp.active, data.status_desc.is_active) assert.deepStrictEqual(tmp.serialize, serialize) assert.deepStrictEqual(tmp.child.serialize, serialize.child.info) }) it('Missing data', () => { let tmp = new BeautifulEntity({ ...data, name: undefined }) assert.equal(tmp.username, DEFAULT_VALUE[deneric.String]()) assert.equal(tmp.password, data.pass) assert.equal(tmp.displayName, data.profile.display_name) assert.equal(tmp.age, data.profile.age_int) assert.equal(tmp.active, data.status_desc.is_active) assert.deepStrictEqual(tmp.serialize, { ...serialize, name: '' }) tmp = new BeautifulEntity({ ...data, pass: '' }) assert.equal(tmp.username, data.name) assert.equal(tmp.password, DEFAULT_VALUE[deneric.String]()) assert.equal(tmp.displayName, data.profile.display_name) assert.equal(tmp.age, data.profile.age_int) assert.equal(tmp.active, data.status_desc.is_active) assert.deepStrictEqual(tmp.serialize, { ...serialize, pass: '' }) tmp = new BeautifulEntity({ ...data, profile: {} }) assert.equal(tmp.username, data.name) assert.equal(tmp.password, data.pass) assert.equal(tmp.displayName, DEFAULT_VALUE[deneric.String]()) assert.equal(tmp.age, DEFAULT_VALUE.Number()) assert.equal(tmp.active, data.status_desc.is_active) assert.deepStrictEqual(tmp.serialize, { ...serialize, profile: { display_name: '', age_int: 0 } }) }) it('Wrong data type', () => { let tmp = new BeautifulEntity({ ...data, name: 1 }) assert.equal(tmp.username, DEFAULT_VALUE.String()) assert.equal(tmp.password, data.pass) assert.equal(tmp.displayName, data.profile.display_name) assert.equal(tmp.age, data.profile.age_int) assert.equal(tmp.active, data.status_desc.is_active) assert.deepStrictEqual(tmp.serialize, { ...serialize, name: '' }) tmp = new BeautifulEntity({ ...data, pass: true }) assert.equal(tmp.username, data.name) assert.equal(tmp.password, DEFAULT_VALUE.String()) assert.equal(tmp.displayName, data.profile.display_name) assert.equal(tmp.age, data.profile.age_int) assert.equal(tmp.active, data.status_desc.is_active) assert.deepStrictEqual(tmp.serialize, { ...serialize, pass: '' }) tmp = new BeautifulEntity({ ...data, profile: [1, 2, 3] }) assert.equal(tmp.username, data.name) assert.equal(tmp.password, data.pass) assert.equal(tmp.displayName, DEFAULT_VALUE.String()) assert.equal(tmp.age, DEFAULT_VALUE.Number()) assert.equal(tmp.active, data.status_desc.is_active) assert.deepStrictEqual(tmp.serialize, { ...serialize, profile: { display_name: '', age_int: 0 } }) tmp = new BeautifulEntity({ ...data, status_desc: { is_active: 'true' } }) assert.equal(tmp.username, data.name) assert.equal(tmp.password, data.pass) assert.equal(tmp.displayName, data.profile.display_name) assert.equal(tmp.age, data.profile.age_int) assert.equal(tmp.active, DEFAULT_VALUE.Boolean()) assert.deepStrictEqual(tmp.serialize, { ...serialize, status_desc: { is_active: false } }) }) }) describe('invalid data init', () => { const serialize = { name: '', pass: '', profile: { display_name: '', age_int: 0 }, status_desc: { is_active: false }, child: { info: { child_name: '', profile: { age: 0, is_active: false } } } } function checkInitAndSerialize(dataInit) { let tmp = new BeautifulEntity(dataInit) assert.equal(tmp.username, DEFAULT_VALUE.String()) assert.equal(tmp.password, DEFAULT_VALUE.String()) assert.equal(tmp.displayName, DEFAULT_VALUE.String()) assert.equal(tmp.age, DEFAULT_VALUE.Number()) assert.equal(tmp.active, DEFAULT_VALUE.Boolean()) assert.deepEqual(tmp.serialize, serialize) } it('Undefined', () => { checkInitAndSerialize() }) it('Null', () => { checkInitAndSerialize(null) }) it('Array', () => { checkInitAndSerialize([1, 2, 3, '4', true]) checkInitAndSerialize([]) }) it('Object', () => { checkInitAndSerialize({ name: 1, username: 'test', child: [1, 2, 3] }) checkInitAndSerialize({}) }) it('Boolean', () => { checkInitAndSerialize(true) checkInitAndSerialize(false) }) it('Number', () => { checkInitAndSerialize(0) checkInitAndSerialize(1) checkInitAndSerialize(-1) checkInitAndSerialize(NaN) checkInitAndSerialize(1 / 0) }) it('String', () => { checkInitAndSerialize('') checkInitAndSerialize('12123123') checkInitAndSerialize('asd_asdas-asd') }) }) })