@@ -451,6 +451,8 @@ describe('UNIT Sender', function () {
451451
452452 it ( 'should retry if not all regTokens were successfully sent' , function ( done ) {
453453 var callback = function ( ) {
454+ // These expect calls don't get reported to the test runner, they just result
455+ // in a timeout.
454456 expect ( requestStub . args . length ) . to . equal ( 3 ) ;
455457 var requestOptions = requestStub . args [ 2 ] [ 0 ] ;
456458 expect ( requestOptions . json . registration_ids . length ) . to . equal ( 1 ) ;
@@ -514,4 +516,147 @@ describe('UNIT Sender', function () {
514516 } , callback ) ;
515517 } ) ;
516518 } ) ;
519+
520+ describe ( 'send() with promise' , function ( ) {
521+ function setArgs ( err , res , resBody ) {
522+ args = {
523+ err : err ,
524+ res : res ,
525+ resBody : resBody
526+ } ;
527+ }
528+
529+ beforeEach ( function ( ) {
530+ requestStub . reset ( ) ;
531+ setArgs ( null , { statusCode : 200 } , { } ) ;
532+ } ) ;
533+
534+ it ( 'should return the response in the promise if successful for token' , function ( ) {
535+ var response = {
536+ success : 1 ,
537+ failure : 0 ,
538+ results : [
539+ { message_id : "something" }
540+ ]
541+ } ,
542+ sender = new Sender ( 'myKey' ) ;
543+ setArgs ( null , { statusCode : 200 } , response ) ;
544+ return sender . send ( { } , [ 1 ] ) . then ( function ( output ) {
545+ expect ( output ) . to . equal ( response ) ;
546+ expect ( requestStub . args . length ) . to . equal ( 1 ) ;
547+ } ) ;
548+ } ) ;
549+
550+ it ( 'should return the response in the promise if successful for tokens' , function ( ) {
551+ var response = {
552+ success : 1 ,
553+ failure : 0 ,
554+ results : [
555+ { message_id : "something" }
556+ ]
557+ } ,
558+ sender = new Sender ( 'myKey' ) ;
559+ setArgs ( null , { statusCode : 200 } , response ) ;
560+ return sender . send ( { } , [ 1 , 2 , 3 ] ) . then ( function ( output ) {
561+ expect ( output ) . to . equal ( response ) ;
562+ expect ( requestStub . args . length ) . to . equal ( 1 ) ;
563+ } ) ;
564+ } ) ;
565+
566+ it ( 'should reject the promise with the appropriate error if failure for token' , function ( ) {
567+ var error = 'my error' ,
568+ sender = new Sender ( 'myKey' ) ;
569+ setArgs ( error ) ;
570+ sender . send ( { } , [ 1 ] , 0 ) . then ( function ( ) {
571+ chai . assert . fail ( ) ;
572+ } ) . catch ( function ( err ) {
573+ expect ( err ) . to . equal ( error ) ;
574+ expect ( requestStub . args . length ) . to . equal ( 1 ) ;
575+ } ) ;
576+ } ) ;
577+
578+ it ( 'should reject the promise with the appropriate error if failure for tokens' , function ( ) {
579+ var error = 'my error' ,
580+ sender = new Sender ( 'myKey' ) ;
581+ setArgs ( error ) ;
582+ return sender . send ( { } , [ 1 , 2 , 3 ] , 0 ) . then ( function ( ) {
583+ chai . assert . fail ( ) ;
584+ } ) . catch ( function ( err ) {
585+ expect ( err ) . to . equal ( error ) ;
586+ expect ( requestStub . args . length ) . to . equal ( 1 ) ;
587+ } ) ;
588+ } ) ;
589+
590+ it ( 'should retry number of times passed into call and do exponential backoff' , function ( ) {
591+ var start = new Date ( ) ;
592+ var sender = new Sender ( 'myKey' ) ;
593+ setArgs ( null , { statusCode : 500 } ) ;
594+ return sender . send ( { data : { } } , [ 1 ] , {
595+ retries : 1 ,
596+ backoff : 200
597+ } ) . catch ( function ( ) { } ) . then ( function ( ) {
598+ expect ( requestStub . args . length ) . to . equal ( 2 ) ;
599+ expect ( new Date ( ) - start ) . to . be . gte ( 200 ) ;
600+ } ) ;
601+ } ) ;
602+
603+ it ( 'should retry if not all regTokens were successfully sent' , function ( ) {
604+ var sender = new Sender ( 'myKey' ) ;
605+ setArgs (
606+ null ,
607+ { statusCode : 200 } ,
608+ [
609+ { results : [ { } , { error : 'Unavailable' } ,
610+ { error : 'Unavailable' } ] } ,
611+ { results : [ { } , { error : 'Unavailable' } ] } ,
612+ { results : [ { } ] }
613+ ] ) ;
614+ return sender . send ( { data : { } } , [ 1 , 2 , 3 ] , {
615+ retries : 5 ,
616+ backoff : 100
617+ } ) . catch ( function ( ) { } ) . then ( function ( ) {
618+ expect ( requestStub . args . length ) . to . equal ( 3 ) ;
619+ var requestOptions = requestStub . args [ 2 ] [ 0 ] ;
620+ expect ( requestOptions . json . registration_ids . length ) . to . equal ( 1 ) ;
621+ expect ( requestOptions . json . registration_ids [ 0 ] ) . to . equal ( 3 ) ;
622+ } ) ;
623+ } ) ;
624+
625+ it ( 'should retry all regTokens in event of an error' , function ( ) {
626+ var sender = new Sender ( 'myKey' ) ;
627+ setArgs ( 'my error' ) ;
628+ return sender . send ( { data : { } } , [ 1 , 2 , 3 ] , 1 ) . catch ( function ( ) { } ) . then ( function ( ) {
629+ expect ( requestStub . args . length ) . to . equal ( 2 ) ;
630+ var requestOptions = requestStub . args [ 1 ] [ 0 ] ;
631+ expect ( requestOptions . json . registration_ids . length ) . to . equal ( 3 ) ;
632+ } ) ;
633+ } ) ;
634+
635+ it ( 'should update the failures and successes correctly when retrying' , function ( ) {
636+ var sender = new Sender ( 'myKey' ) ;
637+ setArgs ( null , { statusCode : 200 } , [
638+ { success : 1 , failure : 2 , canonical_ids : 0 , results : [ { } , { error : 'Unavailable' } , { error : 'Unavailable' } ] } ,
639+ { success : 1 , canonical_ids : 1 , failure : 0 , results : [ { } , { } ] }
640+ ] ) ;
641+ return sender . send ( { data : { } } , [ 1 , 2 , 3 ] , 3 ) . then ( function ( response ) {
642+ expect ( response . canonical_ids ) . to . equal ( 1 ) ;
643+ expect ( response . success ) . to . equal ( 2 ) ;
644+ expect ( response . failure ) . to . equal ( 0 ) ;
645+ } ) ;
646+ } ) ;
647+
648+ it ( 'should update the failures and successes correctly when retrying and failing some' , function ( ) {
649+ var sender = new Sender ( 'myKey' ) ;
650+ setArgs ( null , { statusCode : 200 } , [
651+ { success : 0 , failure : 3 , canonical_ids : 0 , results : [ { error : 'Unavailable' } , { error : 'Unavailable' } , { error : 'Unavailable' } ] } ,
652+ { success : 1 , canonical_ids : 0 , failure : 2 , results : [ { error : 'Unavailable' } , { error : 'Unavailable' } , { } ] } ,
653+ { success : 0 , canonical_ids : 0 , failure : 2 , results : [ { error : 'Unavailable' } , { error : 'Unavailable' } ] }
654+ ] ) ;
655+ return sender . send ( { data : { } } , [ 1 , 2 , 3 ] , { retries : 2 , backoff : 100 } ) . then ( function ( response ) {
656+ expect ( response . canonical_ids ) . to . equal ( 0 ) ;
657+ expect ( response . success ) . to . equal ( 1 ) ;
658+ expect ( response . failure ) . to . equal ( 2 ) ;
659+ } ) ;
660+ } ) ;
661+ } ) ;
517662} ) ;
0 commit comments