@@ -2,11 +2,12 @@ import { forkJoin } from 'rxjs';
22import { mergeMap , tap } from 'rxjs/operators' ;
33import { TestBed } from '@angular/core/testing' ;
44import { AngularFireModule , FIREBASE_APP_NAME , FIREBASE_OPTIONS , FirebaseApp } from '@angular/fire' ;
5- import { AngularFireStorage , AngularFireStorageModule , AngularFireUploadTask , BUCKET } from '@angular/fire/storage' ;
5+ import { AngularFireStorage , AngularFireStorageModule , AngularFireUploadTask , BUCKET , fromTask } from '@angular/fire/storage' ;
66import { COMMON_CONFIG } from '../test-config' ;
77import { rando } from '../firestore/utils.spec' ;
88import { ChangeDetectorRef } from '@angular/core' ;
99import 'firebase/storage' ;
10+ import firebase from 'firebase/app' ;
1011
1112if ( typeof XMLHttpRequest === 'undefined' ) {
1213 globalThis . XMLHttpRequest = require ( 'xhr2' ) ;
@@ -64,13 +65,19 @@ describe('AngularFireStorage', () => {
6465 const blob = blobOrBuffer ( JSON . stringify ( data ) , { type : 'application/json' } ) ;
6566 const ref = afStorage . ref ( rando ( ) ) ;
6667 const task = ref . put ( blob ) ;
68+ let emissionCount = 0 ;
69+ let lastSnap : firebase . storage . UploadTaskSnapshot ;
6770 task . snapshotChanges ( )
6871 . subscribe (
6972 snap => {
73+ lastSnap = snap ;
74+ emissionCount ++ ;
7075 expect ( snap ) . toBeDefined ( ) ;
7176 } ,
7277 done . fail ,
7378 ( ) => {
79+ expect ( lastSnap . state ) . toBe ( 'success' ) ;
80+ expect ( emissionCount ) . toBeGreaterThan ( 0 ) ;
7481 ref . delete ( ) . subscribe ( done , done . fail ) ;
7582 } ) ;
7683 } ) ;
@@ -104,6 +111,68 @@ describe('AngularFireStorage', () => {
104111 } ) . catch ( done . fail ) ;
105112 } ) ;
106113
114+ it ( 'should cancel the task' , ( done ) => {
115+ const data = { angular : 'promise' } ;
116+ const blob = blobOrBuffer ( JSON . stringify ( data ) , { type : 'application/json' } ) ;
117+ const ref = afStorage . ref ( rando ( ) ) ;
118+ const task : AngularFireUploadTask = ref . put ( blob ) ;
119+ let emissionCount = 0 ;
120+ let lastSnap : firebase . storage . UploadTaskSnapshot ;
121+ task . snapshotChanges ( ) . subscribe ( snap => {
122+ emissionCount ++ ;
123+ lastSnap = snap ;
124+ if ( emissionCount === 1 ) {
125+ task . cancel ( ) ;
126+ }
127+ } , ( ) => {
128+ // TODO investigate, this doesn't appear to work...
129+ // https://github.com/firebase/firebase-js-sdk/issues/4158
130+ // expect(lastSnap.state).toEqual('canceled');
131+ done ( ) ;
132+ } , done . fail ) ;
133+ } ) ;
134+
135+ it ( 'should be able to pause/resume the task' , ( done ) => {
136+ const data = { angular : 'promise' } ;
137+ const blob = blobOrBuffer ( JSON . stringify ( data ) , { type : 'application/json' } ) ;
138+ const ref = afStorage . ref ( rando ( ) ) ;
139+ const task : AngularFireUploadTask = ref . put ( blob ) ;
140+ let paused = false ;
141+ task . pause ( ) ;
142+ task . snapshotChanges ( ) . subscribe ( snap => {
143+ if ( snap . state === 'paused' ) {
144+ paused = true ;
145+ task . resume ( ) ;
146+ }
147+ } , done . fail , ( ) => {
148+ expect ( paused ) . toBeTruthy ( ) ;
149+ done ( ) ;
150+ } ) ;
151+ } ) ;
152+
153+ it ( 'should work with an already finished task' , ( done ) => {
154+ const data = { angular : 'promise' } ;
155+ const blob = blobOrBuffer ( JSON . stringify ( data ) , { type : 'application/json' } ) ;
156+ const ref = afStorage . storage . ref ( rando ( ) ) ;
157+ const task = ref . put ( blob ) ;
158+ let emissionCount = 0 ;
159+ let lastSnap : firebase . storage . UploadTaskSnapshot ;
160+ task . then ( _snap => {
161+ fromTask ( task ) . subscribe (
162+ snap => {
163+ lastSnap = snap ;
164+ emissionCount ++ ;
165+ expect ( snap ) . toBeDefined ( ) ;
166+ } ,
167+ done . fail ,
168+ ( ) => {
169+ expect ( lastSnap . state ) . toBe ( 'success' ) ;
170+ expect ( emissionCount ) . toBe ( 1 ) ;
171+ ref . delete ( ) . then ( done , done . fail ) ;
172+ } ) ;
173+ } ) ;
174+ } ) ;
175+
107176 } ) ;
108177
109178 describe ( 'reference' , ( ) => {
0 commit comments