@@ -479,9 +479,9 @@ describe('CartService', () => {
479479 jest
480480 . spyOn ( invoiceManager , 'previewUpcoming' )
481481 . mockResolvedValue ( mockInvoicePreview ) ;
482- jest
483- . spyOn ( eligibilityService , 'checkEligibility' )
484- . mockResolvedValue ( EligibilityStatus . CREATE ) ;
482+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
483+ subscriptionEligibilityResult : EligibilityStatus . CREATE ,
484+ } ) ;
485485 } ) ;
486486
487487 it ( 'calls createCart with expected parameters' , async ( ) => {
@@ -569,9 +569,9 @@ describe('CartService', () => {
569569 . mockReturnValue ( mockResolvedCurrency ) ;
570570 jest . spyOn ( cartManager , 'createCart' ) . mockResolvedValue ( mockResultCart ) ;
571571 jest . spyOn ( accountManager , 'getAccounts' ) . mockResolvedValue ( [ ] ) ;
572- jest
573- . spyOn ( eligibilityService , 'checkEligibility' )
574- . mockResolvedValue ( EligibilityStatus . DOWNGRADE ) ;
572+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
573+ subscriptionEligibilityResult : EligibilityStatus . DOWNGRADE ,
574+ } ) ;
575575 jest . spyOn ( cartService , 'finalizeCartWithError' ) . mockResolvedValue ( ) ;
576576
577577 const result = await cartService . setupCart ( args ) ;
@@ -603,9 +603,9 @@ describe('CartService', () => {
603603 . mockReturnValue ( mockResolvedCurrency ) ;
604604 jest . spyOn ( cartManager , 'createCart' ) . mockResolvedValue ( mockResultCart ) ;
605605 jest . spyOn ( accountManager , 'getAccounts' ) . mockResolvedValue ( [ ] ) ;
606- jest
607- . spyOn ( eligibilityService , 'checkEligibility' )
608- . mockResolvedValue ( EligibilityStatus . INVALID ) ;
606+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
607+ subscriptionEligibilityResult : EligibilityStatus . INVALID ,
608+ } ) ;
609609 jest . spyOn ( cartService , 'finalizeCartWithError' ) . mockResolvedValue ( ) ;
610610
611611 const result = await cartService . setupCart ( args ) ;
@@ -1042,7 +1042,9 @@ describe('CartService', () => {
10421042
10431043 it ( 'returns cart and upcomingInvoicePreview' , async ( ) => {
10441044 const mockCart = ResultCartFactory ( {
1045+ state : CartState . START ,
10451046 stripeSubscriptionId : null ,
1047+ eligibilityStatus : CartEligibilityStatus . CREATE ,
10461048 } ) ;
10471049 const mockCustomer = StripeResponseFactory ( StripeCustomerFactory ( ) ) ;
10481050 const mockPrice = StripePriceFactory ( ) ;
@@ -1056,6 +1058,9 @@ describe('CartService', () => {
10561058 jest
10571059 . spyOn ( invoiceManager , 'previewUpcoming' )
10581060 . mockResolvedValue ( mockInvoicePreview ) ;
1061+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
1062+ subscriptionEligibilityResult : EligibilityStatus . CREATE ,
1063+ } ) ;
10591064
10601065 const result = await cartService . getCart ( mockCart . id ) ;
10611066 expect ( result ) . toEqual ( {
@@ -1088,6 +1093,7 @@ describe('CartService', () => {
10881093 it ( 'returns cart and upcomingInvoicePreview and latestInvoicePreview' , async ( ) => {
10891094 const mockCart = ResultCartFactory ( {
10901095 stripeSubscriptionId : mockSubscription . id ,
1096+ eligibilityStatus : CartEligibilityStatus . CREATE ,
10911097 } ) ;
10921098 const mockCustomer = StripeResponseFactory ( StripeCustomerFactory ( ) ) ;
10931099 const mockPrice = StripePriceFactory ( ) ;
@@ -1096,6 +1102,9 @@ describe('CartService', () => {
10961102 const mockPaymentMethod = StripeResponseFactory (
10971103 StripePaymentMethodFactory ( { } )
10981104 ) ;
1105+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
1106+ subscriptionEligibilityResult : EligibilityStatus . CREATE ,
1107+ } ) ;
10991108
11001109 jest . spyOn ( cartManager , 'fetchCartById' ) . mockResolvedValue ( mockCart ) ;
11011110 jest
@@ -1150,6 +1159,7 @@ describe('CartService', () => {
11501159 it ( 'returns cart and upcomingInvoicePreview if customer is undefined' , async ( ) => {
11511160 const mockCart = ResultCartFactory ( {
11521161 stripeCustomerId : null ,
1162+ eligibilityStatus : CartEligibilityStatus . CREATE ,
11531163 } ) ;
11541164 const mockPrice = StripePriceFactory ( ) ;
11551165 const mockInvoicePreview = InvoicePreviewFactory ( ) ;
@@ -1162,6 +1172,9 @@ describe('CartService', () => {
11621172 jest
11631173 . spyOn ( invoiceManager , 'previewUpcoming' )
11641174 . mockResolvedValue ( mockInvoicePreview ) ;
1175+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
1176+ subscriptionEligibilityResult : EligibilityStatus . CREATE ,
1177+ } ) ;
11651178
11661179 const result = await cartService . getCart ( mockCart . id ) ;
11671180 expect ( result ) . toEqual ( {
@@ -1183,6 +1196,63 @@ describe('CartService', () => {
11831196 } ) ;
11841197 } ) ;
11851198
1199+ it ( 'returns cart with upgrade eligibility status' , async ( ) => {
1200+ const mockCart = ResultCartFactory ( {
1201+ state : CartState . START ,
1202+ stripeSubscriptionId : null ,
1203+ eligibilityStatus : CartEligibilityStatus . UPGRADE ,
1204+ } ) ;
1205+ const mockCustomer = StripeResponseFactory ( StripeCustomerFactory ( ) ) ;
1206+ const mockPrice = StripePriceFactory ( ) ;
1207+ const mockInvoicePreview = InvoicePreviewFactory ( ) ;
1208+ const mockFromOfferingId = faker . string . uuid ( ) ;
1209+ const mockFromPrice = StripePriceFactory ( ) ;
1210+
1211+ jest . spyOn ( cartManager , 'fetchCartById' ) . mockResolvedValue ( mockCart ) ;
1212+ jest
1213+ . spyOn ( productConfigurationManager , 'retrieveStripePrice' )
1214+ . mockResolvedValue ( mockPrice ) ;
1215+ jest . spyOn ( customerManager , 'retrieve' ) . mockResolvedValue ( mockCustomer ) ;
1216+ jest
1217+ . spyOn ( invoiceManager , 'previewUpcomingForUpgrade' )
1218+ . mockResolvedValue ( mockInvoicePreview ) ;
1219+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
1220+ subscriptionEligibilityResult : EligibilityStatus . UPGRADE ,
1221+ fromOfferingConfigId : mockFromOfferingId ,
1222+ fromPrice : mockFromPrice ,
1223+ } ) ;
1224+
1225+ const result = await cartService . getCart ( mockCart . id ) ;
1226+ expect ( result ) . toEqual ( {
1227+ ...mockCart ,
1228+ upcomingInvoicePreview : mockInvoicePreview ,
1229+ paymentInfo : {
1230+ type : mockPaymentMethod . type ,
1231+ last4 : mockPaymentMethod . card ?. last4 ,
1232+ brand : mockPaymentMethod . card ?. brand ,
1233+ customerSessionClientSecret : mockCustomerSession . client_secret ,
1234+ } ,
1235+ metricsOptedOut : false ,
1236+ fromOfferingConfigId : mockFromOfferingId ,
1237+ fromPrice : mockFromPrice ,
1238+ } ) ;
1239+
1240+ expect ( cartManager . fetchCartById ) . toHaveBeenCalledWith ( mockCart . id ) ;
1241+ expect (
1242+ productConfigurationManager . retrieveStripePrice
1243+ ) . toHaveBeenCalledWith ( mockCart . offeringConfigId , mockCart . interval ) ;
1244+ expect ( customerManager . retrieve ) . toHaveBeenCalledWith (
1245+ mockCart . stripeCustomerId
1246+ ) ;
1247+ expect ( invoiceManager . previewUpcomingForUpgrade ) . toHaveBeenCalledWith ( {
1248+ priceId : mockPrice . id ,
1249+ currency : mockCart . currency ,
1250+ customer : mockCustomer ,
1251+ taxAddress : mockCart . taxAddress ,
1252+ fromPrice : mockFromPrice ,
1253+ } ) ;
1254+ } ) ;
1255+
11861256 it ( "has metricsOptedOut set to true if the cart's account has opted out of metrics" , async ( ) => {
11871257 const mockUid = faker . string . hexadecimal ( {
11881258 length : 32 ,
@@ -1196,6 +1266,7 @@ describe('CartService', () => {
11961266 const mockCart = ResultCartFactory ( {
11971267 uid : mockUid ,
11981268 stripeSubscriptionId : null ,
1269+ eligibilityStatus : CartEligibilityStatus . CREATE ,
11991270 } ) ;
12001271 const mockCustomer = StripeResponseFactory ( StripeCustomerFactory ( ) ) ;
12011272 const mockPrice = StripePriceFactory ( ) ;
@@ -1212,6 +1283,9 @@ describe('CartService', () => {
12121283 jest
12131284 . spyOn ( accountManager , 'getAccounts' )
12141285 . mockResolvedValue ( [ mockAccount ] ) ;
1286+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
1287+ subscriptionEligibilityResult : EligibilityStatus . CREATE ,
1288+ } ) ;
12151289
12161290 const result = await cartService . getCart ( mockCart . id ) ;
12171291 expect ( accountManager . getAccounts ) . toHaveBeenCalledWith ( [ mockUid ] ) ;
@@ -1230,6 +1304,7 @@ describe('CartService', () => {
12301304 const mockCart = ResultCartFactory ( {
12311305 uid : mockUid ,
12321306 stripeSubscriptionId : null ,
1307+ eligibilityStatus : CartEligibilityStatus . CREATE ,
12331308 } ) ;
12341309 const mockCustomer = StripeResponseFactory ( StripeCustomerFactory ( ) ) ;
12351310 const mockPrice = StripePriceFactory ( ) ;
@@ -1246,14 +1321,20 @@ describe('CartService', () => {
12461321 jest
12471322 . spyOn ( accountManager , 'getAccounts' )
12481323 . mockResolvedValue ( [ mockAccount ] ) ;
1324+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
1325+ subscriptionEligibilityResult : EligibilityStatus . CREATE ,
1326+ } ) ;
12491327
12501328 const result = await cartService . getCart ( mockCart . id ) ;
12511329 expect ( accountManager . getAccounts ) . toHaveBeenCalledWith ( [ mockUid ] ) ;
12521330 expect ( result . metricsOptedOut ) . toBeFalsy ( ) ;
12531331 } ) ;
12541332
12551333 it ( 'has metricsOptedOut set to false if the cart has no associated account' , async ( ) => {
1256- const mockCart = ResultCartFactory ( { stripeSubscriptionId : null } ) ;
1334+ const mockCart = ResultCartFactory ( {
1335+ stripeSubscriptionId : null ,
1336+ eligibilityStatus : CartEligibilityStatus . CREATE ,
1337+ } ) ;
12571338 const mockCustomer = StripeResponseFactory ( StripeCustomerFactory ( ) ) ;
12581339 const mockPrice = StripePriceFactory ( ) ;
12591340 const mockInvoicePreview = InvoicePreviewFactory ( ) ;
@@ -1267,6 +1348,9 @@ describe('CartService', () => {
12671348 . spyOn ( invoiceManager , 'previewUpcoming' )
12681349 . mockResolvedValue ( mockInvoicePreview ) ;
12691350 jest . spyOn ( accountManager , 'getAccounts' ) . mockResolvedValue ( [ ] ) ;
1351+ jest . spyOn ( eligibilityService , 'checkEligibility' ) . mockResolvedValue ( {
1352+ subscriptionEligibilityResult : EligibilityStatus . CREATE ,
1353+ } ) ;
12701354
12711355 const result = await cartService . getCart ( mockCart . id ) ;
12721356 expect ( accountManager . getAccounts ) . not . toHaveBeenCalled ( ) ;
0 commit comments