UNPKG

podeng

Version:

Simple JSON value normalization to make everything gone right.

163 lines (144 loc) 4.32 kB
'use strict'; /* eslint-disable */ const blueprint = require('../blueprint') const types = require('../types') test('Should be able to use condition type', () => { const Schema = blueprint.object({ summary: types.conditions(value => value >= 17, 'Adult', 'Child'), pass: types.conditions({ evaluates: birthYear => new Date().getFullYear() - birthYear > 17, onOk: 'Yes you pass', onFail: 'You Fail', }), }) const Schema2 = blueprint.object({ evaluate: types.conditions( value => { const v = 'wrong evaluator' }, 'Foo', 'Bar' ), }) const throwError = () => { blueprint.object({ value: types.conditions([]), }) } expect(Schema({ summary: 10, pass: 1991 })).toEqual({ summary: 'Child', pass: 'Yes you pass', }) expect(Schema({ summary: 27, pass: 2015 })).toEqual({ summary: 'Adult', pass: 'You Fail', }) expect(Schema2({ evaluate: 'sxx' })).toEqual({ evaluate: 'Bar' }) expect(throwError).toThrow(TypeError('Invalid setup for "conditions" type')) }) test('Should be able to use multiple condition level', () => { const Schema = blueprint.object({ age: types.conditions( age => age >= 17, types.conditions( age => age >= 30, 'You should find your love', 'Just having fun right now' ), 'Child' ), }) const SchemaClone1 = blueprint.object({ age: types.conditions({ evaluates: age => age >= 17, onOk: types.conditions({ evaluates: age => age >= 30, onOk: 'You should find your love', onFail: 'Just having fun right now', }), onFail: 'Child', }), }) const Schema2 = blueprint.object({ age: types.conditions( age => age >= 17, types.conditions( age => age >= 30, types.conditions( age => age >= 60, 'Take a rest', 'You should find your love' ), 'Just having fun right now' ), 'Child' ), }) const SchemaClone2 = blueprint.object({ age: types.conditions({ evaluates: age => age >= 17, onOk: types.conditions( age => age >= 30, types.conditions( age => age >= 60, 'Take a rest', 'You should find your love' ), 'Just having fun right now' ), onFail: 'Child', }), }) const Schema3 = blueprint.object({ age: types.conditions( age => age <= 17, 'Explore the world Child!', types.conditions( age => age >= 30, 'find your love', types.conditions( age => age === 27, 'Build a startup!', 'Do whatever you like' ) ) ), }) const SchemaClone3 = blueprint.object({ age: types.conditions( age => age <= 17, 'Explore the world Child!', types.conditions( age => age >= 30, 'find your love', types.conditions({ evaluates: age => age === 27, onOk: 'Build a startup!', onFail: 'Do whatever you like', }) ) ), }) expect(Schema({ age: 35 })).toEqual({ age: 'You should find your love' }) expect(Schema({ age: 20 })).toEqual({ age: 'Just having fun right now' }) expect(Schema({ age: 15 })).toEqual({ age: 'Child' }) expect(SchemaClone1({ age: 35 })).toEqual({ age: 'You should find your love', }) expect(SchemaClone1({ age: 20 })).toEqual({ age: 'Just having fun right now', }) expect(SchemaClone1({ age: 15 })).toEqual({ age: 'Child' }) expect(Schema2({ age: 35 })).toEqual({ age: 'You should find your love' }) expect(Schema2({ age: 65 })).toEqual({ age: 'Take a rest' }) expect(SchemaClone2({ age: 35 })).toEqual({ age: 'You should find your love', }) expect(SchemaClone2({ age: 65 })).toEqual({ age: 'Take a rest' }) expect(Schema3({ age: 17 })).toEqual({ age: 'Explore the world Child!' }) expect(Schema3({ age: 27 })).toEqual({ age: 'Build a startup!' }) expect(Schema3({ age: 42 })).toEqual({ age: 'find your love' }) expect(SchemaClone3({ age: 17 })).toEqual({ age: 'Explore the world Child!' }) expect(SchemaClone3({ age: 27 })).toEqual({ age: 'Build a startup!' }) expect(SchemaClone3({ age: 42 })).toEqual({ age: 'find your love' }) })