16
16
17
17
import { expect } from 'chai' ;
18
18
import { PersistencePromise } from '../../../src/local/persistence_promise' ;
19
+ import { Deferred } from '../../../src/util/promise' ;
20
+
21
+ import * as chai from 'chai' ;
22
+ import * as chaiAsPromised from 'chai-as-promised' ;
23
+
24
+ chai . use ( chaiAsPromised ) ;
19
25
20
26
describe ( 'PersistencePromise' , ( ) => {
21
27
function async < R > ( value : R ) : PersistencePromise < R > {
@@ -214,6 +220,17 @@ describe('PersistencePromise', () => {
214
220
. toPromise ( ) ;
215
221
} ) ;
216
222
223
+ it ( 'propagates error for waitFor()' , ( ) => {
224
+ const resolved = PersistencePromise . resolve ( 'resolved' ) ;
225
+ const rejected : PersistencePromise < string > = PersistencePromise . reject (
226
+ new Error ( 'rejected' )
227
+ ) ;
228
+
229
+ const p = PersistencePromise . waitFor ( [ resolved , rejected ] ) . toPromise ( ) ;
230
+
231
+ return expect ( p ) . to . be . eventually . rejectedWith ( 'rejected' ) ;
232
+ } ) ;
233
+
217
234
it ( 'executes forEach in order' , async ( ) => {
218
235
let result = '' ;
219
236
await PersistencePromise . forEach ( [ 'a' , 'b' , 'c' ] , el => {
@@ -222,4 +239,47 @@ describe('PersistencePromise', () => {
222
239
} ) . toPromise ( ) ;
223
240
expect ( result ) . to . equal ( 'abc' ) ;
224
241
} ) ;
242
+
243
+ it ( 'propagates error for forEach()' , ( ) => {
244
+ const p = PersistencePromise . forEach ( [ true , false ] , success => {
245
+ if ( success ) {
246
+ return PersistencePromise . resolve ( ) ;
247
+ } else {
248
+ return PersistencePromise . reject ( new Error ( 'rejected' ) ) ;
249
+ }
250
+ } ) . toPromise ( ) ;
251
+
252
+ return expect ( p ) . to . be . eventually . rejectedWith ( 'rejected' ) ;
253
+ } ) ;
254
+
255
+ it ( 'maintains order for map()' , async ( ) => {
256
+ const deferred = new Deferred < void > ( ) ;
257
+
258
+ const pending = new PersistencePromise < string > ( resolve => {
259
+ return deferred . promise . then ( ( ) => resolve ( 'first' ) ) ;
260
+ } ) ;
261
+ const resolved = PersistencePromise . resolve ( 'second' ) ;
262
+
263
+ const p = PersistencePromise . map ( [ pending , resolved ] ) . next ( results => {
264
+ expect ( results ) . to . deep . eq ( [ 'first' , 'second' ] ) ;
265
+ return PersistencePromise . resolve ( ) ;
266
+ } ) ;
267
+
268
+ setImmediate ( ( ) => {
269
+ deferred . resolve ( ) ;
270
+ } ) ;
271
+
272
+ await p . toPromise ( ) ;
273
+ } ) ;
274
+
275
+ it ( 'propagates error for map()' , ( ) => {
276
+ const resolved = PersistencePromise . resolve ( 'resolved' ) ;
277
+ const rejected : PersistencePromise < string > = PersistencePromise . reject (
278
+ new Error ( 'rejected' )
279
+ ) ;
280
+
281
+ const p = PersistencePromise . map ( [ resolved , rejected ] ) . toPromise ( ) ;
282
+
283
+ return expect ( p ) . to . be . eventually . rejectedWith ( 'rejected' ) ;
284
+ } ) ;
225
285
} ) ;
0 commit comments