@@ -11,8 +11,11 @@ describe('Engine', () => {
1111
1212 it ( 'has methods for managing facts and rules, and running itself' , ( ) => {
1313 expect ( engine ) . to . have . property ( 'addRule' )
14+ expect ( engine ) . to . have . property ( 'removeRule' )
1415 expect ( engine ) . to . have . property ( 'addOperator' )
16+ expect ( engine ) . to . have . property ( 'removeOperator' )
1517 expect ( engine ) . to . have . property ( 'addFact' )
18+ expect ( engine ) . to . have . property ( 'removeFact' )
1619 expect ( engine ) . to . have . property ( 'run' )
1720 expect ( engine ) . to . have . property ( 'stop' )
1821 } )
@@ -71,6 +74,33 @@ describe('Engine', () => {
7174 } )
7275 } )
7376
77+ describe ( 'removeRule()' , ( ) => {
78+ describe ( 'rule instance' , ( ) => {
79+ it ( 'removes the rule' , ( ) => {
80+ let rule = new Rule ( factories . rule ( ) )
81+ engine . addRule ( rule )
82+ expect ( engine . rules . length ) . to . equal ( 1 )
83+ engine . removeRule ( rule )
84+ expect ( engine . rules . length ) . to . equal ( 0 )
85+ } )
86+ } )
87+
88+ describe ( 'required fields' , ( ) => {
89+ it ( '.conditions' , ( ) => {
90+ expect ( ( ) => {
91+ engine . removeRule ( [ ] )
92+ } ) . to . throw ( / E n g i n e : r e m o v e R u l e \( \) r u l e m u s t b e a i n s t a n c e o f R u l e / )
93+ } )
94+ } )
95+
96+ it ( 'can only remove added rules' , ( ) => {
97+ expect ( engine . rules . length ) . to . equal ( 0 )
98+ let rule = new Rule ( factories . rule ( ) )
99+ const isRemoved = engine . removeRule ( rule )
100+ expect ( isRemoved ) . to . equal ( false )
101+ } )
102+ } )
103+
74104 describe ( 'addOperator()' , ( ) => {
75105 it ( 'adds the operator' , ( ) => {
76106 expect ( engine . operators . size ) . to . equal ( 10 )
@@ -91,6 +121,24 @@ describe('Engine', () => {
91121 } )
92122 } )
93123
124+ describe ( 'removeOperator()' , ( ) => {
125+ it ( 'removes the operator' , ( ) => {
126+ expect ( engine . operators . size ) . to . equal ( 10 )
127+ engine . addOperator ( 'startsWithLetter' , ( factValue , jsonValue ) => {
128+ return factValue [ 0 ] === jsonValue
129+ } )
130+ expect ( engine . operators . size ) . to . equal ( 11 )
131+ engine . removeOperator ( 'startsWithLetter' )
132+ expect ( engine . operators . size ) . to . equal ( 10 )
133+ } )
134+
135+ it ( 'can only remove added operators' , ( ) => {
136+ expect ( engine . operators . size ) . to . equal ( 10 )
137+ const isRemoved = engine . removeOperator ( 'nonExisting' )
138+ expect ( isRemoved ) . to . equal ( false )
139+ } )
140+ } )
141+
94142 describe ( 'addFact()' , ( ) => {
95143 const FACT_NAME = 'FACT_NAME'
96144 const FACT_VALUE = 'FACT_VALUE'
@@ -142,6 +190,23 @@ describe('Engine', () => {
142190 } )
143191 } )
144192
193+ describe ( 'removeFact()' , ( ) => {
194+ it ( 'removes a Fact' , ( ) => {
195+ expect ( engine . facts . size ) . to . equal ( 0 )
196+ let fact = new Fact ( 'newFact' , 50 , { cache : false } )
197+ engine . addFact ( fact )
198+ expect ( engine . facts . size ) . to . equal ( 1 )
199+ engine . removeFact ( 'newFact' )
200+ expect ( engine . facts . size ) . to . equal ( 0 )
201+ } )
202+
203+ it ( 'can only remove added facts' , ( ) => {
204+ expect ( engine . facts . size ) . to . equal ( 0 )
205+ const isRemoved = engine . removeFact ( 'newFact' )
206+ expect ( isRemoved ) . to . equal ( false )
207+ } )
208+ } )
209+
145210 describe ( 'run()' , ( ) => {
146211 beforeEach ( ( ) => {
147212 let conditions = {
0 commit comments