@@ -228,7 +228,7 @@ describe('PushWorker', () => {
228
228
} ,
229
229
response : { error : 'invalid error...' }
230
230
}
231
- ] , true ) ;
231
+ ] , undefined , true ) ;
232
232
expect ( spy ) . toHaveBeenCalled ( ) ;
233
233
expect ( spy . calls . count ( ) ) . toBe ( 1 ) ;
234
234
const lastCall = spy . calls . mostRecent ( ) ;
@@ -241,5 +241,137 @@ describe('PushWorker', () => {
241
241
} ) ;
242
242
done ( ) ;
243
243
} ) ;
244
+
245
+ it ( 'tracks push status per UTC offsets' , ( done ) => {
246
+ const config = new Config ( 'test' ) ;
247
+ const handler = pushStatusHandler ( config , 'ABCDEF1234' ) ;
248
+ const spy = spyOn ( config . database , "update" ) . and . callThrough ( ) ;
249
+ const UTCOffset = 1 ;
250
+ handler . setInitial ( ) . then ( ( ) => {
251
+ return handler . trackSent ( [
252
+ {
253
+ transmitted : false ,
254
+ device : {
255
+ deviceToken : 1 ,
256
+ deviceType : 'ios' ,
257
+ } ,
258
+ } ,
259
+ {
260
+ transmitted : true ,
261
+ device : {
262
+ deviceToken : 1 ,
263
+ deviceType : 'ios' ,
264
+ }
265
+ } ,
266
+ ] , UTCOffset )
267
+ } ) . then ( ( ) => {
268
+ expect ( spy ) . toHaveBeenCalled ( ) ;
269
+ expect ( spy . calls . count ( ) ) . toBe ( 1 ) ;
270
+ const lastCall = spy . calls . mostRecent ( ) ;
271
+ expect ( lastCall . args [ 0 ] ) . toBe ( '_PushStatus' ) ;
272
+ const updatePayload = lastCall . args [ 2 ] ;
273
+ expect ( updatePayload . updatedAt instanceof Date ) . toBeTruthy ( ) ;
274
+ // remove the updatedAt as not testable
275
+ delete updatePayload . updatedAt ;
276
+
277
+ expect ( lastCall . args [ 2 ] ) . toEqual ( {
278
+ numSent : { __op : 'Increment' , amount : 1 } ,
279
+ numFailed : { __op : 'Increment' , amount : 1 } ,
280
+ 'sentPerType.ios' : { __op : 'Increment' , amount : 1 } ,
281
+ 'failedPerType.ios' : { __op : 'Increment' , amount : 1 } ,
282
+ [ `sentPerUTCOffset.${ UTCOffset } ` ] : { __op : 'Increment' , amount : 1 } ,
283
+ [ `failedPerUTCOffset.${ UTCOffset } ` ] : { __op : 'Increment' , amount : 1 } ,
284
+ count : { __op : 'Increment' , amount : - 2 } ,
285
+ } ) ;
286
+ const query = new Parse . Query ( '_PushStatus' ) ;
287
+ return query . get ( 'ABCDEF1234' , { useMasterKey : true } ) ;
288
+ } ) . then ( ( pushStatus ) => {
289
+ const sentPerUTCOffset = pushStatus . get ( 'sentPerUTCOffset' ) ;
290
+ expect ( sentPerUTCOffset [ '1' ] ) . toBe ( 1 ) ;
291
+ const failedPerUTCOffset = pushStatus . get ( 'failedPerUTCOffset' ) ;
292
+ expect ( failedPerUTCOffset [ '1' ] ) . toBe ( 1 ) ;
293
+ return handler . trackSent ( [
294
+ {
295
+ transmitted : false ,
296
+ device : {
297
+ deviceToken : 1 ,
298
+ deviceType : 'ios' ,
299
+ } ,
300
+ } ,
301
+ {
302
+ transmitted : true ,
303
+ device : {
304
+ deviceToken : 1 ,
305
+ deviceType : 'ios' ,
306
+ }
307
+ } ,
308
+ {
309
+ transmitted : true ,
310
+ device : {
311
+ deviceToken : 1 ,
312
+ deviceType : 'ios' ,
313
+ }
314
+ } ,
315
+ ] , UTCOffset )
316
+ } ) . then ( ( ) => {
317
+ const query = new Parse . Query ( '_PushStatus' ) ;
318
+ return query . get ( 'ABCDEF1234' , { useMasterKey : true } ) ;
319
+ } ) . then ( ( pushStatus ) => {
320
+ const sentPerUTCOffset = pushStatus . get ( 'sentPerUTCOffset' ) ;
321
+ expect ( sentPerUTCOffset [ '1' ] ) . toBe ( 3 ) ;
322
+ const failedPerUTCOffset = pushStatus . get ( 'failedPerUTCOffset' ) ;
323
+ expect ( failedPerUTCOffset [ '1' ] ) . toBe ( 2 ) ;
324
+ } ) . then ( done ) . catch ( done . fail ) ;
325
+ } ) ;
326
+
327
+ it ( 'tracks push status per UTC offsets with negative offsets' , ( done ) => {
328
+ const config = new Config ( 'test' ) ;
329
+ const handler = pushStatusHandler ( config ) ;
330
+ spyOn ( config . database , "create" ) . and . callFake ( ( ) => {
331
+ return Promise . resolve ( ) ;
332
+ } ) ;
333
+ const spy = spyOn ( config . database , "update" ) . and . callFake ( ( ) => {
334
+ return Promise . resolve ( ) ;
335
+ } ) ;
336
+ const UTCOffset = - 6 ;
337
+ handler . trackSent ( [
338
+ {
339
+ transmitted : false ,
340
+ device : {
341
+ deviceToken : 1 ,
342
+ deviceType : 'ios' ,
343
+ } ,
344
+ response : { error : 'Unregistered' }
345
+ } ,
346
+ {
347
+ transmitted : true ,
348
+ device : {
349
+ deviceToken : 1 ,
350
+ deviceType : 'ios' ,
351
+ } ,
352
+ response : { error : 'Unregistered' }
353
+ } ,
354
+ ] , UTCOffset ) . then ( ( ) => {
355
+ expect ( spy ) . toHaveBeenCalled ( ) ;
356
+ expect ( spy . calls . count ( ) ) . toBe ( 1 ) ;
357
+ const lastCall = spy . calls . mostRecent ( ) ;
358
+ expect ( lastCall . args [ 0 ] ) . toBe ( '_PushStatus' ) ;
359
+ const updatePayload = lastCall . args [ 2 ] ;
360
+ expect ( updatePayload . updatedAt instanceof Date ) . toBeTruthy ( ) ;
361
+ // remove the updatedAt as not testable
362
+ delete updatePayload . updatedAt ;
363
+
364
+ expect ( lastCall . args [ 2 ] ) . toEqual ( {
365
+ numSent : { __op : 'Increment' , amount : 1 } ,
366
+ numFailed : { __op : 'Increment' , amount : 1 } ,
367
+ 'sentPerType.ios' : { __op : 'Increment' , amount : 1 } ,
368
+ 'failedPerType.ios' : { __op : 'Increment' , amount : 1 } ,
369
+ [ `sentPerUTCOffset.${ UTCOffset } ` ] : { __op : 'Increment' , amount : 1 } ,
370
+ [ `failedPerUTCOffset.${ UTCOffset } ` ] : { __op : 'Increment' , amount : 1 } ,
371
+ count : { __op : 'Increment' , amount : - 2 } ,
372
+ } ) ;
373
+ done ( ) ;
374
+ } ) ;
375
+ } ) ;
244
376
} ) ;
245
377
} ) ;
0 commit comments