@@ -86,78 +86,113 @@ describe('Engine', () => {
8686
8787 describe ( 'updateRule()' , ( ) => {
8888 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 )
9193 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 )
95103 } )
96104
97105 it ( 'should throw error if rule not found' , ( ) => {
98- const rule1 = new Rule ( factories . rule ( ) )
106+ const rule1 = new Rule ( factories . rule ( { name : 'rule1' } ) )
99107 engine . addRule ( rule1 )
100- const rule2 = new Rule ( factories . rule ( ) )
108+ const rule2 = new Rule ( factories . rule ( { name : 'rule2' } ) )
101109 expect ( ( ) => {
102110 engine . updateRule ( rule2 )
103111 } ) . 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 / )
104112 } )
105113 } )
106114
107115 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 )
113129
114- const isRemoved = engine . removeRule ( rule )
130+ const isRemoved = engine . removeRule ( rule1 . name )
115131
116132 expect ( isRemoved ) . to . be . true ( )
117- expect ( engine . rules . length ) . to . equal ( 0 )
133+ expect ( engine . rules . length ) . to . equal ( 1 )
118134 expect ( engine . prioritizedRules ) . to . equal ( null )
119135 } )
120136
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 )
124142
125- const isRemoved = engine . removeRule ( rule )
143+ const isRemoved = engine . removeRule ( rule1 . name )
126144
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 )
128148 } )
129149
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 )
136159 } )
137160 } )
161+ context ( 'remove by rule object' , ( ) => {
162+ it ( 'removes a single rule' , ( ) => {
163+ const [ rule1 ] = setup ( )
164+ expect ( engine . rules . length ) . to . equal ( 2 )
138165
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 ( )
143169 expect ( engine . rules . length ) . to . equal ( 1 )
170+ expect ( engine . prioritizedRules ) . to . equal ( null )
171+ } )
144172
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 )
146180
147181 expect ( isRemoved ) . to . be . true ( )
148- expect ( engine . rules . length ) . to . equal ( 0 )
182+ expect ( engine . rules . length ) . to . equal ( 2 )
149183 expect ( engine . prioritizedRules ) . to . equal ( null )
150184 } )
151185
152186 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 )
156189
157- const isRemoved = engine . removeRule ( 'not-found-id' )
190+ const rule3 = new Rule ( factories . rule ( { name : 'rule3' } ) )
191+ const isRemoved = engine . removeRule ( rule3 )
158192
159193 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 )
161196 } )
162197 } )
163198 } )
0 commit comments