@@ -86,78 +86,113 @@ describe('Engine', () => {
86
86
87
87
describe ( 'updateRule()' , ( ) => {
88
88
it ( 'updates rule' , ( ) => {
89
- const rule = new Rule ( factories . rule ( ) )
90
- engine . addRule ( rule )
89
+ let rule1 = new Rule ( factories . rule ( { name : 'rule1' } ) )
90
+ let rule2 = new Rule ( factories . rule ( { name : 'rule2' } ) )
91
+ engine . addRule ( rule1 )
92
+ engine . addRule ( rule2 )
91
93
expect ( engine . rules [ 0 ] . conditions . all . length ) . to . equal ( 2 )
92
- rule . conditions = { all : [ ] }
93
- engine . updateRule ( rule )
94
- expect ( engine . rules [ 0 ] . conditions . all . length ) . to . equal ( 0 )
94
+ expect ( engine . rules [ 1 ] . conditions . all . length ) . to . equal ( 2 )
95
+
96
+ rule1 . conditions = { all : [ ] }
97
+ engine . updateRule ( rule1 )
98
+
99
+ rule1 = engine . rules . find ( rule => rule . name === 'rule1' )
100
+ rule2 = engine . rules . find ( rule => rule . name === 'rule2' )
101
+ expect ( rule1 . conditions . all . length ) . to . equal ( 0 )
102
+ expect ( rule2 . conditions . all . length ) . to . equal ( 2 )
95
103
} )
96
104
97
105
it ( 'should throw error if rule not found' , ( ) => {
98
- const rule1 = new Rule ( factories . rule ( ) )
106
+ const rule1 = new Rule ( factories . rule ( { name : 'rule1' } ) )
99
107
engine . addRule ( rule1 )
100
- const rule2 = new Rule ( factories . rule ( ) )
108
+ const rule2 = new Rule ( factories . rule ( { name : 'rule2' } ) )
101
109
expect ( ( ) => {
102
110
engine . updateRule ( rule2 )
103
111
} ) . to . throw ( / E n g i n e : u p d a t e R u l e \( \) r u l e n o t f o u n d / )
104
112
} )
105
113
} )
106
114
107
115
describe ( 'removeRule()' , ( ) => {
108
- context ( 'rule instance' , ( ) => {
109
- it ( 'removes the rule' , ( ) => {
110
- const rule = new Rule ( factories . rule ( ) )
111
- engine . addRule ( rule )
112
- expect ( engine . rules . length ) . to . equal ( 1 )
116
+ function setup ( ) {
117
+ const rule1 = new Rule ( factories . rule ( { name : 'rule1' } ) )
118
+ const rule2 = new Rule ( factories . rule ( { name : 'rule2' } ) )
119
+ engine . addRule ( rule1 )
120
+ engine . addRule ( rule2 )
121
+ engine . prioritizeRules ( )
122
+
123
+ return [ rule1 , rule2 ]
124
+ }
125
+ context ( 'remove by rule.name' , ( ) => {
126
+ it ( 'removes a single rule' , ( ) => {
127
+ const [ rule1 ] = setup ( )
128
+ expect ( engine . rules . length ) . to . equal ( 2 )
113
129
114
- const isRemoved = engine . removeRule ( rule )
130
+ const isRemoved = engine . removeRule ( rule1 . name )
115
131
116
132
expect ( isRemoved ) . to . be . true ( )
117
- expect ( engine . rules . length ) . to . equal ( 0 )
133
+ expect ( engine . rules . length ) . to . equal ( 1 )
118
134
expect ( engine . prioritizedRules ) . to . equal ( null )
119
135
} )
120
136
121
- it ( 'can only remove added rules' , ( ) => {
122
- expect ( engine . rules . length ) . to . equal ( 0 )
123
- const rule = new Rule ( factories . rule ( ) )
137
+ it ( 'removes multiple rules with the same name' , ( ) => {
138
+ const [ rule1 ] = setup ( )
139
+ const rule3 = new Rule ( factories . rule ( { name : rule1 . name } ) )
140
+ engine . addRule ( rule3 )
141
+ expect ( engine . rules . length ) . to . equal ( 3 )
124
142
125
- const isRemoved = engine . removeRule ( rule )
143
+ const isRemoved = engine . removeRule ( rule1 . name )
126
144
127
- expect ( isRemoved ) . to . equal ( false )
145
+ expect ( isRemoved ) . to . be . true ( )
146
+ expect ( engine . rules . length ) . to . equal ( 1 )
147
+ expect ( engine . prioritizedRules ) . to . equal ( null )
128
148
} )
129
149
130
- it ( 'clears the "prioritizedRules" cache' , ( ) => {
131
- const rule = new Rule ( factories . rule ( ) )
132
- engine . addRule ( rule )
133
- engine . prioritizeRules ( )
134
- engine . removeRule ( rule )
135
- expect ( engine . prioritizedRules ) . to . equal ( null )
150
+ it ( 'returns false when rule cannot be found' , ( ) => {
151
+ setup ( )
152
+ expect ( engine . rules . length ) . to . equal ( 2 )
153
+
154
+ const isRemoved = engine . removeRule ( 'not-found-name' )
155
+
156
+ expect ( isRemoved ) . to . be . false ( )
157
+ expect ( engine . rules . length ) . to . equal ( 2 )
158
+ expect ( engine . prioritizedRules ) . to . not . equal ( null )
136
159
} )
137
160
} )
161
+ context ( 'remove by rule object' , ( ) => {
162
+ it ( 'removes a single rule' , ( ) => {
163
+ const [ rule1 ] = setup ( )
164
+ expect ( engine . rules . length ) . to . equal ( 2 )
138
165
139
- context ( 'rule id' , ( ) => {
140
- it ( 'removes rule based on rule id' , ( ) => {
141
- const rule = new Rule ( factories . rule ( ) )
142
- engine . addRule ( rule )
166
+ const isRemoved = engine . removeRule ( rule1 )
167
+
168
+ expect ( isRemoved ) . to . be . true ( )
143
169
expect ( engine . rules . length ) . to . equal ( 1 )
170
+ expect ( engine . prioritizedRules ) . to . equal ( null )
171
+ } )
144
172
145
- const isRemoved = engine . removeRule ( rule . id )
173
+ it ( 'removes a single rule, even if two have the same name' , ( ) => {
174
+ const [ rule1 ] = setup ( )
175
+ const rule3 = new Rule ( factories . rule ( { name : rule1 . name } ) )
176
+ engine . addRule ( rule3 )
177
+ expect ( engine . rules . length ) . to . equal ( 3 )
178
+
179
+ const isRemoved = engine . removeRule ( rule1 )
146
180
147
181
expect ( isRemoved ) . to . be . true ( )
148
- expect ( engine . rules . length ) . to . equal ( 0 )
182
+ expect ( engine . rules . length ) . to . equal ( 2 )
149
183
expect ( engine . prioritizedRules ) . to . equal ( null )
150
184
} )
151
185
152
186
it ( 'returns false when rule cannot be found' , ( ) => {
153
- const rule = new Rule ( factories . rule ( ) )
154
- engine . addRule ( rule )
155
- expect ( engine . rules . length ) . to . equal ( 1 )
187
+ setup ( )
188
+ expect ( engine . rules . length ) . to . equal ( 2 )
156
189
157
- const isRemoved = engine . removeRule ( 'not-found-id' )
190
+ const rule3 = new Rule ( factories . rule ( { name : 'rule3' } ) )
191
+ const isRemoved = engine . removeRule ( rule3 )
158
192
159
193
expect ( isRemoved ) . to . be . false ( )
160
- expect ( engine . rules . length ) . to . equal ( 1 )
194
+ expect ( engine . rules . length ) . to . equal ( 2 )
195
+ expect ( engine . prioritizedRules ) . to . not . equal ( null )
161
196
} )
162
197
} )
163
198
} )
0 commit comments