@@ -129,5 +129,73 @@ public void should_only_remove_and_fire_events_when_non_applicable_entity_remove
129
129
Assert . Equal ( 1 , removingFiredTimes ) ;
130
130
Assert . Equal ( 1 , removedFiredTimes ) ;
131
131
}
132
+
133
+ [ Fact ]
134
+ public void should_only_fire_events_from_refresh_when_cache_changed ( )
135
+ {
136
+
137
+ var applicableEntity = Substitute . For < IEntity > ( ) ;
138
+ applicableEntity . Id . Returns ( 1 ) ;
139
+ applicableEntity . HasComponent < TestComponentOne > ( ) . Returns ( false ) ;
140
+
141
+ var inapplicableEntity = Substitute . For < IEntity > ( ) ;
142
+ inapplicableEntity . Id . Returns ( 2 ) ;
143
+ inapplicableEntity . HasComponent < TestComponentOne > ( ) . Returns ( false ) ;
144
+
145
+ var dummyEntitySnapshot = new List < IEntity > { applicableEntity , inapplicableEntity } ;
146
+
147
+ var mockObservableGroup = Substitute . For < IObservableGroup > ( ) ;
148
+ mockObservableGroup . GetEnumerator ( ) . Returns ( x => dummyEntitySnapshot . GetEnumerator ( ) ) ;
149
+ mockObservableGroup . OnEntityAdded . Returns ( Observable . Empty < IEntity > ( ) ) ;
150
+ mockObservableGroup . OnEntityRemoving . Returns ( Observable . Empty < IEntity > ( ) ) ;
151
+ mockObservableGroup . OnEntityRemoved . Returns ( Observable . Empty < IEntity > ( ) ) ;
152
+
153
+ var computedGroup = new TestComputedGroup ( mockObservableGroup ) ;
154
+
155
+ var addedFiredTimes = 0 ;
156
+ computedGroup . OnEntityAdded . Subscribe ( x =>
157
+ {
158
+ addedFiredTimes ++ ;
159
+ } ) ;
160
+
161
+ var removingFiredTimes = 0 ;
162
+ computedGroup . OnEntityRemoving . Subscribe ( x =>
163
+ {
164
+ removingFiredTimes ++ ;
165
+ } ) ;
166
+
167
+ var removedFiredTimes = 0 ;
168
+ computedGroup . OnEntityRemoved . Subscribe ( x =>
169
+ {
170
+ removedFiredTimes ++ ;
171
+ } ) ;
172
+
173
+ //No events should fire
174
+ computedGroup . RefreshEntities ( ) ;
175
+
176
+ Assert . Equal ( 0 , addedFiredTimes ) ;
177
+ Assert . Equal ( 0 , removingFiredTimes ) ;
178
+ Assert . Equal ( 0 , removedFiredTimes ) ;
179
+
180
+ applicableEntity . HasComponent < TestComponentOne > ( ) . Returns ( true ) ;
181
+
182
+ //Add should fire only once
183
+ computedGroup . RefreshEntities ( ) ;
184
+
185
+ Assert . Single ( computedGroup . CachedEntities ) ;
186
+ Assert . Equal ( 1 , addedFiredTimes ) ;
187
+ Assert . Equal ( 0 , removingFiredTimes ) ;
188
+ Assert . Equal ( 0 , removedFiredTimes ) ;
189
+
190
+ applicableEntity . HasComponent < TestComponentOne > ( ) . Returns ( false ) ;
191
+
192
+ //Remove should fire only once
193
+ computedGroup . RefreshEntities ( ) ;
194
+
195
+ Assert . Empty ( computedGroup . CachedEntities ) ;
196
+ Assert . Equal ( 1 , addedFiredTimes ) ;
197
+ Assert . Equal ( 1 , removingFiredTimes ) ;
198
+ Assert . Equal ( 1 , removedFiredTimes ) ;
199
+ }
132
200
}
133
201
}
0 commit comments