@@ -12,11 +12,13 @@ import {
1212 StripeCustomerFactory ,
1313 StripeSubscriptionFactory ,
1414 MockStripeConfigProvider ,
15+ StripeRangeQueryParamFactory ,
1516} from '@fxa/payments/stripe' ;
1617import { STRIPE_SUBSCRIPTION_METADATA } from './types' ;
1718import { SubscriptionManager } from './subscription.manager' ;
1819import { MockStatsDProvider } from '@fxa/shared/metrics/statsd' ;
19- import { SubscriptionCustomerMismatchError } from './customer.error'
20+ import { SubscriptionCustomerMismatchError } from './customer.error' ;
21+ import { StripeSubscriptionAsyncGeneratorFactory } from 'libs/payments/stripe/src/lib/factories/subscription.factory' ;
2022
2123describe ( 'SubscriptionManager' , ( ) => {
2224 let subscriptionManager : SubscriptionManager ;
@@ -93,6 +95,46 @@ describe('SubscriptionManager', () => {
9395 } ) ;
9496 } ) ;
9597
98+ describe ( 'listCancelOnDateGenerator' , ( ) => {
99+ const mockCurrentPeriodEnd = StripeRangeQueryParamFactory ( ) ;
100+ it ( 'returns generator that yields subscriptions' , async ( ) => {
101+ const mockSubscription = StripeSubscriptionFactory ( {
102+ cancel_at_period_end : true ,
103+ } ) ;
104+ const mockGenerator = StripeSubscriptionAsyncGeneratorFactory ( [
105+ mockSubscription ,
106+ ] ) ;
107+ const expected = mockSubscription ;
108+
109+ jest
110+ . spyOn ( stripeClient , 'subscriptionsListGenerator' )
111+ . mockReturnValue ( mockGenerator ) ;
112+
113+ const generator =
114+ subscriptionManager . listCancelOnDateGenerator ( mockCurrentPeriodEnd ) ;
115+ const result = ( await generator . next ( ) ) . value ;
116+
117+ expect ( result ) . toEqual ( expected ) ;
118+ } ) ;
119+
120+ it ( 'returns generator that yields no subscriptions' , async ( ) => {
121+ const mockSubscription = StripeSubscriptionFactory ( ) ;
122+ const mockGenerator = StripeSubscriptionAsyncGeneratorFactory ( [
123+ mockSubscription ,
124+ ] ) ;
125+
126+ jest
127+ . spyOn ( stripeClient , 'subscriptionsListGenerator' )
128+ . mockReturnValue ( mockGenerator ) ;
129+
130+ const generator =
131+ subscriptionManager . listCancelOnDateGenerator ( mockCurrentPeriodEnd ) ;
132+ const result = ( await generator . next ( ) ) . value ;
133+
134+ expect ( result ) . toEqual ( undefined ) ;
135+ } ) ;
136+ } ) ;
137+
96138 describe ( 'cancel' , ( ) => {
97139 it ( 'calls stripeclient' , async ( ) => {
98140 const mockSubscription = StripeSubscriptionFactory ( ) ;
@@ -341,7 +383,10 @@ describe('SubscriptionManager', () => {
341383 . mockResolvedValueOnce ( mockResponse ) ;
342384
343385 await expect (
344- subscriptionManager . getSubscriptionStatus ( mockCustomer1 . id , mockSubscription . id )
386+ subscriptionManager . getSubscriptionStatus (
387+ mockCustomer1 . id ,
388+ mockSubscription . id
389+ )
345390 ) . rejects . toThrow ( SubscriptionCustomerMismatchError ) ;
346391
347392 expect ( subscriptionManager . retrieve ) . toHaveBeenCalledWith (
@@ -361,7 +406,9 @@ describe('SubscriptionManager', () => {
361406 const mockUpdatedSubscription = StripeSubscriptionFactory ( {
362407 customer : mockCustomer . id ,
363408 } ) ;
364- const mockUpdatedResponse = StripeResponseFactory ( mockUpdatedSubscription ) ;
409+ const mockUpdatedResponse = StripeResponseFactory (
410+ mockUpdatedSubscription
411+ ) ;
365412
366413 jest
367414 . spyOn ( subscriptionManager , 'retrieve' )
@@ -373,13 +420,18 @@ describe('SubscriptionManager', () => {
373420 const result = await subscriptionManager . applyStripeCouponToSubscription ( {
374421 customerId : mockCustomer . id ,
375422 subscriptionId : mockSubscription . id ,
376- stripeCouponId : mockCouponId
423+ stripeCouponId : mockCouponId ,
377424 } ) ;
378425
379- expect ( subscriptionManager . retrieve ) . toHaveBeenCalledWith ( mockSubscription . id ) ;
380- expect ( subscriptionManager . update ) . toHaveBeenCalledWith ( mockSubscription . id , {
381- discounts : [ { coupon : mockCouponId } ] ,
382- } ) ;
426+ expect ( subscriptionManager . retrieve ) . toHaveBeenCalledWith (
427+ mockSubscription . id
428+ ) ;
429+ expect ( subscriptionManager . update ) . toHaveBeenCalledWith (
430+ mockSubscription . id ,
431+ {
432+ discounts : [ { coupon : mockCouponId } ] ,
433+ }
434+ ) ;
383435 expect ( result ) . toEqual ( mockUpdatedResponse ) ;
384436 } ) ;
385437
@@ -393,7 +445,9 @@ describe('SubscriptionManager', () => {
393445 const mockUpdatedSubscription = StripeSubscriptionFactory ( {
394446 customer : mockCustomer . id ,
395447 } ) ;
396- const mockUpdatedResponse = StripeResponseFactory ( mockUpdatedSubscription ) ;
448+ const mockUpdatedResponse = StripeResponseFactory (
449+ mockUpdatedSubscription
450+ ) ;
397451
398452 jest
399453 . spyOn ( subscriptionManager , 'retrieve' )
@@ -406,13 +460,16 @@ describe('SubscriptionManager', () => {
406460 customerId : mockCustomer . id ,
407461 subscriptionId : mockSubscription . id ,
408462 stripeCouponId : mockCouponId ,
409- setCancelAtPeriodEnd : true
463+ setCancelAtPeriodEnd : true ,
410464 } ) ;
411465
412- expect ( subscriptionManager . update ) . toHaveBeenCalledWith ( mockSubscription . id , {
413- discounts : [ { coupon : mockCouponId } ] ,
414- cancel_at_period_end : true ,
415- } ) ;
466+ expect ( subscriptionManager . update ) . toHaveBeenCalledWith (
467+ mockSubscription . id ,
468+ {
469+ discounts : [ { coupon : mockCouponId } ] ,
470+ cancel_at_period_end : true ,
471+ }
472+ ) ;
416473 expect ( result ) . toEqual ( mockUpdatedResponse ) ;
417474 } ) ;
418475
@@ -433,7 +490,7 @@ describe('SubscriptionManager', () => {
433490 subscriptionManager . applyStripeCouponToSubscription ( {
434491 customerId : mockCustomer1 . id ,
435492 subscriptionId : mockSubscription . id ,
436- stripeCouponId : mockCouponId
493+ stripeCouponId : mockCouponId ,
437494 } )
438495 ) . rejects . toThrow ( SubscriptionCustomerMismatchError ) ;
439496 expect ( jest . spyOn ( subscriptionManager , 'update' ) ) . not . toHaveBeenCalled ( ) ;
0 commit comments