@@ -2,11 +2,12 @@ import { forkJoin } from 'rxjs';
2
2
import { mergeMap , tap } from 'rxjs/operators' ;
3
3
import { TestBed } from '@angular/core/testing' ;
4
4
import { 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' ;
6
6
import { COMMON_CONFIG } from '../test-config' ;
7
7
import { rando } from '../firestore/utils.spec' ;
8
8
import { ChangeDetectorRef } from '@angular/core' ;
9
9
import 'firebase/storage' ;
10
+ import firebase from 'firebase/app' ;
10
11
11
12
if ( typeof XMLHttpRequest === 'undefined' ) {
12
13
globalThis . XMLHttpRequest = require ( 'xhr2' ) ;
@@ -64,13 +65,19 @@ describe('AngularFireStorage', () => {
64
65
const blob = blobOrBuffer ( JSON . stringify ( data ) , { type : 'application/json' } ) ;
65
66
const ref = afStorage . ref ( rando ( ) ) ;
66
67
const task = ref . put ( blob ) ;
68
+ let emissionCount = 0 ;
69
+ let lastSnap : firebase . storage . UploadTaskSnapshot ;
67
70
task . snapshotChanges ( )
68
71
. subscribe (
69
72
snap => {
73
+ lastSnap = snap ;
74
+ emissionCount ++ ;
70
75
expect ( snap ) . toBeDefined ( ) ;
71
76
} ,
72
77
done . fail ,
73
78
( ) => {
79
+ expect ( lastSnap . state ) . toBe ( 'success' ) ;
80
+ expect ( emissionCount ) . toBeGreaterThan ( 0 ) ;
74
81
ref . delete ( ) . subscribe ( done , done . fail ) ;
75
82
} ) ;
76
83
} ) ;
@@ -104,6 +111,68 @@ describe('AngularFireStorage', () => {
104
111
} ) . catch ( done . fail ) ;
105
112
} ) ;
106
113
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
+
107
176
} ) ;
108
177
109
178
describe ( 'reference' , ( ) => {
0 commit comments