@@ -25,8 +25,10 @@ import { Query, AFUnwrappedDataSnapshot } from '../interfaces';
2525import { Subscription , Observable , Subject } from 'rxjs' ;
2626import { COMMON_CONFIG , ANON_AUTH_CONFIG } from '../test-config' ;
2727import { _do } from 'rxjs/operator/do' ;
28+ import { map } from 'rxjs/operator/map' ;
2829import { skip } from 'rxjs/operator/skip' ;
2930import { take } from 'rxjs/operator/take' ;
31+ import { toArray } from 'rxjs/operator/toArray' ;
3032import { toPromise } from 'rxjs/operator/toPromise' ;
3133
3234const rootDatabaseUrl = COMMON_CONFIG . databaseURL ;
@@ -758,6 +760,60 @@ describe('FirebaseListFactory', () => {
758760 } ) ;
759761
760762 } ) ;
763+
764+ describe ( 'observable queries (issue #830)' , ( ) => {
765+
766+ it ( 'should not emit the results of previous queries' , ( done ) => {
767+
768+ questions . $ref . ref . set ( {
769+ key1 : { even : false , value : 1 } ,
770+ key2 : { even : true , value : 2 }
771+ } )
772+ . then ( ( ) => {
773+
774+ let subject = new Subject < boolean > ( ) ;
775+ let query = FirebaseListFactory ( `${ rootDatabaseUrl } /questions` , {
776+ query : {
777+ orderByChild : 'even' ,
778+ equalTo : subject
779+ }
780+ } ) ;
781+
782+ query = map . call ( query , ( list , index ) => {
783+ switch ( index ) {
784+ case 0 :
785+ subject . next ( true ) ;
786+ break ;
787+ case 1 :
788+ questions . $ref . ref . update ( {
789+ key3 : { even : false , value : 3 } ,
790+ key4 : { even : true , value : 4 }
791+ } ) ;
792+ break ;
793+ default :
794+ break ;
795+ }
796+ return list ;
797+ } ) ;
798+ query = take . call ( query , 3 ) ;
799+ query = toArray . call ( query ) ;
800+
801+ toPromise . call ( query ) . then ( ( emits ) => {
802+ expect ( emits . map ( e => e . map ( i => i . $key ) ) ) . toEqual ( [
803+ [ 'key1' ] ,
804+ [ 'key2' ] ,
805+ [ 'key2' , 'key4' ]
806+ ] ) ;
807+ done ( ) ;
808+ } ) ;
809+
810+ subject . next ( false ) ;
811+ } )
812+ . catch ( done . fail ) ;
813+ } ) ;
814+
815+ } ) ;
816+
761817 } ) ;
762818} ) ;
763819
0 commit comments