@@ -13,6 +13,10 @@ describe("Engine: event", () => {
13
13
canOrderDrinks : true ,
14
14
} ,
15
15
} ;
16
+
17
+ const awesomeEvent = {
18
+ type : 'awesome'
19
+ }
16
20
/**
17
21
* sets up a simple 'any' rule with 2 conditions
18
22
*/
@@ -85,6 +89,46 @@ describe("Engine: event", () => {
85
89
engine . addFact ( "gender" , "male" ) ; // gender succeeds
86
90
}
87
91
92
+ function setupWithConditionReference ( ) {
93
+ const conditionName = 'awesomeCondition'
94
+ const conditions = {
95
+ any : [ { condition : conditionName } ]
96
+ }
97
+ engine = engineFactory ( )
98
+ const ruleOptions = { conditions, event : awesomeEvent , priority : 100 }
99
+ const rule = ruleFactory ( ruleOptions )
100
+ engine . addRule ( rule )
101
+ engine . setCondition ( conditionName , {
102
+ all : [ {
103
+ name : 'over 21' ,
104
+ fact : 'age' ,
105
+ operator : 'greaterThanInclusive' ,
106
+ value : 21
107
+ } ]
108
+ } )
109
+ engine . addFact ( 'age' , 21 )
110
+ }
111
+
112
+ function setupWithUndefinedCondition ( ) {
113
+ const conditionName = 'conditionThatIsNotDefined'
114
+ const conditions = {
115
+ any : [
116
+ { condition : conditionName , name : 'nameOfTheUndefinedConditionReference' } ,
117
+ {
118
+ name : 'over 21' ,
119
+ fact : 'age' ,
120
+ operator : 'greaterThanInclusive' ,
121
+ value : 21
122
+ }
123
+ ]
124
+ }
125
+ engine = engineFactory ( [ ] , { allowUndefinedConditions : true } )
126
+ const ruleOptions = { conditions, event : awesomeEvent , priority : 100 }
127
+ const rule = ruleFactory ( ruleOptions )
128
+ engine . addRule ( rule )
129
+ engine . addFact ( 'age' , 21 )
130
+ }
131
+
88
132
describe ( "engine events: simple" , ( ) => {
89
133
beforeEach ( ( ) => simpleSetup ( ) ) ;
90
134
@@ -647,4 +691,24 @@ describe("Engine: event", () => {
647
691
expect ( JSON . stringify ( ruleResult ) ) . toBe ( expected ) ;
648
692
} ) ;
649
693
} ) ;
694
+
695
+ describe ( 'rule events: json serializing with condition reference' , ( ) => {
696
+ beforeEach ( ( ) => setupWithConditionReference ( ) )
697
+ it ( 'serializes properties' , async ( ) => {
698
+ const { results : [ ruleResult ] } = await engine . run ( )
699
+ 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}'
700
+ expect ( JSON . stringify ( ruleResult ) ) . toEqual ( expected )
701
+ } )
702
+ } )
703
+
704
+ describe ( 'rule events: json serializing with condition reference that is undefined' , ( ) => {
705
+ beforeEach ( ( ) => setupWithUndefinedCondition ( ) )
706
+ it ( 'serializes properties' , async ( ) => {
707
+ const { results : [ ruleResult ] } = await engine . run ( )
708
+ const { conditions : { any : [ conditionReference ] } } = ruleResult
709
+ expect ( conditionReference . result ) . toEqual ( false )
710
+ 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}'
711
+ expect ( JSON . stringify ( ruleResult ) ) . toEqual ( expected )
712
+ } )
713
+ } )
650
714
} ) ;
0 commit comments