From bddb44eebfed6cd4d8763189cadbe9890ffeacbc Mon Sep 17 00:00:00 2001 From: Aman Agrawal Date: Thu, 22 Feb 2024 04:30:41 +0000 Subject: [PATCH] stripe: Disable free trial for legacy customer with ended plan. This ensures that customer who had legacy plan any time in the past cannot avail free trial. --- corporate/lib/stripe.py | 11 +- corporate/models.py | 6 + ...ve_legacy_customer--Customer.create.1.json | Bin 0 -> 810 bytes ...ve_legacy_customer--Customer.modify.1.json | Bin 0 -> 835 bytes ..._legacy_customer--Customer.retrieve.1.json | Bin 0 -> 1964 bytes ..._legacy_customer--Customer.retrieve.2.json | Bin 0 -> 1964 bytes ..._legacy_customer--Customer.retrieve.3.json | Bin 0 -> 1964 bytes ..._legacy_customer--Customer.retrieve.4.json | Bin 0 -> 1964 bytes ..._legacy_customer--Customer.retrieve.5.json | Bin 0 -> 1966 bytes ..._active_legacy_customer--Event.list.1.json | Bin 0 -> 1710 bytes ..._active_legacy_customer--Event.list.2.json | Bin 0 -> 40362 bytes ..._active_legacy_customer--Event.list.3.json | Bin 0 -> 17279 bytes ..._active_legacy_customer--Event.list.4.json | Bin 0 -> 8532 bytes ..._active_legacy_customer--Event.list.5.json | Bin 0 -> 81 bytes ...ive_legacy_customer--Invoice.create.1.json | Bin 0 -> 5893 bytes ..._customer--Invoice.finalize_invoice.1.json | Bin 0 -> 6255 bytes ...ctive_legacy_customer--Invoice.list.1.json | Bin 0 -> 83 bytes ...active_legacy_customer--Invoice.pay.1.json | Bin 0 -> 6290 bytes ...legacy_customer--InvoiceItem.create.1.json | Bin 0 -> 1085 bytes ...legacy_customer--InvoiceItem.create.2.json | Bin 0 -> 1116 bytes ...legacy_customer--SetupIntent.create.1.json | Bin 0 -> 930 bytes ...e_legacy_customer--SetupIntent.list.1.json | Bin 0 -> 1116 bytes ...gacy_customer--SetupIntent.retrieve.1.json | Bin 0 -> 930 bytes ...y_customer--checkout.Session.create.1.json | Bin 0 -> 2412 bytes ...acy_customer--checkout.Session.list.1.json | Bin 0 -> 2806 bytes ...ed_legacy_customer--Customer.create.1.json | Bin 0 -> 809 bytes ...ed_legacy_customer--Customer.modify.1.json | Bin 0 -> 834 bytes ..._legacy_customer--Customer.retrieve.1.json | Bin 0 -> 1963 bytes ..._legacy_customer--Customer.retrieve.2.json | Bin 0 -> 1963 bytes ..._legacy_customer--Customer.retrieve.3.json | Bin 0 -> 1963 bytes ..._legacy_customer--Customer.retrieve.4.json | Bin 0 -> 1963 bytes ..._legacy_customer--Customer.retrieve.5.json | Bin 0 -> 1965 bytes ...r_ended_legacy_customer--Event.list.1.json | Bin 0 -> 1709 bytes ...r_ended_legacy_customer--Event.list.2.json | Bin 0 -> 40358 bytes ...r_ended_legacy_customer--Event.list.3.json | Bin 0 -> 17277 bytes ...r_ended_legacy_customer--Event.list.4.json | Bin 0 -> 8531 bytes ...r_ended_legacy_customer--Event.list.5.json | Bin 0 -> 81 bytes ...ded_legacy_customer--Invoice.create.1.json | Bin 0 -> 5893 bytes ..._customer--Invoice.finalize_invoice.1.json | Bin 0 -> 6254 bytes ...ended_legacy_customer--Invoice.list.1.json | Bin 0 -> 83 bytes ..._ended_legacy_customer--Invoice.pay.1.json | Bin 0 -> 6289 bytes ...legacy_customer--InvoiceItem.create.1.json | Bin 0 -> 1085 bytes ...legacy_customer--InvoiceItem.create.2.json | Bin 0 -> 1116 bytes ...legacy_customer--SetupIntent.create.1.json | Bin 0 -> 930 bytes ...d_legacy_customer--SetupIntent.list.1.json | Bin 0 -> 1116 bytes ...gacy_customer--SetupIntent.retrieve.1.json | Bin 0 -> 930 bytes ...y_customer--checkout.Session.create.1.json | Bin 0 -> 2412 bytes ...acy_customer--checkout.Session.list.1.json | Bin 0 -> 2806 bytes corporate/tests/test_stripe.py | 105 +++++++++++++++++- corporate/views/portico.py | 21 ++-- 50 files changed, 132 insertions(+), 11 deletions(-) create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.modify.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.retrieve.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.retrieve.2.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.retrieve.3.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.retrieve.4.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.retrieve.5.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.2.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.3.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.4.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.5.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.finalize_invoice.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.list.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.pay.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--InvoiceItem.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--InvoiceItem.create.2.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.list.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.retrieve.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--checkout.Session.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--checkout.Session.list.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.modify.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.2.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.3.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.4.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.5.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.2.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.3.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.4.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.5.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.finalize_invoice.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.list.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.pay.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--InvoiceItem.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--InvoiceItem.create.2.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.list.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.retrieve.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--checkout.Session.create.1.json create mode 100644 corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--checkout.Session.list.1.json diff --git a/corporate/lib/stripe.py b/corporate/lib/stripe.py index b4057093a5..0b4a3a10ad 100644 --- a/corporate/lib/stripe.py +++ b/corporate/lib/stripe.py @@ -51,6 +51,7 @@ from corporate.models import ( get_customer_by_realm, get_customer_by_remote_realm, get_customer_by_remote_server, + is_legacy_customer, ) from zerver.lib.exceptions import JsonableError from zerver.lib.logging_util import log_to_file @@ -1847,10 +1848,11 @@ class BillingSession(ABC): if fixed_price_plan_offer is not None: free_trial = False + if is_legacy_customer(customer): + # Free trial is not available for legacy customers. + free_trial = False + remote_server_legacy_plan = self.get_remote_server_legacy_plan(customer) - if remote_server_legacy_plan is not None: - # Free trial is not available for legacy customers. - free_trial = False should_schedule_upgrade_for_legacy_remote_server = ( remote_server_legacy_plan is not None and upgrade_request.remote_server_plan_start_date == "billing_cycle_end_date" @@ -2420,6 +2422,9 @@ class BillingSession(ABC): is_self_hosted_billing = not isinstance(self, RealmBillingSession) if fixed_price is None and remote_server_legacy_plan_end_date is None: free_trial_days = get_free_trial_days(is_self_hosted_billing, tier) + if customer is not None and is_legacy_customer(customer): + # Free trial is not available for legacy customers. + free_trial_days = None if free_trial_days is not None: _, _, free_trial_end, _ = compute_plan_parameters( tier, diff --git a/corporate/models.py b/corporate/models.py index 262b869101..7d680d3509 100644 --- a/corporate/models.py +++ b/corporate/models.py @@ -473,6 +473,12 @@ def get_current_plan_by_customer(customer: Customer) -> Optional[CustomerPlan]: ).first() +def is_legacy_customer(customer: Customer) -> bool: + return CustomerPlan.objects.filter( + customer=customer, tier=CustomerPlan.TIER_SELF_HOSTED_LEGACY + ).exists() + + def get_current_plan_by_realm(realm: Realm) -> Optional[CustomerPlan]: customer = get_customer_by_realm(realm) if customer is None: diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..f9f5cb63813ddb400ddde11ccec311d39e234ae7 GIT binary patch literal 810 zcma))%WhgR5Qg_W1v={xg#e?s;Vqw{|;_^i!b!hDDU2}xdb*~8NUF~W)6d9sA! z#bhS_;Y+^6rhh6aVYGWKaGA6eHwmqPL=sVlti2<9Ct>|H25y7FweWVl5E66M^T|~8 z-9AGn;Y*V_iNkVjYW{{>gZ%kVF*?-zeTuG=b)qEpb^V;fx9!vSUjDw_9lUPqwEznd zN)I*i{$Y9h_+>f2^e5!3-E#%`Mi2=jDQ0h((lGLzFS(A80^eDhnOWqGuWcNArWoaY zM!d8UZHY)_m~T*yvQ+TBjc@dp7|FW34~nGDCC~h$wMao3EFo?YS<1D{f6%3_E;CEn z!#m#tCbLz)oUHokf?jH|!di)yLU(G?aa$Wa&e}N)ndt-Pgn9<;I;L$Tzy1YL&*A`- zm^6FXcy}RFHv~FJ$&44=pu+j_v&E*34uP3 z?3x2YMecH?Ig_ISr3-!oMq_&WH*4h!{s2*BvWDl#uGcrof7^cg(TV%%{+P8}r#Lbn zP^w+2e81|aAKvxzm-&b(DSK0ld>|9aMq*6PFsV?Bp}&+mndD(_Xl70uns;9H=NEix{>TSWHFcKWwiZ43Rk>Tpcb5C$nYOPnKP~pqE@MaV_~$VsmcN zf+-E2=4veN5>v+oL@f7F&!(*-x%DmbaxX`x$&(uQ8)sk8l+__!s$kl2&{)j*^}E)_ hjq;vs8>%MQG2Ef?mD?7wTAMJ^Srf&dWA*59^aMVV0Z9M= literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.retrieve.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Customer.retrieve.1.json new file mode 100644 index 0000000000000000000000000000000000000000..ff8e652ab1fbd87147162559d0f54de3ee76c29a GIT binary patch literal 1964 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 CyTbbb literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.2.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.2.json new file mode 100644 index 0000000000000000000000000000000000000000..4a4ef298ac72176f1b7709182ae31c6e29a673ca GIT binary patch literal 40362 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 S1(DRxdZ}ZYIluh*%l`qEck}Q7 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.3.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.3.json new file mode 100644 index 0000000000000000000000000000000000000000..8ed630ad5835f506d18492c0de9555d46d379a73 GIT binary patch literal 17279 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 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.4.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.4.json new file mode 100644 index 0000000000000000000000000000000000000000..8fcbc7d4b8e4222bd48b161c2d6379dd1067915f GIT binary patch literal 8532 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 HzI^px(%5t) literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.5.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Event.list.5.json new file mode 100644 index 0000000000000000000000000000000000000000..6d922067afeefefcba3c644d2dd8510c1d8984a9 GIT binary patch literal 81 zcmb>CQczGzNi0cJvQmhS)dBG`5{u(=^NUh}B58>^#i?My{G_bZ Xv?vE8pkHRFpIVlhS5mCRRm%kck@XgY literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..0b30b9a339be53772691c968c6326d29315c5962 GIT binary patch literal 5893 zcmd^DS#KOS41UkASO|Sgc{G_2R#mN2miqttj{GzsXMd8%`I2G{$M3J1sx_M&v$=UZ zd8w)=rI=;6RMZ9}m6I}PXuR&);r`v7=`{b^F;T@wE;y&m8&ODD%bPCVc`zY-_o>Xm<8vt?Al@6PZFke+T&$y1(j;>Kl-9qYbq_eF^+3td{Tnope26GcRNmNP?(GH#R36w z4dBPi_1n3s5m<93Bb@t{McY~*%i)WLunTqFit-|>)&P3a3UwM|*YENvO@yM`Z<^Ed z?W5n`GTmMseKy^TPG7sYO4oVOw-lfCQkUc_*@AboyFW-I_wF)8kS z_EWBPi$Ltnkmz9x8FVeoh#nxdyz}D`;5r67Kl<#Q#4Pri-1EkdvuR*1{EUsa8BZykIePO4uv_AXnu)zI$-6zccgiVsG_k z0OD@XkzVck3)!m(nD94%XnmMYuZE1aQ+9e*U%V@=+8i%9RJQG<>*ysf-@)jp4e^A1 zN>rC4`tMB~q8%JPL>e}Bx~*Nn0{)~Y$E%aMTb)eh(cS(prRAEV!$N^kh7c4XZO{3N zT?&KuB*{ZnMJD`dgYk1wpE>I<3LR1}X>01uuvs8vY900(+)1YJ^AhU|0iP79MJ(jRMI4!y0lLUIa*NT*XU2 zcuaQX?cqkmxOvWorO&+M1L3X_*7{RA@?Rt=&p6qExr4?eUb?Aw(s1L*{&3IzSkJ~o zH@pfXsm(b_MvuY;mO+ze%!n$BKS?jbw`Kp?kmj%Ns>Pe-{CRG~H(~$t?*2W0cKR|u zXfvCT4QxRMKKTEz|LpK^Z#F#`Fb*`Z8EJmeSM^yY#KbLBl{tTtx8TDsg`syFB zPazwiF~t{Mk803@X-q24h;1#CVVnXvHH#`jn?$y*x3?mB8u+nR0jDl$D|9Jfg@1w` z%&UR{y}d>0SUX?-lUdAA&{1(^IE7&XTS8^2e2Lr-2u5P~+LG;q^c726s6|4%zdhX< zx-rFXhmM$q8A?VbM7d^Oc9sJ}r*{OML|}Y@6_#AkwrC3DoTx8M2!5cgvmghptgqYi z#n77zWy1|qJptRois9Bml{XYJ@bZSf9y~MZq`|DTEj0VI^?iD(b7FKyGFZPQi9Up( z?Vu0!86>X3IB3*nc*k_marZNaP;OBL?YbGNz%UT&H2+6(R}OaPF#_`AFo2-zv4Vk6 z4gHcI$b}*(wZB+>K`{crD2sU#diqo`f&Z4A8gY*Y5=2{IBFwOW?f!@dd`r><2NDWW zZ0N0qg`q6%BklcI4myH^aNg#T59AnX&QQ&dYpr20M_}T)2)P|UQj0abz-dhep*W6! zGPszy0Dc;#FX6LOX-o%g`I?Z2^mr$XUg}(7@39RPb3vzT<$6vRu|yC42W_6Sz`Om3 zHhqHuSvlnBCBn?3cex+8RI;ru^B}G14dl47hK=O8`B2ZTh`e!2Kzvjd&?v`=KyTR% WpRb_sFyIiZPM}*Ey#MIyqrU(=5S;-4 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.finalize_invoice.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.finalize_invoice.1.json new file mode 100644 index 0000000000000000000000000000000000000000..39f18ce4ce79dee1d7ada256e1356055e3fb3929 GIT binary patch literal 6255 zcmd^D+iu%95Pk1g7{Wfbv25pJ7g+3W>!i0NO;S5)QWOL&Q5Iu~QbfvjQuN<uMrJ7NU}0Xw1!ma4okUzf8hJ>*BsLjJ~zGCLKswP}Na64Rf#b09 z4MGO-Bn;1zrVjX;P&}gv6*9gyI`EkbEJ_XS88wtR3dlTV%ZxUCi8BrWvMZ=8bozwI z`O9wCY}n%hoFX!jUD^ej5vX^xoGe!3<4as*5952@g)j(odvksto($LLgS#mngvVFc zCvlLD)>m)xr_+9w$lURrHcz2zo>rPUw>&Peh6$lXYAr zK9K+wKtM~%TkHzVq_As_0OVoV`9+am$B>{R!isiZKrR%*P*s|dffys^(< zE7`!->%;8k{iJxSuw}H=MfHzpZ0GWqY+>>0jIzYOEmgI(M$T8D_kDhA64ma56*#) zK#4`6(VQ2WeHzDM#cm+nN)H@nZ%-b?ME5OVF)A4qP69wKaIeAr;qY+KcTg$?wp@pm zOB!NI?Ph~fNohKN&wB{?)X+ATnUOKWnBC6v{l$eQjKV<@8X%B96Bq(5@;gdu{ow63| zfCbJv3c}k8u79M2;^&03B(C0|nXdoG27(z|MZ3=}gSEbWi zk8xb?)gF1goVje+jF}3&Cfp6e+U!JH@iQc)7{@u#4N#lJn_;SgRC{dLAN)Kt&jEAj zj$5H6wYw(0)}?SKyU5Nf%xU1{-?KNuk7fUUUFIJigXrUYcH$cGL)iZ&f4U~GChy#X zcC(4MgDt$85B@*w-ye+*`u?!SIMBduq^U*qC~_*n6mCOBll?FD2M#RG2w4rt{J_Z; z=-r(!x%kuBe>`2iAKlF-mrwV&#oPZ)_8;gMk>T{6+z(>E4D&lE{l%!?iPCp*`kuSfQ?Ebqq_@{(F5>p`armj1vU27(9p0lBpKCny<9PM)g*a@M%Qe?b57zD{?D~V7hAF#G1@XW-m z>QU4Ol$8SHU>u-Ycz01xIVcmx*_@(*d^kHi<{t*PN2|4V6!hsWoCpD(VBPG%?W{*9 z5WUv00_?Th^gIP+Y7}C7A%lRHjO_8OM3rX!G(p?mBA!`;iCgO_q9T^VM57w(=#~sI z7>Dq>Q`AF}ydeKd?xBR;ZtQ^|3Cws2%EWZ9uX!vf%GHvFC* zOxUgp;x{LV(Kcc!}MZ+B$%^wZ07!Zf1wL=*|x=uM{qh`PJ5hh%rRVzPNVcXGMH<)*$vv--LtxeGzgt!`p!wH)5+O2dYp~oZET2D=8 zf+PzTZl*T$YNb2dUBk1x4^=cQ0oZ;$cq%s$ys6Fbpt5X5W-;_A90DR68F<*#(SP>+ F+20!K5e@(V literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.list.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.list.1.json new file mode 100644 index 0000000000000000000000000000000000000000..e39960ab7254f5b071e40ef45d6574c984929f3a GIT binary patch literal 83 zcmb>CQczGzNi0cJvQmhS)dBG`5{u(=^NUh}B58>^#i?My{G_bZ Zv?vE8pkHRFpP5&dpP8Imti)Bz1pvYK7f%2H literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.pay.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--Invoice.pay.1.json new file mode 100644 index 0000000000000000000000000000000000000000..74a6e0055d1d8cbd75d40ca7afdfcbe870dfa115 GIT binary patch literal 6290 zcmd^D+iu%95Pk1g7{Wfbv25q!6jZG?MO;S5)ToeQ?(H3ioQbfv5T=d^}c#|l} z#_mheE;bKAA`XXhIXp9*Z_hd%4+lY7FoD$X{K~uxA_n0k49{Yvq7;R%F~u_)Qz64^g9D$rz@o4LgZ9PJALkWFWF(PPh$$IZY}iIg&VtrIrXMF%f@mikN15L7KP*fSiG+jjLx3Kv|SB z8L9S)1Euz&l40Fj3?siSUK1@zBf)JjO^xQGSH@KZwIE|t+Pm0Jm(7P$gaYeg!} zA^tKJrCJ{3G;88Jq+DHA*E9Rg-CYnAfZbI!l}9Ib@!)RZ8o=L@5UV*%egeI()HK(-H&vdN|7P{_nUZ@Njk`hmuVh~Q^ zxmWT|j3MZA%5Y3Kic}HF^HkpBGV!qlr~qbKQQlx(pe%)5a|9p{!_Lo&6+4C<6+@PE z`~q^J5GFs%N~DVgc?{x00Z|icQ*0X>84V$EFO2tF-{157Zjv$)br@N9EHiZMbx~=x zo6WT{^`g2-jdjWI;F&}3Qoyq+Tl);Q;uf}E9j15h#`zo9i0V@PBN~laW(T5B(j+J; zZ5=f7$BWzPjV5lhEd~-u(r}w6z+Tv-@0+SfW=lHz3gjWrkh#_eO8PU)8Of45~+l@ylr7@974Fx|J+QwSEwsy8DMUQtCfUcq=q0t#J)i&iN}NzRc$Y+Fr^8K0+lf*uOY zM6=N{fv~g(6&(o*7^u(-CrBhzDQmD!eI12hV*(u++yx~lNmT#Ta0~2dyVC|9JqVj# z16>0897!8BBm)dXxYJNg;bO~G>GalP9G6uiYrN&f%w@xR%v9ht;kF2?-H8~DHhzY3 z6ysDObOQ+eQ=P=?VJd@Ed2HAp{5&+z1as()s?dBlJ0Y|sMeTt>kZiW%IZEXN))JFvCUND^Oa712LVy@d15^iJ_Ael;ha8j% z<7-CSgQ&yc{%HNE{Vca|A_O#oRj&iZSx-(Nc#T;FxM)w(;}n#tNr-KQ3;-H3vPH2H zWtR2J1Z{hYcxJ8r5>WxmV4zV>b#zCD7)(QW)hOy2NtTm;CHGLkZa4J6j|4_Ms7z;> z6d1XM@T5|6P~9il7qV>7;JFFdsrUPyo=e!K3gWjQh|`Tc(1Qt@oZ=`z%WJ4FKzYcP z=z4Za2Dc9Gp@Wxlq3T^rvsEOwjgjQAQ(X^WP~Dj7mcQAMRZ~%L07|7wgxn0XL?Qcp zDhFZ?hRnzUTIDT6Er3yi^Cc`6EHLv>c))8>YqY`|K)$};atw^QLaSWvD1*0yW^44@ zYVTcoX=+m(2Z1gp<#2-Ly=FgMO6VDhb;MKSnIKMsrJJvoUai!QELuIUA=}-DDlV2V lY(618m7zI2tjz?Wv}{dg5i}|s0wTK^c-=I@?LYhe>~9u57wiB4 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--InvoiceItem.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--InvoiceItem.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..a1d4d901a3a2b218ee6aaa39b95cb890a004a8e9 GIT binary patch literal 1085 zcmZuwO>f&U488YP1U~PO&!*Y2$PODeEFIDnXfX(~%%n_YN!3TPH0XaHB`dMB_GUkl zkB^Vk@v7G=c&&r-#pmAjsNeq-5fQ8fB@ToY!Bs^Do!2$k2#Vm?qFj6PYxn(rTJ492 zCa2;aC_b3>Zzj|6^>~&lD{#W1@u*cSehd;#@0L3hxeA?#5_lXeO<@i=LZAL5 z2&+he$Ob>_<-=h9<&InZGT*od^ZFZZmtPx7R6C6#vZ)|ts+72cT344HYVe#yb4onE zr8He`Ktwl+%z+;2hSY#X9s3{2B(e!q{J9*KVCT7w1Z{xQ8*(FgwBW4C*hXX~)8+ z=Qr<-&v#jti^@h5@=w{DF=OmCm1J}dj67j6kG{;?q7SwLM@1PuUl!X?ua5T*v+{X- zYA~e;fc?>o%|Fa0)5*tlvIH-ks)MqI4!;_+w~W23tO>i!z;lLdi8(8kmq|=>to;*( zCen@298LvM6oV*OA)t}eIV@)aqxwfk7}JtN0-b6IA$TuyCqVI@SOW3WsU=D5>7$?(N|ugAOlI zMI|)Fn;?0=GtN5EKB;am@_~j?+FKus;p4jq&uL;j4}&*^KY>ea<$hq!Pz{zlox}PK Il`nUH0aD6E)Bpeg literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..f809ca4dc7fecbaf682acfd22ac341874eb351f1 GIT binary patch literal 930 zcmaJ=%Wm5+5WM><44r#Ogv54xD;l>*QKWX!1O)2yskKjuZ2hm14;N7Bpr#o~H?HM_d*AEHO$;8HmjeP*-Yc3~!#`cGtq~Qt6*gfOFPv5Br<7LH_}Z}NOn#vb<( z7nM<$rqJK;ezbtRCZ3$m=^8?7-0wjXIqcvurYVHR0T7;+F1qAnK~EcB*qig9)D%az0ey8BzhqK7?BS&#Dpz;WDJ1g24`6GbdyDxx<*Ofr@wJ>n7jZF C7AtQ6 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.list.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.list.1.json new file mode 100644 index 0000000000000000000000000000000000000000..705ebc03b2875e2cf222c6c8f869dfb26a423db6 GIT binary patch literal 1116 zcmaJ=O>f&U487-97&;H=TqMi3W6_<~qF?KF7zRO+X-BCnx%!Bk2KnzJ71vIjtrx=} zsmI6n$n7M{SRsO7U$fu%pJm(h#i(c+t)vLb8cdp~^@lzcgRLKnTzt*!{a^csUoTfP#|zV|M+<}pMIK7hh+3P2smmhqfe;K z{rc*0UbN?%0i*ygoofCiMX7De3*|sk_Cx?ho!=j6XrqNEAwq08IA@90k?g1=V1)<) z>V~vB&Z;%kwg8NmLVM_^tc5{`DSlLsmWj^!?XE92@PZxEFyjYyvBD`aO7kE`Wdb@k z(6@#!U@3ITZ8?5>yeIExxwNKKRdoBcDUheqC(0fpa+}z@pcoeyOJ#1b$^4pBhq2h08!pwUTTmi zckll6u6SiC4Lo|_|8dg?5h7tRqKNzGN4Gin6uqbtWm}dwfcJFasU;CkP1#a-UfVQT da53!?8~oSG?|o;{Y3g~l&d&~)!n4V4@)z{BO1l66 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.retrieve.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--SetupIntent.retrieve.1.json new file mode 100644 index 0000000000000000000000000000000000000000..f809ca4dc7fecbaf682acfd22ac341874eb351f1 GIT binary patch literal 930 zcmaJ=%Wm5+5WM><44r#Ogv54xD;l>*QKWX!1O)2yskKjuZ2hm14;N7Bpr#o~H?HM_d*AEHO$;8HmjeP*-Yc3~!#`cGtq~Qt6*gfOFPv5Br<7LH_}Z}NOn#vb<( z7nM<$rqJK;ezbtRCZ3$m=^8?7-0wjXIqcvurYVHR0T7;+F1qAnK~EcB*qig9)D%az0ey8BzhqK7?BS&#Dpz;WDJ1g24`6GbdyDxx<*Ofr@wJ>n7jZF C7AtQ6 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--checkout.Session.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_active_legacy_customer--checkout.Session.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..62005867f06364d313b21052dabb42ebcbbfc797 GIT binary patch literal 2412 zcmb_dTT?1I5PtVpShKbJw2A`?a;mJei;73|cmcU?ZKXn{2O^nFm}Eq>{O{YDn+&o~ zyH5DkP|u4%YphlXU|CO21k0F5m?80HR5B1Gj%>}&+!*z(Qqds%d8iErIW(Y+ zhUf(%G$%iG=D~^Ipa-tsfP>>^@R)VJwL-=q+xrSmPjx&p~*06o37lMM}&DUTt03a8r&U zO9H-Gt)1kYE44ASjrQ#6jvL6N>+dX#+O^!TrMjJOJ^)P%dnnc}FS7%H=|UPBz(`1_I0|3)-5E7f z5V?E_aTFV9IGJfDtb)HlfKr0~#j-mhWK@(w1PHoE4Mn#M^$4#SNG6XHi;)58syOK) zA)aQfYz&9d$Rn}B>);enWjP%UCRSAq`bBJv8%c(cRQ`Qi27|%y zwEL2aT55HlbNa}i2Zx7_M-6qp9sa_<4-Y?+pSVhW1B$?V#1%C>l(<92Lj1Xk3lYvp zq{1MyVZuTWbZ%1+#?lZS4@_vN*c09zi%l5d&5RiOjtA4iur!c#Ai%>#p9&3WNf;5F z4!GcEzI79Zw4o+W3tTqwl^%8Ql;CnmsOKrr8oLn!*s^a&!6fDiZ(QwXR5B1GR<7a(+~;xMlpyFIQpUv#Jk; zI2tPILE(EqWlRMToPpFp@LxKF0HnD{dj7+3P#12dAi*(66!@S3Ya`s^v%wf!Y|+3J zm|QT#YvjJ=O*}TUDxfAI!>yd0pH)uFr>AR}Vr8q@ro&;&b<8UfBE3UjEY>Ih;&Tw5 zrR~>0nXF03z`LzCBaDS+QEdU=?!+o!#G@!f@)iVk$DWfo34tb|Pb`(l2%(HYWUL03 zNpgZ(ln)By*sUhdgQ1BU(}z~Yn-%97-jX(P(vXy$bCxC|9vI4ng(BPWLa+H&Ai&M` z@(~RLn7=+^!J}gq2CJ*FUrB?sffQU^jYgr|v5aGgb^t-N16mv72~AcTd%+-SRT~OQ zJO(tOHn9~^x$K@~M3gAmVVc;PBFt?~{=S#vW~cdFo_vfS2Jv0BQNhQK>f9<R0uwW0BsJ>Z5WRuLPkX{U4Vow zy*0y_!W0G)B_ZoEDrzyR&U%=U12d0oK8I1|kvPIM;N)Ok*5YU|akTC(9K4}*C8tNg z#$jxZHF}zzv6N*eqH}8|giEty>eDD%;&>aRG=|-cLT}R;94cmXuJhNdHcOum%xib*LJ3aaJQzxa>T}6?soU+&Og%M;_weU}}6z}G3@jx@h6Ebr}$7rYc=>G4o z>GD-Cz|?AeQFY#|*lHS+0<0MqSOL{n`0w8Ko6kMhE7l?!G)6DQNUv>+N=lau(H#4R>&THuNu(U8Q#1kvBt6-q3El5&UeOeLRkZ_ww4SHsxcZ zcT(;415s>sA7AS8vFw$+3BBnLz0%{*o7)Vm>&<$XV@W%Wb1G}^t?s+qTjuU-TC7LC zn<&7SXhv_fyl;9#T5RC%S{qLUy<2xeJ9vMoC!b3GDX kW#wp8oP75=YqJwvn}joGiF;w{t}w@su!L>x9DE)83oR~AO#lD@ literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..3d6b9bc66c1463db80771fd35472d867f52ee33e GIT binary patch literal 809 zcma))$&M2-5Qgu0im1CT zUsYe#!(zD{NU4OJhgVBqt$o%^JF?^@*mT?9GJy&dzsKA8J34Ag@bdmLSwT~^MaX~n za;T~6pGzuO<9}87!djYaMlYa{Wiqjt;MqPXxNw7sT(r26!7bNP;f3DNYSf$Im|?OE zwac8v;mFvQzb9u=?tWKmV#`0Km^RrUYZf0reg5$J{kt!3-|(2@$?FfnNQjuA&D0`$ z)ZgxmQjGuJI6g2#rpSUNIH3)!y2Q(_nNg&B$0G}evJb6`xn+*gArz!*8^cyeTt zWR~TEk9~S;4va{()jdIEby8I5skOvG1tKFIkVG!6%zwb;uC6m{J+ix816I$so0qHY zW?b{1UT?9}a;q_%oAl&bgY&F|$5ezlVa{k*(2ry6BZb`$$aWPcpv?B#Q>;>$e`8_a;Whc3HL1Brw6nuI-yxk1fc2ye#qa6uo#{`~my2_mcns literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.modify.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.modify.1.json new file mode 100644 index 0000000000000000000000000000000000000000..53d023ce515c9999a501353f08f189bc562c616e GIT binary patch literal 834 zcma))OK%e~5XbNN6w#hZ)s;#@IDwQNK$MEd0fCU^*nc-Je$|g?OV#hr*vX~~2h=^S z=kcGJ-^{~oKJU1c5h-=A=dKv@qMEkca3?^f^Y#`IJVVmEKOet?qr?a&?x)ETiWifa z_>V975}W?1q=eD#uE1r|Qrsl80uo6?9kTY0?45-5XBfB*24}+C`BF%{R4cyd)v7yW z=p=k;GAD6Zu1(F~achv@{4Pd^ntw>qb+S&B#6DhszIyxN-S^84joBZ)Ztt}K3lT~W zHL^wh>rTj7yPL}Kffy1+63pH*rD5b0FS$lWf!|vinOWqWZ(Rh-`fK~uU2QHu@#yb1 zx9QvaFZ;CeH?18?R^Dessx!_=P+cZ zkNgwrd9li(Ioc#f}kpJxf literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.1.json new file mode 100644 index 0000000000000000000000000000000000000000..82a47be188ba7c104a8899df9e832fd64b1f2180 GIT binary patch literal 1963 zcmah~O-~y!5WVv&kk18?2uSIvmEh2-6t%QcRfH_Zo=ps1+t}Wa6!G6XV`n!G4eg$i z`JOj3&rf^%`%EYmAV&6X-*(2lA<gq%P@ltKHXokclQ(7Hodiq;!Al&;-Bl?qOpi8vTF z6IMKQl&;HRhTzZ&ZODHvS_A3*@6KpX{>4R8XH0gHf4Ta0`Qh`&Ul-@t=4h?83#TP; zAE41ovdmU5)e%zCc1AcpA%=(|228HyjRvD?cv01335N+Zw)0hw_H z32Wa(&5<`F>+MTIo$5)Dj6Rm}2s>4n14fv)hpKp>4=KjG6yC)o43|#Pe*EQ!%G4_| z3>5L1CR0Av&tlt?S<&`xm9d{Y+l$vBhFDCBP(wzb1!40n7dnbOy>(JK2YJ5@BATyZ zZFaTPn^m2^ZY&paP%@Fw8tyc|9= zBBo<Eg*T>Iu$8PdH1T%{RznU#BDL&xm4vp!bWmQ!Gy7K7t(!U6)1 zDMR#sddJ~!dv;yHu6_vM;P`Cv_TX$XI>lej=^0ELdDZ}(VkzauNuh|ed6 MxJUoI-_Lu00I=&9umAu6 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.2.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.2.json new file mode 100644 index 0000000000000000000000000000000000000000..82a47be188ba7c104a8899df9e832fd64b1f2180 GIT binary patch literal 1963 zcmah~O-~y!5WVv&kk18?2uSIvmEh2-6t%QcRfH_Zo=ps1+t}Wa6!G6XV`n!G4eg$i z`JOj3&rf^%`%EYmAV&6X-*(2lA<gq%P@ltKHXokclQ(7Hodiq;!Al&;-Bl?qOpi8vTF z6IMKQl&;HRhTzZ&ZODHvS_A3*@6KpX{>4R8XH0gHf4Ta0`Qh`&Ul-@t=4h?83#TP; zAE41ovdmU5)e%zCc1AcpA%=(|228HyjRvD?cv01335N+Zw)0hw_H z32Wa(&5<`F>+MTIo$5)Dj6Rm}2s>4n14fv)hpKp>4=KjG6yC)o43|#Pe*EQ!%G4_| z3>5L1CR0Av&tlt?S<&`xm9d{Y+l$vBhFDCBP(wzb1!40n7dnbOy>(JK2YJ5@BATyZ zZFaTPn^m2^ZY&paP%@Fw8tyc|9= zBBo<Eg*T>Iu$8PdH1T%{RznU#BDL&xm4vp!bWmQ!Gy7K7t(!U6)1 zDMR#sddJ~!dv;yHu6_vM;P`Cv_TX$XI>lej=^0ELdDZ}(VkzauNuh|ed6 MxJUoI-_Lu00I=&9umAu6 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.3.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.3.json new file mode 100644 index 0000000000000000000000000000000000000000..82a47be188ba7c104a8899df9e832fd64b1f2180 GIT binary patch literal 1963 zcmah~O-~y!5WVv&kk18?2uSIvmEh2-6t%QcRfH_Zo=ps1+t}Wa6!G6XV`n!G4eg$i z`JOj3&rf^%`%EYmAV&6X-*(2lA<gq%P@ltKHXokclQ(7Hodiq;!Al&;-Bl?qOpi8vTF z6IMKQl&;HRhTzZ&ZODHvS_A3*@6KpX{>4R8XH0gHf4Ta0`Qh`&Ul-@t=4h?83#TP; zAE41ovdmU5)e%zCc1AcpA%=(|228HyjRvD?cv01335N+Zw)0hw_H z32Wa(&5<`F>+MTIo$5)Dj6Rm}2s>4n14fv)hpKp>4=KjG6yC)o43|#Pe*EQ!%G4_| z3>5L1CR0Av&tlt?S<&`xm9d{Y+l$vBhFDCBP(wzb1!40n7dnbOy>(JK2YJ5@BATyZ zZFaTPn^m2^ZY&paP%@Fw8tyc|9= zBBo<Eg*T>Iu$8PdH1T%{RznU#BDL&xm4vp!bWmQ!Gy7K7t(!U6)1 zDMR#sddJ~!dv;yHu6_vM;P`Cv_TX$XI>lej=^0ELdDZ}(VkzauNuh|ed6 MxJUoI-_Lu00I=&9umAu6 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.4.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.4.json new file mode 100644 index 0000000000000000000000000000000000000000..82a47be188ba7c104a8899df9e832fd64b1f2180 GIT binary patch literal 1963 zcmah~O-~y!5WVv&kk18?2uSIvmEh2-6t%QcRfH_Zo=ps1+t}Wa6!G6XV`n!G4eg$i z`JOj3&rf^%`%EYmAV&6X-*(2lA<gq%P@ltKHXokclQ(7Hodiq;!Al&;-Bl?qOpi8vTF z6IMKQl&;HRhTzZ&ZODHvS_A3*@6KpX{>4R8XH0gHf4Ta0`Qh`&Ul-@t=4h?83#TP; zAE41ovdmU5)e%zCc1AcpA%=(|228HyjRvD?cv01335N+Zw)0hw_H z32Wa(&5<`F>+MTIo$5)Dj6Rm}2s>4n14fv)hpKp>4=KjG6yC)o43|#Pe*EQ!%G4_| z3>5L1CR0Av&tlt?S<&`xm9d{Y+l$vBhFDCBP(wzb1!40n7dnbOy>(JK2YJ5@BATyZ zZFaTPn^m2^ZY&paP%@Fw8tyc|9= zBBo<Eg*T>Iu$8PdH1T%{RznU#BDL&xm4vp!bWmQ!Gy7K7t(!U6)1 zDMR#sddJ~!dv;yHu6_vM;P`Cv_TX$XI>lej=^0ELdDZ}(VkzauNuh|ed6 MxJUoI-_Lu00I=&9umAu6 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.5.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Customer.retrieve.5.json new file mode 100644 index 0000000000000000000000000000000000000000..6e3e5fea1014fc94d0e51b5cb768a8ef788110a2 GIT binary patch literal 1965 zcmah~OHUgy5We#(BA*K)Q6NoEtptZwrKqKqsv=}L_H1JC+Q#;Vq=^6C8Sf*TbZPgL z%zM6>`TTq|8Zn_%fEd}kk*$n*L!yN+!b(8VY5p$*hy)7%k5AjLR#YK?m0Q%XDk_$R z3JOt~#O1$~(N!U5=#nZh+CElb6Gkh9iO@ugGH9Q)vy??a=}urHN^jsqx^i?b6`U0_ zaXc<&O@1Avt8$nwIFv#g@?VM4KzjeXGTM`W?V_nSCacK5Tz|Xz@cHAf%L{CD+-U9E zX$jm1DD;Lbv(=$GLQ2{$3CU+f5pl$T$(6j&U{oJqRJ9;^u`RJ>UP4+qs-kwKA!vhu zEV+V&weOdd7a`Y%6X;bg`Hep${2>7KF{STZH8KE&3c``ZYk|Y+7NdlO9wg z-+~AvKAoKPGzIPv1Rr!hih6t79dEb1!KtXMLTik{@amOL{nD0TArKSrBH-y94xbqj z)0AANlj)@IXdykhFo6FWS6eI$P58EhiArI4fIZROt{>FWDFSj2&6@V8Gweg0Rsn!3 z9s#KccooHx675|~th{%jCbtwS7!33z43frvsxA@XG{}y*jhX_0hVmM}WV@Pye96bx z<#&5^arspQ_jqw1e}1}I$C+Dpa5AIUNP_wJI-1NekVAwLNl=fw^4#JcBo&X#xW_du zpe$`Y;ZmPd2B7g~g>xy_zPnY1gs%WsX~|t?<(AmcF}n@c$NIJ96d0$(;5eMHhQMRW z5dELtarpb5RaIlxe+b}sI-k8gp3lbT_^UXd!=jM$0_YU$A`jSxS=c158={Xu?@)f8 z@`14(hTS{~J=SNZTF~w#H%hU}zCNuMO_s!l!v;#9=VOWLvTcHh?xhoFGqg>a84In literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.1.json new file mode 100644 index 0000000000000000000000000000000000000000..6ec01fdc81da9bbd3df253bf78abe4aa7a577e9d GIT binary patch literal 1709 zcma)7T~FIE6n*DcRDNEdDKu^Ov`L_8(-`|g+J+{}v2Uosj)U!FWr+X2Ym=l6Z6|m@ zk$peTJ?HrL;b1f(f_X+>kFM~0G%rcrs4L^JFq3ueuO!fq4*k zosPS|{<5vw)x(M=zX9$sdVLo92w}lFJT7acy7T~r-W173{>=l|;)6M1bdl>B~I zQ2_<3m8UO>ai+Gh{}wa>N|tvulwqENDF*|D0vxxp@-2A+v^j(o)0KilZuBVQ0;a`` zC26tdGeQ^AaZ|^#TTMYTsjweeGOfVB`CBVlg?hatv4jkY5MDd_>Ei48+mG*mot>gQ z>9eS^F_HtVEEIATGGg?;FbCet@;d0WDIcnYjl9vckf6ja88M{eykhqnDWe+v(nOS% zrs;+LUY?(xePPzzo!+<~AHFqiX08Wtu}EQz2aElm^MZG%wg8LxsEMR^I9jI$S{?@i zDcPVVB6w?CJ%q=$>>H`InB;*vu=q5n^8pS{_fmBu(#;BW{Up|=A0Rnd%;w2rmS*@> zWDCd(z9@j~9j0VD4Dy^8Qo_np+3M^d*fqL29Z=Cf%T`I`cyM1WO}Vpta1P)@6I2<_ z6a><*eh+fpQdSkpvJ0JOD+(*nRd_EPdN%_w#Q^Nf1OM4SJnGlF8cAvKKHFxB!MRE zmW~iop}~W_|3JPp<~GdO??iMzO6!K3wZ(&1`?mnbApK})T$S_|!n!1kF>#!wCrLKV z7s<)=c#^PuUL?nY@p(2KPk1IeC$5M0_f@b+@1VoF!Uu#u4Uw=wR`dlfE=RSoA=cYE b?#zvumBb;!$fUM$&mA@CQ6$2VgU5q^0`tK- literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.2.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.2.json new file mode 100644 index 0000000000000000000000000000000000000000..a5e7f51eae69a7edef726eb7bd902769bcf342e8 GIT binary patch literal 40358 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 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.4.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.4.json new file mode 100644 index 0000000000000000000000000000000000000000..2cb9edc25f304968a7c2a50f4f654d538c835820 GIT binary patch literal 8531 zcmeHM>u=jO5dYr4!XWmsNo*(SngYYNHc8j5O_8+g`anU@5?!;FC`F{4N74U%cYMgA zMA_|!ZD_H4NF4Kc4_&geYGQZ(lRtmb}l@f)7MKT>v$2;Tu zJJTP@T~Cr!oN1oI@?`9PnnlOe^8=2>>?2P!P_MtkbCRT}rKaY0b%SU9`Jy=kuhfu8 zmUCSHgUPgFqo-`9?v9?wWH(N(*)6~-Q%w?luXwCD|=?(}cp%`}67)Vz&4;O1) zP?oNkOi%}NmZ?5L4tGo_=n*K|MgyC0$!3{h-P;PQnP4-K3619L$_L9zGhKVbI5eSM zJ_lC>4jHJA0?L#HVa{aDve4Sef>j?3ERqF1dw%ik*QZb3o*a8Tn!l6ImLkgliJ*R( zbG<0g%Ea=a4D@2eW?6RA*|q`h231L2Ra_0IzEj>*Ij@XB1KR-r6i z2^=k0Fs-=qstnZU`BB7ahFljc&$#~Ow$4Pkn-qEMg1n;6&AN6Y4a0I#NYwZ+MGN}F zMChOV8Uc)#lgKkJz}k`Dy$>i-K4*2NX~}MK4l$&$X75l>sfxNXfFGp5!zu`CsMFqY zDyc*{3I*}qQ_#AyFw(kI5BB!l#$BaBDI5W{C-xwm>kzu*@njFw8GJio z`{~KWtJ6i2A6;KOE^nWn9-Y6*7mw19Z?4ZL7Z>M$Ef3F5A0D5-&Z^nT={>ewUcJrF z&R+cXK@!MCazMov2-U`>zmRGKWdPV z!+7>(7 zk(Im>Cbjpm1!{$u3Ac|2RLj8DDODJETh3#tViznS4oAGk->b6GHhL{)qWv%&;8MOU zQptkbdKe_7wG=vnMxftRrF%*7FXZ>(^2HOnBETFsT$nc07MmqX{52?n%WTI95*5X= zF6olT>r8tMvIS4TM~Y-QQ1vvTtWjsgiR-$oinKO84#AJ1%we)=7*`w>Z~KI96m5vG zDw**GTL}}8Ni9{$69Ls^SZ1y_2B^~D}M)BIffEUxLd0?B>JYZ@_?k@cUIm%j5JikIT^^m*^GQYk^#T1 zlpN9i=b$ioABqTbKCJwzfgUS})T-Mw5M5}N*=al!LDLRvHv-yQP5k&r!H2NU^}`h$ z{9uQs+Smz7iH-3j$T)$#K?{`DrhO(|KL*|jmx@yu8nX}3DM>SCZ05V2{OifF`XZD2 z-BoPqpysvH*~xf+SR~1>*8@prNARwiZ0nN9I-gl~ZfLy&dJBbUS;|)i0SlO4V^5IH zX@T>qZe>Z_14eK5kKfax*02qRhNcnjmCvx*&QyiePId4g^kwsPzg2Oqp|9ze+)%sO z!7bQkVDt&W$g{CiU0RsItFO%4is;i~r{XDF&Q8zl#2{25vDELz?0+k){ordLV!oi4-Ow=9wxi+x-9y`wA#~ z0pjsCn%Hq@xY_9Z1E)&d;>8F&EZ~s2rEGZ4Y5ft6v7?86q-*j5XCCx~F*O<1AR+%VGz_2#Tv z0#Pj!_gn>YLc66aq_G9K^k#lA}W)5>aH~8$Dm|XGM z0_ti73dbTGh810NH}>>y*SH+9V>rIjbn-lZDPJ9*oU^L9JpKqy|9ieTeRkgDyTO#) zN=AHz8NmY|Vx)b4@>c|nHqnk${IZ6p0{CtnKiqv_DNHEs><2XPG6+!*-c#Lxk4%q_ z#`net)1BGT{=v?{bauFNlpM`=CgT}9Iy}60FiD#_buGM~TDcUu>(h#=lZ10{2^+Lf bYwuB}X!+EVJ`=8JBCTS`s00d~&v*U?KsHKC literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.5.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Event.list.5.json new file mode 100644 index 0000000000000000000000000000000000000000..6d922067afeefefcba3c644d2dd8510c1d8984a9 GIT binary patch literal 81 zcmb>CQczGzNi0cJvQmhS)dBG`5{u(=^NUh}B58>^#i?My{G_bZ Xv?vE8pkHRFpIVlhS5mCRRm%kck@XgY literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..4f060c1df9f775f4a19d488eab0c301410d52e96 GIT binary patch literal 5893 zcmeHLOOG5i5WeSEj4X~JJG%=g;sgi|5dkC+mqd}}>GtfHb-O!ldy`F+|ISx_wcRrV zdqFG`b6Bmq%2nlhe6FgGPc|DSx^DEw@$h%PXJ2pF@4vC9HOYuU()S;Q>1VNdDR%bh z=7s5=wQNqj=c>2hG+yf{VF>-wD&vC0fD&>YfzPB@=EhV!3-N^ol2lh0Dva5Xjvt^zF+RuYUL*LNDvXa)tx@S=xNlq>TiFMj_WEHafjrm%a!BO z^psdTp;I~+%6=SOh~@HSM%b0P8&!Le!)TE`nZo@{u`8!SNi${IbjWE|5+ljwQ@?Lc zTkC@rshHgTME7D=>OCv`*~>%C6u6r4^i?RKRrt zCtru^-J~iGm0WP+^DEd-2@roQ5|BHc_Q9VK0M=}$$|*_cWgT($+12*hc6%|5#vL|B zzT4#5+LRoq)aP#r*p^ht!c&eA4&i16u~y`xb18KCuS1ulEQ#^A!ER4*1?;7mD)k^m z8d*Gy{i&Ov{6q@h$AFwk)42Ns*-tts)=^>Qze&z2U}VgIbO@z^6D=Y}QpD+*1TN%~ z4YlG4Wd*LBg-P->#|moHiBO(kUWEtBGW^@_AmhUei@7(-1$-(-b!TvVVK{;36*1sC zi9LQH3s=mEaD#_L3)Y{H7ZJzt)=&Iaw(nq6$IiqP=ZxxZSMXmb>++DM$GzMjfSnyg5x9L9s$|2NV9`pc>@ zJ&*lhdo;-Zd`YoK2K|+nK7|MDO*9pQDZS|Pst0Y5#^&aXxzPz7*D0u}t0W?hN$le8 z@*;t!#XoI7QcX!0aY}&|;R!lfR}BINdz;p=_o4k~InN=Zlg3JpWrDatXK6xgC(8w)^E*OLVpv~Lho$#? zY=*+LCn}8zqYr%a4tyA8L*HH#<7}>si#N>u1dc_DmCm8dTN)Xbr*?Q|HA%y)d@K(8 zd<=7X?sHOfS3K0eWsVZUICk(;a|TN^tb7BCCmEi2mm?P$qSIO5KuxIC;|Iz4u`b&!taMsPga!zS=tH|2}cfUT5y j>ydzksO&K)r;R|d?48^l(0Eulgt`+kgB$nq@adW373{2WO--2S+gF`V0&^y{P&*Y+t{66^XK#F&SXMZRkgjc)cw`hYMQvcG>ZSA&8YjE%@%*>@vswPNW1@!7#W&3xCX`U;TlSlk=sLd?&UBp= z6|y-2QmeOVQo0 z+GZppl;PlZFo1TeR+RyXD_O~G9>aR&S6B$BT%nB8u%V#ey>}}$U$S0W+Og|~L(imW zC*g62X?yMJWn%?}YKT9^B8fGX7TvgxYhhed!p1>L_?DmUIjuopzKt)JSP&Ob{OH^$ z&s^15UJE8eQTujUwykyPOxl(jGB4CcD@tEht$_lHE40@>eb#p7@pKvv+&31S;+V*( zm;%h$vP7UrrVxhW>zwV^2d8fiS5@=q>hzcH=IHRz$=hc2bN%7%)ye$y^yK&TgX6;| zPfz}kdU0_09b2z2&zj@om(QMG9z9(@c=76B@A%b=%h}#+wmyCR=IrgW;~&iTtn;aL zfJ1~DTN2wKlx^^UcJ&gXM^?cxNPFRw56r*m+7v9z-7}_l84OrtuRAOYVz^wA1TT_7 z(3e6nDQ+BiQm%E2eVh_6u|O>V(1kD~bOmH`wHs7G|G&x{2XuFhDJd`&GUvK-|Wrq&t}u6RdzK|{BjbZX_8t9+czE#EfnsB zp_4}I2;<;c0{qeP#<@^i@~>+vNEw>yi`7`3paQNg%&8E!QX~Ncnzr8N37{7X>HFj^ zo}j5+d;su39hhscFpFQuwQyIAuYhm}Fa=JOK;xJEHK$7)O6kZIcYsGABvxUN+-Z+K zg*xWY4K|O`1Ips?XlTyL?SJ4{nn! zuzq*GaItOIeMi^4q!C^n*^y5;r$n_L-JZ$BA=^ICL#E+ir`x*swSfPYK6tQ9f;7jD z_57?%Aqc`-Z^2jWLO7ryy)qrI1h5KEGm;c5xHdFY?4}salv%dAp&xsu?3ho5Kt$Ms z8=YDKHBk6erfh^dU~0BbYp}5a;sw3nHX?}nUs1P!o{@!)>JcO8*Fcs9o`bMaR5Fxd z4LuFFDKs{&qSIT|WG>GKkBI3PIU1HRbAk7Oy8&36Ok@zsJ>bFV`0E@5B&5-Wf6=w3Wkfo90<9VT+$Zb zuaOauFmOv0#eJY{Z($!y0~~|T7yXb!C>wn3zVPG#dH#su)&db6xDJVP5eVLBRsr_L zV}6`MTQ>=bR45d{Xb)1nxFcoRzf9=1rw9paFmM~aL|nu=7-*!aj%Q?4!8F7S+}_Vf zI?Zpj?_&?A^VkDEav1T@l+KhD7`fH(q;exq&y(T{83`Kj6{ww(?-M_lh@=YQch0F1 zH>i-n1P!M+uAs3EeFG#VTcS(ilnlBK`Y477E`WD~*yq49mgdk6LY!vdpur>Fm`SG{emWAZC2lZN$+lYOnc9%+h3;g# s0cLkAbtsGlIDR}3mzyO#sl)6bS$4@6E1)O_0)jjS-Zew??|i=VClbW#00000 literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.list.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.list.1.json new file mode 100644 index 0000000000000000000000000000000000000000..e39960ab7254f5b071e40ef45d6574c984929f3a GIT binary patch literal 83 zcmb>CQczGzNi0cJvQmhS)dBG`5{u(=^NUh}B58>^#i?My{G_bZ Zv?vE8pkHRFpP5&dpP8Imti)Bz1pvYK7f%2H literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.pay.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--Invoice.pay.1.json new file mode 100644 index 0000000000000000000000000000000000000000..ab0d215f2787eafe68b80562643f0a81d7c379bf GIT binary patch literal 6289 zcmeHLTW=IM6n^JdtVVr=>}~=TAXROFq(u#>66ggGvb;0itg|zoVeH8b@!$I$-)20! zTX^V&O3g!*jE|4c&ENTaKHQm1GM?vkrwp^d+nen1B>UxMc6Yd>cqQojPh1r(pB(dr zzB_rY^1W2d@M|Uu4N29NrPEMZ-9<n=S+l`#;(vAz8vr)(WnzXIaHn$4eLO ze8t;yn~r?NPJTXn@%{1hH;2z=!=Jeqt;AYY9B8cR z^Qg=kly_|_RBmgd(}kDrG&HcK6lI$8+%AaL9@gp9#$cJ3L1c?o=nw*b8YvbnqdF)_ z%ZgW}FyGyFrEK={x*8e)IbWV3u30dEHLF@tq&8OurL?(7bu6x_K>LVx?t zt`uU)yV9_R-&6v3DMmXg4-&fWT3bjPE2OkV{3#Yut8ssczhzw;o6czSvPI^lx~ygD%c|BWps>Qa)}_yw zMn9fT{f0el;FO?5PURHvW6~0t&E`{tA^AGz2gTvpuScuAdUSpELvwq4^yu_;wR&1y zyuLo2pPillwtjGO^yJy;?`69?S_?#(RAWoRJ@94gJz!0-MD((icMNGyoN|HrH(i^;!l8RwcQ%6_ zq|8lY5k!k}nMK?wIfA~FikI@%f+`bjThl#`i7%-@4Up+l>JjP!vTW`8BT#u9JKtJV zoOpD!2pQq{9&%wTj6PE*a?L_q=VfOL(E;mNY#SPR4TTt9nCz?l+1_k6t!iaf6D6)D z0U0LYy4dW8&Hh^Xe$n5g(K_KfJR86}31mU##y($L<)7Dv z?b;%#-6S4Sg{z5%Joub!LGSK-(PCY%yN0br$}fDNcH|TLl+4$o?io$&vu({xW7M>D z(YacnKT{tZSVl#ypny5vmZlIEP}f_C6~B}gXtGY}M&uH#!qJSV#YoX=<|}qnP0N*D z)@{Y!cU+k<(ei-^u!oM$j6@Ce)eBS7l#Ng)U1tSstiZ@{7px$GsQXFk7U&t+>8Ktv zgw3r%mjTZq*hnfFWmw=&qnqMl(<(W=^_YRnmdJWz6Ucp9b{q~2qX{_yi_|4i_Q?&u05soi%n8#RSD#3Cn8xR&`K{}I0b zY4qP88u53ce{#@nG|6_LMb_iN|L8w{47pMTM*L;yKg<^N?#>r2eo^Q@vi!e^{s#{R z#B?|IL+pz|{)Yo3{<5Hd5T%c{fxUC4;$2T2y&ZAT1Zi|2XPK!DFWr<1O=91x@K4O? zPW=*WfAf?-I*&%rE}rO0u< z;_*F*QMb+J55rfYw%{UeS~8y<^sg}`uKR%kccUrK0?7AFb=AUc^FyF}@Y5MJh+ya_ zb_?b}#I?#LtLgn37(wO-adGBF|FgO?5W_IQ68K18AnaxwQW@`R^NANn+@ggs;DJ5W zL2q`06U1&bs(^>#BsWcAwH<^6Cgk%!k|Bl?Bw~`?!-Q>niDZ6l^C4mb)?l6yhdPds zF@<4>?y0>SkuKqVk*P&3nH@_TH;;p2ME!!E3sICr)UI($P6Ag<8a^k Gc;^qL0PtD> literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--InvoiceItem.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--InvoiceItem.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..12dc4667959cebc2a7ca195949fdb35a7c0ffacf GIT binary patch literal 1085 zcmaJ=%WfMn47}$n44r#eH)v4wmLNG4Xd9r%6osJG(g|y=r0QWbF!JvqCE3;{Mt$;* zhQr}d+Fz_zLd`DQB)+V!E{EX*BRYowRzDLaa-2j1V{$VD26c||$NkUm*WbQA+}#et zu&$g*C7|;)A@x@(Cx|+rPv|TcKV*Y`b)zEcR)tZs1vMJ3-Y65H7Pf;(=&#=e!igmi zm+cSjhT&tCM7wjSSvp(bRv^PI7UEnBN~JDQAYg)Gam}_A+yC) zToFSDpxn=TIk!o!$h^xUB9H4oxT5o#a&haA5} zxQ=<+M2(5pLu4P^l#&@up58Uw$f2j2w2joXEqh3@?`m;&fkv x3#z@FI?g7z9lG-@E?UL!u5Zp}m=sSxq7q3{AG@1Ya literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--InvoiceItem.create.2.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--InvoiceItem.create.2.json new file mode 100644 index 0000000000000000000000000000000000000000..242630a6319298eefeae31571eafc3ff2788ac73 GIT binary patch literal 1116 zcmaJ=%dXTg4Bg+as4A8`I(Nwq2^L5^B$gl)rK#tRnLJA33|x)wzhftzP6{KsYV6~a z<74N1*LA&iA$#gycQ5XTVR$YflVb#L9y!?OH1$g`QE(6?XmV1YK7aZ6=EM81@7{9R zu3{!l!1*0V>Q^c!NG9S;7`zleyB}T-!z&j&9Xb!cI%X@(-Gs>$F|}+t>Cp=5UfTql zMB?bT?5v@i4pprR& zlVs02RQ5+~Bw+1W~We|l#t!r^n#rf)TQTKnN8GFlD35RgZvpRw-S3~`e zAttqKN+XA&_GurYQ$Mrzg!ETq^f;I41P_Xkn_2i|Qdg7Lx5pZrjG9=5(^ke? zApLb`Vu*TqQtMvyjfP#>+my%l@m+-X(lOUV^M?39%Gh9zjXA9v4zD`f_zjg$cYgp5 Co;|q$ literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..355ce9f41beab223f02b9c210ef0facef5a61e33 GIT binary patch literal 930 zcmaJ=O>f&U487-91U~OjUlwe)77q5+EbHn4!-_#*Bsx|iOR7HF8A1O0C^^~ebeIo@ zMLj+~KGKKTd|rUHN^%I&=;G~MN2Olna15rSC}$S>4s~E1hSmr_2650FmCDJ?A^0f= zS287fj=Bxs7gE7C~aAns|JHH+en@aiD#qMdjeq6owO> zPZqGhz_ZgCt}#3tw;wf;!ww%~nnGwDA`@xpqDwv&aNhVL*E`aCu<=4z=q)B$4MYrQRxJ(IflEh^F#DDSH3_ literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.list.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.list.1.json new file mode 100644 index 0000000000000000000000000000000000000000..571dbff45f8251d6e7786faa5a6e94919f673b2a GIT binary patch literal 1116 zcmaJ=+m6#P5Pk1gM1DqEDgi>gb=7?Ubt#u+#e$GEbta7$$4-6eQdRwTX56%CQ`kI2 z)?Ck=GqW8Pg(x9{cvt+ScTsHfpRCZfMk|QgS#sKB%!{KdMc0r=$rd&Z+9(^0wJXCg zP=QrwOfDilLb$A@jOGFXmB&c=B4E^VJa6voYS}6lf6i+*YL^KhD40PG;|a z+)OES+!rY^D6iXpQBfK9Bunj4vG;-i&7Gegsc&N-FcC4e61{f}>x_2d5h(&<#HMAg z&b@k#jVqDt6_|j>DI2h)Fx$`KNiyh^-|mjV7XMI(Jj^h`Egoq~vhqBHQQJt$_3)jQ z3#`FZ(pAIU^F4XqE0wdAUM9a^o04#9bHVI+Md`9S9CcV=T44pA`R^@c>)1F+IAw(| zKv;}V&i@{u%r1|s#2UofBg&H3F?ps|z~LrDcO^x!>s~#(1JH5PB17I^UT%;fcX_{# zsswG924xB;|D$Gz5EIuD43YLR3~sa6DFs+&$gZkrfDrh?b4v!Cn~EBOY+Rl!`jmG` Z^!ghe_PUGY4fniSkFQRbB8bs$^cQ7vNPqwU literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.retrieve.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--SetupIntent.retrieve.1.json new file mode 100644 index 0000000000000000000000000000000000000000..355ce9f41beab223f02b9c210ef0facef5a61e33 GIT binary patch literal 930 zcmaJ=O>f&U487-91U~OjUlwe)77q5+EbHn4!-_#*Bsx|iOR7HF8A1O0C^^~ebeIo@ zMLj+~KGKKTd|rUHN^%I&=;G~MN2Olna15rSC}$S>4s~E1hSmr_2650FmCDJ?A^0f= zS287fj=Bxs7gE7C~aAns|JHH+en@aiD#qMdjeq6owO> zPZqGhz_ZgCt}#3tw;wf;!ww%~nnGwDA`@xpqDwv&aNhVL*E`aCu<=4z=q)B$4MYrQRxJ(IflEh^F#DDSH3_ literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--checkout.Session.create.1.json b/corporate/tests/stripe_fixtures/free_trial_not_available_for_ended_legacy_customer--checkout.Session.create.1.json new file mode 100644 index 0000000000000000000000000000000000000000..1a9440d877f0f7bbb596ef056f042e1e24ef3f05 GIT binary patch literal 2412 zcmb_d+j1f|5PjdTa7`+Cip>JPu~n|k+6HWPjlOb;wO@*IEw8NVQ~Pu;t<8D zG(@L!6B{aa9DTH>CXO%@BZfZXg;z|3Wq_n}0Rb99Dm2*iXce5!x!`8K5gE*RF5by7dZU*T~J<{@i^P)n1Aq5;&tMpUL$5WyKp z4Fvzv1wW^ND8QN zAlE+^pA3#v+02_Tdn~tMEQv7aEpD(>;~+`MK?HUbfBl_Da%Kb1wyu1*8OM+%5#OxV zPIAeUWMgO>?b*{EH;}E7CUHpYSP)%88H2>wdFGc(LS!X^LOXV&N&j|u^Xv70}U@X?SxhEM~F~L z(7#-EPsEIhN{9$S52&H&mZPrlngKU?oLGts$X3P6hKYEZbz)<9jH-a730?=UgeuSJ zX)tM$RUXfOqC~hGOJEOiY7R7NhvmAXb3)g4X$hBRYtxDol$-~=U!q>vvHE2kR2R{s z;)$+xHFW7HL%v8e5#Au&zXgsHt89*vnfz@fwn(_W%!pdBZC#;Q^} zh7y@ZbGsy)lDb>DOSBcR71GWAXP z`5X$JsD#s(h(eg5@wDwgStif)E<1TK++3Uqs`{MiUWK2fw(dhcNPp&WDGUmBAc^Ab} zPKq6|?_lv*ZuFq>nPlarxTIF#YOIFrsr`37`6c8*J!qUKG#V}kjYP2#`?b;O)n_Yq z6-55U^lsKQjox(Hq?{$a#;`tbA1%TQ=hd91ce1kxWQX2QhtbXC=%xQ4g2C8tjbwl5 ze{S8+BGH)K_XoZ8gY=uhigsp;pxIvpYa4;x2T%URgQR!EQ!3A&C-={FKaV}rw9!la wP7t9c9p-QP^3P_c$-3uXn5^!ulS123S4dS4EH;@<}c@9tk*rJ(^u;5Ffj8XimBAyXm#T*ZZm zUr3_jD7In3;sA7EQxvDt5S@-qY^c~1-W^L#9O2E382X9_v%;`6kaR2{z{QXX4OvMT z5uA>>;AXyc6Na>*Cd~?5Ht~@i_3)J7azbbjD9{?a5dzq_rht)Ix6#oiOt1u2( zHH1={OcV{E^fjU~rGf~~Kx!cPUpj#Zq`7cC|6w?&3qMzo;20zdLQsIU5pMC>V2mxc zXkZFVAsFK|a^LbM9-CPeP~*t(KW9H{m{Mh{*`~u|%XQ2v5hA@qUo6!q01|Q#fu-%| zKe?1-n-j)Dv#7R+Z+Bu9Fy%>-BY6t~yJOEuoP;;2lRc$E9c?@Vm zZQ>mwa!U4?CU&OsK$f9%+`YW(-SFYKb$Qo5OP(#^Z^YQBg=2Az@2z%`v7hg#o7|WIaViEk@N_ zivl??^Tg)!7*zpD6HEhM0oG+Lo(7X9>+a(5FSIUqdJ60*PR)@Z+6F0$VRzFw*fa)@iWfT9#cNiZWymM#;z7v?dP5Fd7sQEmVJG{wU2pBN zXgQBqLWBTX;4;M4&XJv4JqDhPNw!#Yc{d3}rqS3AX#Ppa5xVsn6tA{pGWAUibNppqR!Fzyahp|d;GCr(YlL$iyNV)N z1!b?{ixbFK<@}Q@#k+Z1I@U~aM`oeu6zvor-T(bHUB2oic(z(!R9*V24c1{N(9Hx+ z-^KgYP3`LYeZNP#wQl$JzC~`YKh`RC-zWRznsSoOp?&-F9|^gBG=3hi)ik;StQnVB z3DsBn@80%X$OAtpUnVr_Oxxu|u`c_)TyOfL8M_Ih;nm<_)G+1dU{Il)CCzfjAJZhR%iIR`Z$V2x&PQ|H|I}sSP5pdKAHrT z)+CtQ4D2y@8D2d}`p`M2^76I+`05Xrxks9oo5`@AMEDZD(1w=ZyTOE(JGlFDfG471 z!=KRyyuUJ(e^=@i*0?-wcKc#6zaKbJZi4YC(}=aQax^M+-+kWN>;%`wapo;?FFpG! P%<&`4v8}yNAD{jOJV{I> literal 0 HcmV?d00001 diff --git a/corporate/tests/test_stripe.py b/corporate/tests/test_stripe.py index f913c76be7..019b404649 100644 --- a/corporate/tests/test_stripe.py +++ b/corporate/tests/test_stripe.py @@ -92,6 +92,7 @@ from corporate.models import ( get_current_plan_by_realm, get_customer_by_realm, get_customer_by_remote_realm, + is_legacy_customer, ) from corporate.tests.test_remote_billing import RemoteRealmBillingTestCase, RemoteServerTestCase from corporate.views.remote_billing_page import generate_confirmation_link_for_server_deactivation @@ -633,7 +634,18 @@ class StripeTestCase(ZulipTestCase): return upgrade_json_response is_self_hosted_billing = not isinstance(self.billing_session, RealmBillingSession) - if invoice or not talk_to_stripe or is_free_trial_offer_enabled(is_self_hosted_billing): + customer = self.billing_session.get_customer() + assert customer is not None + if ( + invoice + or not talk_to_stripe + or ( + is_free_trial_offer_enabled(is_self_hosted_billing) + and + # Free trial is not applicable for legacy customers. + not is_legacy_customer(customer) + ) + ): # Upgrade already happened for free trial, invoice realms or schedule # upgrade for legacy remote servers. return upgrade_json_response @@ -7729,6 +7741,97 @@ class TestRemoteServerBillingFlow(StripeTestCase, RemoteServerTestCase): f"INFO:corporate.stripe:Change plan status: Customer.id: {customer.id}, CustomerPlan.id: {customer_plan.id}, status: {CustomerPlan.ACTIVE}", ) + @responses.activate + @mock_stripe() + def test_free_trial_not_available_for_active_legacy_customer(self, *mocks: Mock) -> None: + with self.settings(SELF_HOSTING_FREE_TRIAL_DAYS=30): + self.login("hamlet") + hamlet = self.example_user("hamlet") + + self.add_mock_response() + + with time_machine.travel(self.now, tick=False): + send_server_data_to_push_bouncer(consider_usage_statistics=False) + # Test that free trial is not available for customers with active legacy plan. + end_date = add_months(self.now, months=3) + self.billing_session.migrate_customer_to_legacy_plan(self.now, end_date) + + result = self.execute_remote_billing_authentication_flow( + hamlet.delivery_email, hamlet.full_name + ) + self.assertEqual(result.status_code, 302) + self.assertEqual(result["Location"], f"{self.billing_session.billing_base_url}/plans/") + with time_machine.travel(self.now, tick=False): + response = self.client_get( + f"{self.billing_session.billing_base_url}/plans/", subdomain="selfhosting" + ) + self.assert_not_in_success_response(["free trial"], response) + + with time_machine.travel(self.now, tick=False): + result = self.client_get( + f"{self.billing_session.billing_base_url}/upgrade/?tier={CustomerPlan.TIER_SELF_HOSTED_BASIC}", + subdomain="selfhosting", + ) + self.assert_not_in_success_response(["free trial"], response) + + with time_machine.travel(self.now, tick=False): + self.add_card_and_upgrade( + tier=CustomerPlan.TIER_SELF_HOSTED_BASIC, schedule="monthly" + ) + + with time_machine.travel(self.now + timedelta(days=1), tick=False): + response = self.client_get( + f"{self.billing_session.billing_base_url}/billing/", subdomain="selfhosting" + ) + self.assert_not_in_success_response(["(free trial)"], response) + + @responses.activate + @mock_stripe() + def test_free_trial_not_available_for_ended_legacy_customer(self, *mocks: Mock) -> None: + with self.settings(SELF_HOSTING_FREE_TRIAL_DAYS=30): + self.login("hamlet") + hamlet = self.example_user("hamlet") + + self.add_mock_response() + + with time_machine.travel(self.now, tick=False): + send_server_data_to_push_bouncer(consider_usage_statistics=False) + # Test that free trial is not available for customers with active legacy plan. + end_date = add_months(self.now, months=3) + self.billing_session.migrate_customer_to_legacy_plan(self.now, end_date) + CustomerPlan.objects.filter(customer__remote_server=self.remote_server).update( + status=CustomerPlan.ENDED + ) + + result = self.execute_remote_billing_authentication_flow( + hamlet.delivery_email, hamlet.full_name + ) + self.assertEqual(result.status_code, 302) + self.assertEqual(result["Location"], f"{self.billing_session.billing_base_url}/plans/") + with time_machine.travel(self.now, tick=False): + response = self.client_get( + f"{self.billing_session.billing_base_url}/plans/", subdomain="selfhosting" + ) + self.assert_not_in_success_response(["free trial"], response) + + with time_machine.travel(self.now, tick=False): + result = self.client_get( + f"{self.billing_session.billing_base_url}/upgrade/?tier={CustomerPlan.TIER_SELF_HOSTED_BASIC}", + subdomain="selfhosting", + ) + self.assert_not_in_success_response(["free trial"], response) + + with time_machine.travel(self.now, tick=False): + self.add_card_and_upgrade( + tier=CustomerPlan.TIER_SELF_HOSTED_BASIC, schedule="monthly" + ) + + with time_machine.travel(self.now + timedelta(days=1), tick=False): + response = self.client_get( + f"{self.billing_session.billing_base_url}/billing/", subdomain="selfhosting" + ) + self.assert_not_in_success_response(["(free trial)"], response) + @responses.activate @mock_stripe() def test_upgrade_user_to_basic_plan_free_trial_remote_server(self, *mocks: Mock) -> None: diff --git a/corporate/views/portico.py b/corporate/views/portico.py index 9d914f20d8..57f306915e 100644 --- a/corporate/views/portico.py +++ b/corporate/views/portico.py @@ -21,7 +21,12 @@ from corporate.lib.stripe import ( get_configured_fixed_price_plan_offer, get_free_trial_days, ) -from corporate.models import CustomerPlan, get_current_plan_by_customer, get_customer_by_realm +from corporate.models import ( + CustomerPlan, + get_current_plan_by_customer, + get_customer_by_realm, + is_legacy_customer, +) from zerver.context_processors import get_realm_from_request, latest_info_context from zerver.decorator import add_google_analytics, zulip_login_required from zerver.lib.github import ( @@ -168,9 +173,6 @@ def remote_realm_plans_page( if context.customer_plan is None: context.on_free_tier = not context.is_sponsored else: - if context.customer_plan.tier == CustomerPlan.TIER_SELF_HOSTED_LEGACY: - # Free trial is disabled for legacy customers. - context.free_trial_days = None context.on_free_tier = ( context.customer_plan.tier in ( @@ -191,6 +193,10 @@ def remote_realm_plans_page( status=CustomerPlan.NEVER_STARTED, ) + if is_legacy_customer(customer): + # Free trial is disabled for legacy customers. + context.free_trial_days = None + context.is_new_customer = ( not context.on_free_tier and context.customer_plan is None and not context.is_sponsored ) @@ -234,9 +240,6 @@ def remote_server_plans_page( if context.customer_plan is None: context.on_free_tier = not context.is_sponsored else: - if context.customer_plan.tier == CustomerPlan.TIER_SELF_HOSTED_LEGACY: - # Free trial is disabled for legacy customers. - context.free_trial_days = None context.on_free_tier = context.customer_plan.tier in ( CustomerPlan.TIER_SELF_HOSTED_LEGACY, CustomerPlan.TIER_SELF_HOSTED_BASE, @@ -253,6 +256,10 @@ def remote_server_plans_page( status=CustomerPlan.NEVER_STARTED, ) + if is_legacy_customer(customer): + # Free trial is disabled for legacy customers. + context.free_trial_days = None + context.is_new_customer = ( not context.on_free_tier and context.customer_plan is None and not context.is_sponsored )