UNPKG

json-logic-js-graphql

Version:

Graphql query support for json-logic-js using Lodash methods

234 lines (213 loc) 6.54 kB
import { expect } from 'chai' import { jsonLogic } from './index.js' import { describe, it } from 'mocha' describe('Custom operators', () => { describe('Custom', () => { it('nonZeroMin', () => { const logic = { _nonZeroMin: [[100, 0, 30]] } expect(jsonLogic.apply(logic)).to.be.equal(30) }) it('nonZeroMax', () => { const logic = { _nonZeroMax: [[100, 0, 30]] } expect(jsonLogic.apply(logic)).to.be.equal(100) }) }) }) describe('Moment operators', () => { describe('Dates', () => { it('_isPastDate', () => { const rules = { _isPastDate: [{ var: 'date' }], } const data = { date: '2020-10-01' } expect(jsonLogic.apply(rules, data)).to.be.equal(true) }) it('_isFutureDate', () => { const rules = { _isFutureDate: [{ var: 'date' }], } const data = { date: '2080-10-01' } expect(jsonLogic.apply(rules, data)).to.be.equal(true) }) it('_gteDate', () => { const rules = { _gteDate: [ [{ var: 'from' }, { var: 'to' }], [364, 'days'], ], } const data = { from: '2020-10-01', to: '2021-10-01' } expect(jsonLogic.apply(rules, data)).to.be.equal(true) }) it('_gtDate', () => { const rules = { _lteDate: [ [{ var: 'from' }, { var: 'to' }], [364, 'days'], ], } const data = { from: '2020-10-01', to: '2020-11-01', } expect(jsonLogic.apply(rules, data)).to.be.equal(true) }) it('_lteDate', () => { const rules = { _lteDate: [ [{ var: 'from' }, { var: 'to' }], [364, 'days'], ], } const data = { from: '2020-10-01', to: '2020-11-01', } expect(jsonLogic.apply(rules, data)).to.be.equal(true) }) it('_ltDate', () => { const rules = { _ltDate: [ [{ var: 'from' }, { var: 'to' }], [364, 'days'], ], } const data = { from: '2020-10-01', to: '2020-11-01', } expect(jsonLogic.apply(rules, data)).to.be.equal(true) }) it('_eqDate', () => { const rules = { _eqDate: [ [{ var: 'from' }, { var: 'to' }], [1, 'days'], ], } const data = { from: '2020-10-01', to: '2020-10-02', } expect(jsonLogic.apply(rules, data)).to.be.equal(true) }) }) }) describe('Lodash operators', () => { describe('Arrays', () => {}) describe('Collection', () => {}) describe('Date', () => {}) describe('Function', () => {}) describe('Lang', () => { it('isEqual', () => { const logicTrue = { _isEqual: [1, 1], } const logicFalse = { _isEqual: ['foo', 'bar'], } expect(jsonLogic.apply(logicTrue)).to.be.equal(true) expect(jsonLogic.apply(logicFalse)).to.be.equal(false) }) it('_neq', () => { const logicTrue = { _neq: ['foo', 'bar'], } const logicFalse = { _neq: [1, 1], } expect(jsonLogic.apply(logicTrue)).to.be.equal(true) expect(jsonLogic.apply(logicFalse)).to.be.equal(false) }) }) describe('Math', () => { it('add', () => { const logic = { _add: [2, 3] } expect(jsonLogic.apply(logic)).to.be.equal(5) }) it('ceil', () => { const logic = { _ceil: [4.006] } expect(jsonLogic.apply(logic)).to.be.equal(5) }) it('divide', () => { const logic = { _divide: [6, 3] } expect(jsonLogic.apply(logic)).to.be.equal(2) }) it('floor', () => { const logic = { _floor: [4.906] } expect(jsonLogic.apply(logic)).to.be.equal(4) }) it('max', () => { const logic = { _max: [[2, 5, 6, 3]] } expect(jsonLogic.apply(logic)).to.be.equal(6) }) it('maxBy', () => { const data = [{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }] const logic1 = { _maxBy: [{ var: '' }, 'n'] } const logic2 = { _maxBy: [{ var: '' }, { _property: 'n' }] } expect(jsonLogic.apply(logic1, data)).to.be.equal(data[2]) expect(jsonLogic.apply(logic2, data)).to.be.equal(data[2]) }) it('mean', () => { const logic = { _mean: [[2, 5, 6, 3]] } expect(jsonLogic.apply(logic)).to.be.equal(4) }) it('meanBy', () => { const data = [{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }] const logic1 = { _meanBy: [{ var: '' }, 'n'] } const logic2 = { _meanBy: [{ var: '' }, { _property: 'n' }] } expect(jsonLogic.apply(logic1, data)).to.be.equal(5) expect(jsonLogic.apply(logic2, data)).to.be.equal(5) }) it('min', () => { const logic = { _min: [[2, 5, 6, 3]] } expect(jsonLogic.apply(logic)).to.be.equal(2) }) it('minBy', () => { const data = [{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }] const logic1 = { _minBy: [{ var: '' }, 'n'] } const logic2 = { _minBy: [{ var: '' }, { _property: 'n' }] } expect(jsonLogic.apply(logic1, data)).to.be.equal(data[1]) expect(jsonLogic.apply(logic2, data)).to.be.equal(data[1]) }) it('multiply', () => { const logic = { _multiply: [2, 3] } expect(jsonLogic.apply(logic)).to.be.equal(6) }) it('round', () => { const logic1 = { _round: [4.006] } const logic2 = { _round: [4.906] } expect(jsonLogic.apply(logic1)).to.be.equal(4) expect(jsonLogic.apply(logic2)).to.be.equal(5) }) it('multiply', () => { const logic = { _multiply: [2, 3] } expect(jsonLogic.apply(logic)).to.be.equal(6) }) it('subtract', () => { const logic = { _subtract: [2, 3] } expect(jsonLogic.apply(logic)).to.be.equal(-1) }) it('sum', () => { const logic = { _sum: [[2, 3]] } expect(jsonLogic.apply(logic)).to.be.equal(5) }) it('sumBy', () => { const data = [{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }] const logic1 = { _sumBy: [{ var: '' }, 'n'] } const logic2 = { _sumBy: [{ var: '' }, { _property: 'n' }] } expect(jsonLogic.apply(logic1, data)).to.be.equal(20) expect(jsonLogic.apply(logic2, data)).to.be.equal(20) }) }) describe('Number', () => {}) describe('Object', () => {}) describe('String', () => {}) describe('Util', () => { it('property', () => { const data = [{ a: { b: 2 } }, { a: { b: 1 } }] const logic = { _sumBy: [{ var: '' }, { _property: 'a.b' }] } expect(jsonLogic.apply(logic, data)).to.be.equal(3) }) }) })