Skip to content

Commit 626604e

Browse files
authoredNov 18, 2024··
Merge pull request #396 from thorin8k/master
Add RightSideComparisonResult as factResult
2 parents 91c7f38 + 8e8b3f1 commit 626604e

File tree

6 files changed

+35
-4
lines changed

6 files changed

+35
-4
lines changed
 

‎src/condition.js

+3
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ export default class Condition {
6262
if (this.factResult !== undefined) {
6363
props.factResult = this.factResult
6464
}
65+
if (this.valueResult !== undefined) {
66+
props.valueResult = this.valueResult
67+
}
6568
if (this.result !== undefined) {
6669
props.result = this.result
6770
}

‎src/rule.js

+1
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ class Rule extends EventEmitter {
231231
.then((evaluationResult) => {
232232
const passes = evaluationResult.result
233233
condition.factResult = evaluationResult.leftHandSideValue
234+
condition.valueResult = evaluationResult.rightHandSideValue
234235
condition.result = passes
235236
return passes
236237
})

‎test/acceptance/acceptance.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ describe('Acceptance', () => {
3636
path: '$.values',
3737
value: 2,
3838
factResult: [2],
39+
valueResult: 2,
3940
result: true
4041
},
4142
{
4243
fact: 'low-priority',
4344
operator: 'in',
4445
value: [2],
4546
factResult: 2,
47+
valueResult: [2],
4648
result: true
4749
}
4850
],
@@ -169,7 +171,8 @@ describe('Acceptance', () => {
169171
},
170172
path: '$.values',
171173
result: true,
172-
value: 2
174+
value: 2,
175+
valueResult: 2
173176
},
174177
{
175178
fact: 'low-priority',
@@ -178,6 +181,9 @@ describe('Acceptance', () => {
178181
result: true,
179182
value: [
180183
2
184+
],
185+
valueResult: [
186+
2
181187
]
182188
}
183189
],
@@ -202,6 +208,7 @@ describe('Acceptance', () => {
202208
factResult: [
203209
2
204210
],
211+
valueResult: 2,
205212
operator: 'containsDivisibleValuesOf',
206213
params: {
207214
factParam: 1

‎test/engine-event.test.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ describe('Engine: event', () => {
642642
await engine.run()
643643
const ruleResult = successSpy.getCall(0).args[2]
644644
const expected =
645-
'{"conditions":{"priority":1,"any":[{"name":"over 21","operator":"greaterThanInclusive","value":21,"fact":"age","factResult":21,"result":true},{"operator":"equal","value":true,"fact":"qualified","factResult":false,"result":false}]},"event":{"type":"setDrinkingFlag","params":{"canOrderDrinks":true}},"priority":100,"result":true}'
645+
'{"conditions":{"priority":1,"any":[{"name":"over 21","operator":"greaterThanInclusive","value":21,"fact":"age","factResult":21,"valueResult":21,"result":true},{"operator":"equal","value":true,"fact":"qualified","factResult":false,"valueResult":true,"result":false}]},"event":{"type":"setDrinkingFlag","params":{"canOrderDrinks":true}},"priority":100,"result":true}'
646646
expect(JSON.stringify(ruleResult)).to.equal(expected)
647647
})
648648
})
@@ -651,7 +651,7 @@ describe('Engine: event', () => {
651651
beforeEach(() => setupWithConditionReference())
652652
it('serializes properties', async () => {
653653
const { results: [ruleResult] } = await engine.run()
654-
const expected = '{"conditions":{"priority":1,"any":[{"priority":1,"all":[{"name":"over 21","operator":"greaterThanInclusive","value":21,"fact":"age","factResult":21,"result":true}]}]},"event":{"type":"awesome"},"priority":100,"result":true}'
654+
const expected = '{"conditions":{"priority":1,"any":[{"priority":1,"all":[{"name":"over 21","operator":"greaterThanInclusive","value":21,"fact":"age","factResult":21,"valueResult":21,"result":true}]}]},"event":{"type":"awesome"},"priority":100,"result":true}'
655655
expect(JSON.stringify(ruleResult)).to.equal(expected)
656656
})
657657
})
@@ -662,7 +662,7 @@ describe('Engine: event', () => {
662662
const { results: [ruleResult] } = await engine.run()
663663
const { conditions: { any: [conditionReference] } } = ruleResult
664664
expect(conditionReference.result).to.equal(false)
665-
const expected = '{"conditions":{"priority":1,"any":[{"name":"nameOfTheUndefinedConditionReference","condition":"conditionThatIsNotDefined"},{"name":"over 21","operator":"greaterThanInclusive","value":21,"fact":"age","factResult":21,"result":true}]},"event":{"type":"awesome"},"priority":100,"result":true}'
665+
const expected = '{"conditions":{"priority":1,"any":[{"name":"nameOfTheUndefinedConditionReference","condition":"conditionThatIsNotDefined"},{"name":"over 21","operator":"greaterThanInclusive","value":21,"fact":"age","factResult":21,"valueResult":21,"result":true}]},"event":{"type":"awesome"},"priority":100,"result":true}'
666666
expect(JSON.stringify(ruleResult)).to.equal(expected)
667667
})
668668
})

‎test/engine-fact-comparison.test.js

+19
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,23 @@ describe('Engine: fact to fact comparison', () => {
118118
expect(eventSpy.callCount).to.equal(0)
119119
})
120120
})
121+
122+
context('constant facts: checking valueResult and factResult', () => {
123+
const constantCondition = {
124+
all: [{
125+
fact: 'height',
126+
operator: 'lessThanInclusive',
127+
value: {
128+
fact: 'width'
129+
}
130+
}]
131+
}
132+
it('result has the correct valueResult and factResult properties', async () => {
133+
setup(constantCondition)
134+
const result = await engine.run({ height: 1, width: 2 })
135+
136+
expect(result.results[0].conditions.all[0].factResult).to.equal(1)
137+
expect(result.results[0].conditions.all[0].valueResult).to.equal(2)
138+
})
139+
})
121140
})

‎types/index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ interface BooleanConditionResultProperties {
192192

193193
interface ConditionResultProperties extends BooleanConditionResultProperties {
194194
factResult?: unknown
195+
valueResult?: unknown
195196
}
196197

197198
interface ConditionProperties {

0 commit comments

Comments
 (0)
Please sign in to comment.