-
Notifications
You must be signed in to change notification settings - Fork 488
/
Copy pathengine-failure.test.js
45 lines (40 loc) · 1.06 KB
/
engine-failure.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
'use strict'
import engineFactory from '../src/index'
import sinon from 'sinon'
describe('Engine: failure', () => {
let engine
let sandbox
before(() => {
sandbox = sinon.createSandbox()
})
afterEach(() => {
sandbox.restore()
})
const event = { type: 'generic' }
const conditions = {
any: [{
fact: 'age',
operator: 'greaterThanInclusive',
value: 21
}]
}
beforeEach(() => {
engine = engineFactory()
const determineDrinkingAgeRule = factories.rule({ conditions, event })
engine.addRule(determineDrinkingAgeRule)
engine.addFact('age', 10)
})
it('emits an event on a rule failing', async () => {
const failureSpy = sandbox.spy()
engine.on('failure', failureSpy)
await engine.run()
expect(failureSpy).to.have.been.calledWith(engine.rules[0].ruleEvent)
})
it('does not emit when a rule passes', async () => {
const failureSpy = sandbox.spy()
engine.on('failure', failureSpy)
engine.addFact('age', 50)
await engine.run()
expect(failureSpy).to.not.have.been.calledOnce()
})
})