@@ -463,3 +463,97 @@ describe('connect_to_app_state', () => {
463463 } ) ;
464464 } ) ;
465465} ) ;
466+
467+ describe ( 'filters with different state' , ( ) => {
468+ let queryServiceStart : QueryStart ;
469+ let filterManager : FilterManager ;
470+ let state : BaseStateContainer < QueryState > ;
471+ let stateSub : Subscription ;
472+ let stateChangeTriggered = jest . fn ( ) ;
473+ let filterManagerChangeSub : Subscription ;
474+ let filterManagerChangeTriggered = jest . fn ( ) ;
475+
476+ let filter : Filter ;
477+
478+ beforeEach ( ( ) => {
479+ const queryService = new QueryService ( ) ;
480+ queryService . setup ( {
481+ uiSettings : setupMock . uiSettings ,
482+ storage : new Storage ( new StubBrowserStorage ( ) ) ,
483+ } ) ;
484+ queryServiceStart = queryService . start ( startMock . savedObjects ) ;
485+ filterManager = queryServiceStart . filterManager ;
486+
487+ state = createStateContainer ( { } ) ;
488+ stateChangeTriggered = jest . fn ( ) ;
489+ stateSub = state . state$ . subscribe ( stateChangeTriggered ) ;
490+
491+ filterManagerChangeTriggered = jest . fn ( ) ;
492+ filterManagerChangeSub = filterManager . getUpdates$ ( ) . subscribe ( filterManagerChangeTriggered ) ;
493+
494+ filter = getFilter ( FilterStateStore . GLOBAL_STATE , true , true , 'key1' , 'value1' ) ;
495+ } ) ;
496+
497+ // applies filter state changes, changes only internal $state.store value
498+ function runChanges ( ) {
499+ filter = { ...filter , $state : { store : FilterStateStore . GLOBAL_STATE } } ;
500+
501+ state . set ( {
502+ filters : [ filter ] ,
503+ } ) ;
504+
505+ filter = { ...filter , $state : { store : FilterStateStore . APP_STATE } } ;
506+
507+ state . set ( {
508+ filters : [ filter ] ,
509+ } ) ;
510+
511+ filter = { ...filter } ;
512+ delete filter . $state ;
513+
514+ state . set ( {
515+ filters : [ filter ] ,
516+ } ) ;
517+ }
518+
519+ test ( 'when syncing all filters, changes to filter.state$ should be taken into account' , ( ) => {
520+ const stop = connectToQueryState ( queryServiceStart , state , {
521+ filters : true ,
522+ } ) ;
523+
524+ runChanges ( ) ;
525+
526+ expect ( filterManagerChangeTriggered ) . toBeCalledTimes ( 3 ) ;
527+
528+ stop ( ) ;
529+ } ) ;
530+
531+ test ( 'when syncing app state filters, changes to filter.state$ should be ignored' , ( ) => {
532+ const stop = connectToQueryState ( queryServiceStart , state , {
533+ filters : FilterStateStore . APP_STATE ,
534+ } ) ;
535+
536+ runChanges ( ) ;
537+
538+ expect ( filterManagerChangeTriggered ) . toBeCalledTimes ( 1 ) ;
539+
540+ stop ( ) ;
541+ } ) ;
542+
543+ test ( 'when syncing global state filters, changes to filter.state$ should be ignored' , ( ) => {
544+ const stop = connectToQueryState ( queryServiceStart , state , {
545+ filters : FilterStateStore . GLOBAL_STATE ,
546+ } ) ;
547+
548+ runChanges ( ) ;
549+
550+ expect ( filterManagerChangeTriggered ) . toBeCalledTimes ( 1 ) ;
551+
552+ stop ( ) ;
553+ } ) ;
554+
555+ afterEach ( ( ) => {
556+ stateSub . unsubscribe ( ) ;
557+ filterManagerChangeSub . unsubscribe ( ) ;
558+ } ) ;
559+ } ) ;
0 commit comments