@@ -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,36 @@ 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+ let rule = factories . rule ( )
91+ delete rule . conditions
92+ expect ( ( ) => {
93+ engine . removeRule ( rule )
94+ } ) . to . throw ( / E n g i n e : r e m o v e R u l e \( \) a r g u m e n t r e q u i r e s " c o n d i t i o n s " p r o p e r t y / )
95+ } )
96+ } )
97+
98+ it ( 'can only remove added rules' , ( ) => {
99+ expect ( engine . rules . length ) . to . equal ( 0 )
100+ let rule = new Rule ( factories . rule ( ) )
101+ expect ( ( ) => {
102+ engine . removeRule ( rule )
103+ } ) . to . throw ( / E n g i n e : r e m o v e R u l e \( \) R u l e w a s n o t f o u n d / )
104+ } )
105+ } )
106+
74107 describe ( 'addOperator()' , ( ) => {
75108 it ( 'adds the operator' , ( ) => {
76109 expect ( engine . operators . size ) . to . equal ( 10 )
@@ -91,6 +124,25 @@ describe('Engine', () => {
91124 } )
92125 } )
93126
127+ describe ( 'removeOperator()' , ( ) => {
128+ it ( 'removes the operator' , ( ) => {
129+ expect ( engine . operators . size ) . to . equal ( 10 )
130+ engine . addOperator ( 'startsWithLetter' , ( factValue , jsonValue ) => {
131+ return factValue [ 0 ] === jsonValue
132+ } )
133+ expect ( engine . operators . size ) . to . equal ( 11 )
134+ engine . removeOperator ( 'startsWithLetter' )
135+ expect ( engine . operators . size ) . to . equal ( 10 )
136+ } )
137+
138+ it ( 'can only remove added operators' , ( ) => {
139+ expect ( engine . operators . size ) . to . equal ( 10 )
140+ expect ( ( ) => {
141+ engine . removeOperator ( 'nonExisting' )
142+ } ) . to . throw ( / E n g i n e : r e m o v e O p e r a t o r \( \) O p e r a t o r w a s n o t f o u n d / )
143+ } )
144+ } )
145+
94146 describe ( 'addFact()' , ( ) => {
95147 const FACT_NAME = 'FACT_NAME'
96148 const FACT_VALUE = 'FACT_VALUE'
@@ -142,6 +194,24 @@ describe('Engine', () => {
142194 } )
143195 } )
144196
197+ describe ( 'removeFact()' , ( ) => {
198+ it ( 'removes a Fact' , ( ) => {
199+ expect ( engine . facts . size ) . to . equal ( 0 )
200+ let fact = new Fact ( 'newFact' , 50 , { cache : false } )
201+ engine . addFact ( fact )
202+ expect ( engine . facts . size ) . to . equal ( 1 )
203+ engine . removeFact ( 'newFact' )
204+ expect ( engine . facts . size ) . to . equal ( 0 )
205+ } )
206+
207+ it ( 'can only remove added facts' , ( ) => {
208+ expect ( engine . facts . size ) . to . equal ( 0 )
209+ expect ( ( ) => {
210+ engine . removeFact ( 'newFact' )
211+ } ) . to . throw ( / E n g i n e : r e m o v e F a c t \( \) F a c t w a s n o t f o u n d / )
212+ } )
213+ } )
214+
145215 describe ( 'run()' , ( ) => {
146216 beforeEach ( ( ) => {
147217 let conditions = {
0 commit comments