UNPKG

json-rules-engine

Version:
53 lines (46 loc) 1.47 kB
'use strict' import sinon from 'sinon' import engineFactory from '../src/index' describe('Engine: cache', () => { let engine let event = { type: 'setDrinkingFlag' } let collegeSeniorEvent = { type: 'isCollegeSenior' } let conditions = { any: [{ fact: 'age', operator: 'greaterThanInclusive', value: 21 }] } let factSpy = sinon.spy() let eventSpy = sinon.spy() let ageFact = () => { factSpy() return 22 } function setup (factOptions) { factSpy.reset() eventSpy.reset() engine = engineFactory() let determineDrinkingAge = factories.rule({ conditions, event, priority: 100 }) engine.addRule(determineDrinkingAge) let determineCollegeSenior = factories.rule({ conditions, event: collegeSeniorEvent, priority: 1 }) engine.addRule(determineCollegeSenior) let over20 = factories.rule({ conditions, event: collegeSeniorEvent, priority: 50 }) engine.addRule(over20) engine.addFact('age', ageFact, factOptions) engine.on('success', eventSpy) } it('loads facts once and caches the results for future use', async () => { setup({cache: true}) await engine.run() expect(eventSpy).to.have.been.calledThrice() expect(factSpy).to.have.been.calledOnce() }) it('allows caching to be turned off', async () => { setup({cache: false}) await engine.run() expect(eventSpy).to.have.been.calledThrice() expect(factSpy).to.have.been.calledThrice() }) })