@@ -24,7 +24,8 @@ const Firestore = require('../');
2424let firestore ;
2525
2626const DATABASE_ROOT = 'projects/test-project/databases/(default)' ;
27- const DOCUMENT_NAME = `${ DATABASE_ROOT } /documents/collectionId/documentId` ;
27+ const COLLECTION_ROOT = `${ DATABASE_ROOT } /documents/collectionId` ;
28+ const DOCUMENT_NAME = `${ COLLECTION_ROOT } /documentId` ;
2829
2930// Change the argument to 'console.log' to enable debug output.
3031Firestore . setLogFunction ( ( ) => { } ) ;
@@ -134,6 +135,42 @@ function getDocument(transaction) {
134135 } ;
135136}
136137
138+ function getAll ( docs ) {
139+ let request = {
140+ database : DATABASE_ROOT ,
141+ documents : [ ] ,
142+ transaction : 'foo' ,
143+ } ;
144+
145+ let stream = through . obj ( ) ;
146+
147+ for ( const doc of docs ) {
148+ const name = `${ COLLECTION_ROOT } /${ doc } ` ;
149+ request . documents . push ( name ) ;
150+
151+ setImmediate ( ( ) => {
152+ stream . push ( {
153+ found : {
154+ name : name ,
155+ createTime : { seconds : 1 , nanos : 2 } ,
156+ updateTime : { seconds : 3 , nanos : 4 } ,
157+ } ,
158+ readTime : { seconds : 5 , nanos : 6 } ,
159+ } ) ;
160+ } ) ;
161+ }
162+
163+ setImmediate ( function ( ) {
164+ stream . push ( null ) ;
165+ } ) ;
166+
167+ return {
168+ type : 'getDocument' ,
169+ request : request ,
170+ stream : stream ,
171+ } ;
172+ }
173+
137174function query ( transaction ) {
138175 let request = {
139176 parent : DATABASE_ROOT ,
@@ -424,8 +461,8 @@ describe('transaction operations', function() {
424461
425462 it ( 'support get with document ref' , function ( ) {
426463 return runTransaction (
427- updateFunction => {
428- return updateFunction . get ( docRef ) . then ( doc => {
464+ transaction => {
465+ return transaction . get ( docRef ) . then ( doc => {
429466 assert . equal ( doc . id , 'documentId' ) ;
430467 } ) ;
431468 } ,
@@ -437,13 +474,13 @@ describe('transaction operations', function() {
437474
438475 it ( 'requires a query or document for get' , function ( ) {
439476 return runTransaction (
440- updateFunction => {
477+ transaction => {
441478 assert . throws ( ( ) => {
442- updateFunction . get ( ) ;
479+ transaction . get ( ) ;
443480 } , / A r g u m e n t " r e f O r Q u e r y " m u s t b e a D o c u m e n t R e f o r a Q u e r y \. / ) ;
444481
445482 assert . throws ( ( ) => {
446- updateFunction . get ( 'foo' ) ;
483+ transaction . get ( 'foo' ) ;
447484 } , / A r g u m e n t " r e f O r Q u e r y " m u s t b e a D o c u m e n t R e f o r a Q u e r y \. / ) ;
448485
449486 return Promise . resolve ( ) ;
@@ -454,9 +491,9 @@ describe('transaction operations', function() {
454491 } ) ;
455492
456493 it ( 'enforce that gets come before writes' , function ( ) {
457- return runTransaction ( updateFunction => {
458- updateFunction . set ( docRef , { foo : 'bar' } ) ;
459- return updateFunction . get ( docRef ) ;
494+ return runTransaction ( transaction => {
495+ transaction . set ( docRef , { foo : 'bar' } ) ;
496+ return transaction . get ( docRef ) ;
460497 } , begin ( ) )
461498 . then ( ( ) => {
462499 throw new Error ( 'Unexpected success in Promise' ) ;
@@ -472,9 +509,9 @@ describe('transaction operations', function() {
472509
473510 it ( 'support get with query' , function ( ) {
474511 return runTransaction (
475- updateFunction => {
512+ transaction => {
476513 let query = firestore . collection ( 'col' ) . where ( 'foo' , '==' , 'bar' ) ;
477- return updateFunction . get ( query ) . then ( results => {
514+ return transaction . get ( query ) . then ( results => {
478515 assert . equal ( results . docs [ 0 ] . id , 'documentId' ) ;
479516 } ) ;
480517 } ,
@@ -484,6 +521,41 @@ describe('transaction operations', function() {
484521 ) ;
485522 } ) ;
486523
524+ it ( 'support getAll' , function ( ) {
525+ const firstDoc = firestore . doc ( 'collectionId/firstDocument' ) ;
526+ const secondDoc = firestore . doc ( 'collectionId/secondDocument' ) ;
527+
528+ return runTransaction (
529+ transaction => {
530+ return transaction . getAll ( firstDoc , secondDoc ) . then ( docs => {
531+ assert . equal ( docs . length , 2 ) ;
532+ assert . equal ( docs [ 0 ] . id , 'firstDocument' ) ;
533+ assert . equal ( docs [ 1 ] . id , 'secondDocument' ) ;
534+ } ) ;
535+ } ,
536+ begin ( ) ,
537+ getAll ( [ 'firstDocument' , 'secondDocument' ] ) ,
538+ commit ( )
539+ ) ;
540+ } ) ;
541+
542+ it ( 'enforce that getAll come before writes' , function ( ) {
543+ return runTransaction ( transaction => {
544+ transaction . set ( docRef , { foo : 'bar' } ) ;
545+ return transaction . getAll ( docRef ) ;
546+ } , begin ( ) )
547+ . then ( ( ) => {
548+ throw new Error ( 'Unexpected success in Promise' ) ;
549+ } )
550+ . catch ( err => {
551+ assert . equal (
552+ err . message ,
553+ 'Firestore transactions require all reads to ' +
554+ 'be executed before all writes.'
555+ ) ;
556+ } ) ;
557+ } ) ;
558+
487559 it ( 'support create' , function ( ) {
488560 let create = {
489561 currentDocument : {
@@ -496,8 +568,8 @@ describe('transaction operations', function() {
496568 } ;
497569
498570 return runTransaction (
499- updateFunction => {
500- updateFunction . create ( docRef , { } ) ;
571+ transaction => {
572+ transaction . create ( docRef , { } ) ;
501573 return Promise . resolve ( ) ;
502574 } ,
503575 begin ( ) ,
@@ -532,10 +604,10 @@ describe('transaction operations', function() {
532604 } ;
533605
534606 return runTransaction (
535- updateFunction => {
536- updateFunction . update ( docRef , { 'a.b' : 'c' } ) ;
537- updateFunction . update ( docRef , 'a.b' , 'c' ) ;
538- updateFunction . update ( docRef , new Firestore . FieldPath ( 'a' , 'b' ) , 'c' ) ;
607+ transaction => {
608+ transaction . update ( docRef , { 'a.b' : 'c' } ) ;
609+ transaction . update ( docRef , 'a.b' , 'c' ) ;
610+ transaction . update ( docRef , new Firestore . FieldPath ( 'a' , 'b' ) , 'c' ) ;
539611 return Promise . resolve ( ) ;
540612 } ,
541613 begin ( ) ,
@@ -557,8 +629,8 @@ describe('transaction operations', function() {
557629 } ;
558630
559631 return runTransaction (
560- updateFunction => {
561- updateFunction . set ( docRef , { 'a.b' : 'c' } ) ;
632+ transaction => {
633+ transaction . set ( docRef , { 'a.b' : 'c' } ) ;
562634 return Promise . resolve ( ) ;
563635 } ,
564636 begin ( ) ,
@@ -583,8 +655,8 @@ describe('transaction operations', function() {
583655 } ;
584656
585657 return runTransaction (
586- updateFunction => {
587- updateFunction . set ( docRef , { 'a.b' : 'c' } , { merge : true } ) ;
658+ transaction => {
659+ transaction . set ( docRef , { 'a.b' : 'c' } , { merge : true } ) ;
588660 return Promise . resolve ( ) ;
589661 } ,
590662 begin ( ) ,
@@ -598,8 +670,8 @@ describe('transaction operations', function() {
598670 } ;
599671
600672 return runTransaction (
601- updateFunction => {
602- updateFunction . delete ( docRef ) ;
673+ transaction => {
674+ transaction . delete ( docRef ) ;
603675 return Promise . resolve ( ) ;
604676 } ,
605677 begin ( ) ,
@@ -620,8 +692,8 @@ describe('transaction operations', function() {
620692 } ;
621693
622694 return runTransaction (
623- updateFunction => {
624- updateFunction . delete ( docRef ) . set ( docRef , { } ) ;
695+ transaction => {
696+ transaction . delete ( docRef ) . set ( docRef , { } ) ;
625697 return Promise . resolve ( ) ;
626698 } ,
627699 begin ( ) ,
0 commit comments