@@ -1184,6 +1184,96 @@ describe('FilterService', () => {
1184
1184
} ) ;
1185
1185
} ) ;
1186
1186
1187
+ describe ( 'updateSingleFilter method' , ( ) => {
1188
+ let mockColumn1 : Column ;
1189
+ let mockColumn2 : Column ;
1190
+ let mockArgs1 ;
1191
+ let mockArgs2 ;
1192
+
1193
+ beforeEach ( ( ) => {
1194
+ gridOptionMock . enableFiltering = true ;
1195
+ gridOptionMock . backendServiceApi = undefined ;
1196
+ mockColumn1 = { id : 'firstName' , name : 'firstName' , field : 'firstName' , } ;
1197
+ mockColumn2 = { id : 'isActive' , name : 'isActive' , field : 'isActive' , type : FieldType . boolean , } ;
1198
+ mockArgs1 = { grid : gridStub , column : mockColumn1 , node : document . getElementById ( DOM_ELEMENT_ID ) } ;
1199
+ mockArgs2 = { grid : gridStub , column : mockColumn2 , node : document . getElementById ( DOM_ELEMENT_ID ) } ;
1200
+ sharedService . allColumns = [ mockColumn1 , mockColumn2 ] ;
1201
+ } ) ;
1202
+
1203
+ it ( 'should call "updateSingleFilter" method and expect event "emitFilterChanged" to be trigged local when using "bindLocalOnFilter" and also expect filters to be set in dataview' , ( ) => {
1204
+ const expectation = {
1205
+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1206
+ } ;
1207
+ const emitSpy = jest . spyOn ( service , 'emitFilterChanged' ) ;
1208
+ const setFilterArgsSpy = jest . spyOn ( dataViewStub , 'setFilterArgs' ) ;
1209
+ const refreshSpy = jest . spyOn ( dataViewStub , 'refresh' ) ;
1210
+ service . init ( gridStub ) ;
1211
+ service . bindLocalOnFilter ( gridStub ) ;
1212
+ gridStub . onHeaderRowCellRendered . notify ( mockArgs1 as any , new Slick . EventData ( ) , gridStub ) ;
1213
+ gridStub . onHeaderRowCellRendered . notify ( mockArgs2 as any , new Slick . EventData ( ) , gridStub ) ;
1214
+ service . updateSingleFilter ( { columnId : 'firstName' , searchTerms : [ 'Jane' ] , operator : 'StartsWith' } ) ;
1215
+
1216
+ expect ( setFilterArgsSpy ) . toHaveBeenCalledWith ( { columnFilters : expectation , grid : gridStub } ) ;
1217
+ expect ( refreshSpy ) . toHaveBeenCalled ( ) ;
1218
+ expect ( emitSpy ) . toHaveBeenCalledWith ( 'local' ) ;
1219
+ expect ( service . getColumnFilters ( ) ) . toEqual ( {
1220
+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1221
+ } ) ;
1222
+ } ) ;
1223
+
1224
+ it ( 'should call "updateSingleFilter" method and expect event "emitFilterChanged" to be trigged local when using "bindBackendOnFilter" and also expect filters to be set in dataview' , ( ) => {
1225
+ const expectation = {
1226
+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1227
+ } ;
1228
+ gridOptionMock . backendServiceApi = {
1229
+ filterTypingDebounce : 0 ,
1230
+ service : backendServiceStub ,
1231
+ process : ( ) => new Promise ( ( resolve ) => resolve ( jest . fn ( ) ) ) ,
1232
+ } ;
1233
+ const emitSpy = jest . spyOn ( service , 'emitFilterChanged' ) ;
1234
+ const backendUpdateSpy = jest . spyOn ( backendServiceStub , 'updateFilters' ) ;
1235
+ const backendProcessSpy = jest . spyOn ( backendServiceStub , 'processOnFilterChanged' ) ;
1236
+
1237
+ service . init ( gridStub ) ;
1238
+ service . bindBackendOnFilter ( gridStub ) ;
1239
+ gridStub . onHeaderRowCellRendered . notify ( mockArgs1 as any , new Slick . EventData ( ) , gridStub ) ;
1240
+ gridStub . onHeaderRowCellRendered . notify ( mockArgs2 as any , new Slick . EventData ( ) , gridStub ) ;
1241
+ service . updateSingleFilter ( { columnId : 'firstName' , searchTerms : [ 'Jane' ] , operator : 'StartsWith' } ) ;
1242
+
1243
+ expect ( emitSpy ) . toHaveBeenCalledWith ( 'remote' ) ;
1244
+ expect ( backendProcessSpy ) . not . toHaveBeenCalled ( ) ;
1245
+ expect ( backendUpdateSpy ) . toHaveBeenCalledWith ( expectation , true ) ;
1246
+ expect ( service . getColumnFilters ( ) ) . toEqual ( expectation ) ;
1247
+ expect ( mockRefreshBackendDataset ) . toHaveBeenCalledWith ( gridOptionMock ) ;
1248
+ } ) ;
1249
+
1250
+ it ( 'should expect filter to be sent to the backend when using "bindBackendOnFilter" without triggering a filter changed event neither a backend query when both flag arguments are set to false' , ( ) => {
1251
+ const expectation = {
1252
+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1253
+ } ;
1254
+ gridOptionMock . backendServiceApi = {
1255
+ filterTypingDebounce : 0 ,
1256
+ service : backendServiceStub ,
1257
+ process : ( ) => new Promise ( ( resolve ) => resolve ( jest . fn ( ) ) ) ,
1258
+ } ;
1259
+ const emitSpy = jest . spyOn ( service , 'emitFilterChanged' ) ;
1260
+ const backendUpdateSpy = jest . spyOn ( backendServiceStub , 'updateFilters' ) ;
1261
+ const backendProcessSpy = jest . spyOn ( backendServiceStub , 'processOnFilterChanged' ) ;
1262
+
1263
+ service . init ( gridStub ) ;
1264
+ service . bindBackendOnFilter ( gridStub ) ;
1265
+ gridStub . onHeaderRowCellRendered . notify ( mockArgs1 as any , new Slick . EventData ( ) , gridStub ) ;
1266
+ gridStub . onHeaderRowCellRendered . notify ( mockArgs2 as any , new Slick . EventData ( ) , gridStub ) ;
1267
+ service . updateSingleFilter ( { columnId : 'firstName' , searchTerms : [ 'Jane' ] , operator : 'StartsWith' } , false , false ) ;
1268
+
1269
+ expect ( backendProcessSpy ) . not . toHaveBeenCalled ( ) ;
1270
+ expect ( emitSpy ) . not . toHaveBeenCalled ( ) ;
1271
+ expect ( mockRefreshBackendDataset ) . not . toHaveBeenCalled ( ) ;
1272
+ expect ( backendUpdateSpy ) . toHaveBeenCalledWith ( expectation , true ) ;
1273
+ expect ( service . getColumnFilters ( ) ) . toEqual ( expectation ) ;
1274
+ } ) ;
1275
+ } ) ;
1276
+
1187
1277
describe ( 'disableFilterFunctionality method' , ( ) => {
1188
1278
beforeEach ( ( ) => {
1189
1279
gridOptionMock . enableFiltering = true ;
0 commit comments