@@ -1159,6 +1159,96 @@ describe('FilterService', () => {
11591159 } ) ;
11601160 } ) ;
11611161
1162+ describe ( 'updateSingleFilter method' , ( ) => {
1163+ let mockColumn1 : Column ;
1164+ let mockColumn2 : Column ;
1165+ let mockArgs1 ;
1166+ let mockArgs2 ;
1167+
1168+ beforeEach ( ( ) => {
1169+ gridOptionMock . enableFiltering = true ;
1170+ gridOptionMock . backendServiceApi = undefined ;
1171+ mockColumn1 = { id : 'firstName' , name : 'firstName' , field : 'firstName' , } ;
1172+ mockColumn2 = { id : 'isActive' , name : 'isActive' , field : 'isActive' , type : FieldType . boolean , } ;
1173+ mockArgs1 = { grid : gridStub , column : mockColumn1 , node : document . getElementById ( DOM_ELEMENT_ID ) } ;
1174+ mockArgs2 = { grid : gridStub , column : mockColumn2 , node : document . getElementById ( DOM_ELEMENT_ID ) } ;
1175+ sharedService . allColumns = [ mockColumn1 , mockColumn2 ] ;
1176+ } ) ;
1177+
1178+ 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' , ( ) => {
1179+ const expectation = {
1180+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1181+ } ;
1182+ const emitSpy = jest . spyOn ( service , 'emitFilterChanged' ) ;
1183+ const setFilterArgsSpy = jest . spyOn ( dataViewStub , 'setFilterArgs' ) ;
1184+ const refreshSpy = jest . spyOn ( dataViewStub , 'refresh' ) ;
1185+ service . init ( gridStub ) ;
1186+ service . bindLocalOnFilter ( gridStub ) ;
1187+ gridStub . onHeaderRowCellRendered . notify ( mockArgs1 as any , new Slick . EventData ( ) , gridStub ) ;
1188+ gridStub . onHeaderRowCellRendered . notify ( mockArgs2 as any , new Slick . EventData ( ) , gridStub ) ;
1189+ service . updateSingleFilter ( { columnId : 'firstName' , searchTerms : [ 'Jane' ] , operator : 'StartsWith' } ) ;
1190+
1191+ expect ( setFilterArgsSpy ) . toHaveBeenCalledWith ( { columnFilters : expectation , grid : gridStub } ) ;
1192+ expect ( refreshSpy ) . toHaveBeenCalled ( ) ;
1193+ expect ( emitSpy ) . toHaveBeenCalledWith ( 'local' ) ;
1194+ expect ( service . getColumnFilters ( ) ) . toEqual ( {
1195+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1196+ } ) ;
1197+ } ) ;
1198+
1199+ 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' , ( ) => {
1200+ const expectation = {
1201+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1202+ } ;
1203+ gridOptionMock . backendServiceApi = {
1204+ filterTypingDebounce : 0 ,
1205+ service : backendServiceStub ,
1206+ process : ( ) => new Promise ( ( resolve ) => resolve ( jest . fn ( ) ) ) ,
1207+ } ;
1208+ const emitSpy = jest . spyOn ( service , 'emitFilterChanged' ) ;
1209+ const backendUpdateSpy = jest . spyOn ( backendServiceStub , 'updateFilters' ) ;
1210+ const backendProcessSpy = jest . spyOn ( backendServiceStub , 'processOnFilterChanged' ) ;
1211+
1212+ service . init ( gridStub ) ;
1213+ service . bindBackendOnFilter ( gridStub ) ;
1214+ gridStub . onHeaderRowCellRendered . notify ( mockArgs1 as any , new Slick . EventData ( ) , gridStub ) ;
1215+ gridStub . onHeaderRowCellRendered . notify ( mockArgs2 as any , new Slick . EventData ( ) , gridStub ) ;
1216+ service . updateSingleFilter ( { columnId : 'firstName' , searchTerms : [ 'Jane' ] , operator : 'StartsWith' } ) ;
1217+
1218+ expect ( emitSpy ) . toHaveBeenCalledWith ( 'remote' ) ;
1219+ expect ( backendProcessSpy ) . not . toHaveBeenCalled ( ) ;
1220+ expect ( backendUpdateSpy ) . toHaveBeenCalledWith ( expectation , true ) ;
1221+ expect ( service . getColumnFilters ( ) ) . toEqual ( expectation ) ;
1222+ expect ( mockRefreshBackendDataset ) . toHaveBeenCalledWith ( gridOptionMock ) ;
1223+ } ) ;
1224+
1225+ 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' , ( ) => {
1226+ const expectation = {
1227+ firstName : { columnId : 'firstName' , columnDef : mockColumn1 , searchTerms : [ 'Jane' ] , operator : 'StartsWith' , type : FieldType . string } ,
1228+ } ;
1229+ gridOptionMock . backendServiceApi = {
1230+ filterTypingDebounce : 0 ,
1231+ service : backendServiceStub ,
1232+ process : ( ) => new Promise ( ( resolve ) => resolve ( jest . fn ( ) ) ) ,
1233+ } ;
1234+ const emitSpy = jest . spyOn ( service , 'emitFilterChanged' ) ;
1235+ const backendUpdateSpy = jest . spyOn ( backendServiceStub , 'updateFilters' ) ;
1236+ const backendProcessSpy = jest . spyOn ( backendServiceStub , 'processOnFilterChanged' ) ;
1237+
1238+ service . init ( gridStub ) ;
1239+ service . bindBackendOnFilter ( gridStub ) ;
1240+ gridStub . onHeaderRowCellRendered . notify ( mockArgs1 as any , new Slick . EventData ( ) , gridStub ) ;
1241+ gridStub . onHeaderRowCellRendered . notify ( mockArgs2 as any , new Slick . EventData ( ) , gridStub ) ;
1242+ service . updateSingleFilter ( { columnId : 'firstName' , searchTerms : [ 'Jane' ] , operator : 'StartsWith' } , false , false ) ;
1243+
1244+ expect ( backendProcessSpy ) . not . toHaveBeenCalled ( ) ;
1245+ expect ( emitSpy ) . not . toHaveBeenCalled ( ) ;
1246+ expect ( mockRefreshBackendDataset ) . not . toHaveBeenCalled ( ) ;
1247+ expect ( backendUpdateSpy ) . toHaveBeenCalledWith ( expectation , true ) ;
1248+ expect ( service . getColumnFilters ( ) ) . toEqual ( expectation ) ;
1249+ } ) ;
1250+ } ) ;
1251+
11621252 describe ( 'disableFilterFunctionality method' , ( ) => {
11631253 beforeEach ( ( ) => {
11641254 gridOptionMock . enableFiltering = true ;
0 commit comments