@@ -563,6 +563,11 @@ describe('Request', function() {
563563 } ) ;
564564
565565 describe ( 'success' , function ( ) {
566+ var entityResultsPerApiCall = {
567+ 1 : [ { a : true } ] ,
568+ 2 : [ { b : true } , { c : true } ]
569+ } ;
570+
566571 var apiResponse = {
567572 batch : {
568573 entityResults : [ { a : true } , { b : true } , { c : true } ] ,
@@ -596,10 +601,6 @@ describe('Request', function() {
596601 } ) ;
597602
598603 it ( 'should re-run query if not finished' , function ( done ) {
599- var entityResults = {
600- 1 : [ { a : true } ] ,
601- 2 : [ { b : true } , { c : true } ]
602- } ;
603604 var continuationQuery ;
604605 var query = {
605606 limitVal : 1 ,
@@ -616,15 +617,19 @@ describe('Request', function() {
616617 var offsetCalled = false ;
617618
618619 entityOverrides . formatArray = function ( array ) {
619- assert . strictEqual ( array , entityResults [ timesRequestCalled ] ) ;
620- return entityResults [ timesRequestCalled ] ;
620+ assert . strictEqual (
621+ array ,
622+ entityResultsPerApiCall [ timesRequestCalled ]
623+ ) ;
624+ return entityResultsPerApiCall [ timesRequestCalled ] ;
621625 } ;
622626
623627 request . request_ = function ( protoOpts , reqOpts , callback ) {
624628 timesRequestCalled ++ ;
625629
626630 var resp = extend ( true , { } , apiResponse ) ;
627- resp . batch . entityResults = entityResults [ timesRequestCalled ] ;
631+ resp . batch . entityResults =
632+ entityResultsPerApiCall [ timesRequestCalled ] ;
628633
629634 if ( timesRequestCalled === 1 ) {
630635 assert . strictEqual ( protoOpts . service , 'Datastore' ) ;
@@ -661,7 +666,7 @@ describe('Request', function() {
661666 if ( timesRequestCalled === 1 ) {
662667 assert . strictEqual (
663668 limit_ ,
664- entityResults [ 1 ] . length - query . limitVal
669+ entityResultsPerApiCall [ 1 ] . length - query . limitVal
665670 ) ;
666671 } else {
667672 // Should restore the original limit.
@@ -679,14 +684,16 @@ describe('Request', function() {
679684
680685 request . runQuery ( query , function ( err , entities , info ) {
681686 assert . ifError ( err ) ;
682- assert . deepEqual (
683- entities ,
684- [ ] . slice . call ( entityResults [ 1 ] ) . concat ( entityResults [ 2 ] )
685- ) ;
687+
688+ var allResults = [ ] . slice . call ( entityResultsPerApiCall [ 1 ] )
689+ . concat ( entityResultsPerApiCall [ 2 ] ) ;
690+ assert . deepEqual ( entities , allResults ) ;
691+
686692 assert . deepEqual ( info , {
687693 endCursor : apiResponse . batch . endCursor ,
688694 moreResults : apiResponse . batch . moreResults
689695 } ) ;
696+
690697 done ( ) ;
691698 } ) ;
692699 } ) ;
@@ -742,6 +749,56 @@ describe('Request', function() {
742749 done ( ) ;
743750 } ) ;
744751 } ) ;
752+
753+ it ( 'should not push more results if stream was ended' , function ( done ) {
754+ var timesRequestCalled = 0 ;
755+ var entitiesEmitted = 0 ;
756+
757+ request . request_ = function ( protoOpts , reqOpts , callback ) {
758+ timesRequestCalled ++ ;
759+
760+ var resp = extend ( true , { } , apiResponse ) ;
761+ resp . batch . entityResults =
762+ entityResultsPerApiCall [ timesRequestCalled ] ;
763+
764+ if ( timesRequestCalled === 1 ) {
765+ resp . batch . moreResults = 'NOT_FINISHED' ;
766+ callback ( null , resp ) ;
767+ } else {
768+ resp . batch . moreResults = 'MORE_RESULTS_AFTER_LIMIT' ;
769+ callback ( null , resp ) ;
770+ }
771+ } ;
772+
773+ request . runQuery ( { } )
774+ . on ( 'data' , function ( ) {
775+ entitiesEmitted ++ ;
776+ this . end ( ) ;
777+ } )
778+ . on ( 'end' , function ( ) {
779+ assert . strictEqual ( entitiesEmitted , 1 ) ;
780+ done ( ) ;
781+ } ) ;
782+ } ) ;
783+
784+ it ( 'should not get more results if stream was ended' , function ( done ) {
785+ var timesRequestCalled = 0 ;
786+
787+ request . request_ = function ( protoOpts , reqOpts , callback ) {
788+ timesRequestCalled ++ ;
789+ callback ( null , apiResponse ) ;
790+ } ;
791+
792+ request . runQuery ( { } )
793+ . on ( 'error' , done )
794+ . on ( 'data' , function ( ) {
795+ this . end ( ) ;
796+ } )
797+ . on ( 'end' , function ( ) {
798+ assert . strictEqual ( timesRequestCalled , 1 ) ;
799+ done ( ) ;
800+ } ) ;
801+ } ) ;
745802 } ) ;
746803 } ) ;
747804
0 commit comments