Skip to content

Commit fecc92e

Browse files
authored
Merge pull request #20357 from mozilla/PAY-3635
fix(payments-next): Show pre-discount tax
2 parents 21d2738 + 89e98a1 commit fecc92e

3 files changed

Lines changed: 48 additions & 2 deletions

File tree

libs/payments/customer/src/lib/invoice.manager.spec.ts

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,37 @@ describe('InvoiceManager', () => {
307307
);
308308
const mockPreviewUpcomingInvoice = InvoicePreviewFactory();
309309

310-
jest
310+
const spy = jest
311+
.spyOn(stripeClient, 'invoicesRetrieveUpcoming')
312+
.mockResolvedValue(mockUpcomingInvoice);
313+
314+
mockedStripeInvoiceToFirstInvoicePreviewDTO.mockReturnValue(
315+
mockPreviewUpcomingInvoice
316+
);
317+
318+
const result = await invoiceManager.previewUpcomingSubscription({
319+
customer: mockCustomer,
320+
subscription: mockSubscription,
321+
});
322+
expect(result).toEqual(mockPreviewUpcomingInvoice);
323+
expect(spy).toHaveBeenCalledWith({
324+
customer: mockCustomer.id,
325+
subscription: mockSubscription.id,
326+
subscription_details: {
327+
cancel_at_period_end: false,
328+
},
329+
});
330+
});
331+
332+
it('passes empty string discounts when excludeDiscounts is true', async () => {
333+
const mockCustomer = StripeCustomerFactory({ currency: 'usd' });
334+
const mockSubscription = StripeSubscriptionFactory();
335+
const mockUpcomingInvoice = StripeResponseFactory(
336+
StripeUpcomingInvoiceFactory()
337+
);
338+
const mockPreviewUpcomingInvoice = InvoicePreviewFactory();
339+
340+
const spy = jest
311341
.spyOn(stripeClient, 'invoicesRetrieveUpcoming')
312342
.mockResolvedValue(mockUpcomingInvoice);
313343

@@ -318,8 +348,17 @@ describe('InvoiceManager', () => {
318348
const result = await invoiceManager.previewUpcomingSubscription({
319349
customer: mockCustomer,
320350
subscription: mockSubscription,
351+
excludeDiscounts: true,
321352
});
322353
expect(result).toEqual(mockPreviewUpcomingInvoice);
354+
expect(spy).toHaveBeenCalledWith({
355+
customer: mockCustomer.id,
356+
subscription: mockSubscription.id,
357+
subscription_details: {
358+
cancel_at_period_end: false,
359+
},
360+
discounts: '',
361+
});
323362
});
324363
});
325364

libs/payments/customer/src/lib/invoice.manager.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,16 +187,19 @@ export class InvoiceManager {
187187
async previewUpcomingSubscription({
188188
customer,
189189
subscription,
190+
excludeDiscounts,
190191
}: {
191192
customer: StripeCustomer;
192193
subscription: StripeSubscription;
194+
excludeDiscounts?: boolean;
193195
}): Promise<InvoicePreview> {
194196
const upcomingInvoice = await this.stripeClient.invoicesRetrieveUpcoming({
195197
customer: customer.id,
196198
subscription: subscription.id,
197199
subscription_details: {
198200
cancel_at_period_end: false,
199201
},
202+
...(excludeDiscounts ? { discounts: '' } : {}),
200203
});
201204

202205
return stripeInvoiceToInvoicePreviewDTO(upcomingInvoice);

libs/payments/management/src/lib/subscriptionManagement.service.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ export class SubscriptionManagementService {
459459
this.invoiceManager.previewUpcomingSubscription({
460460
customer,
461461
subscription,
462+
excludeDiscounts: true,
462463
}),
463464
this.churnInterventionService.determineStaySubscribedEligibility(
464465
uid,
@@ -501,12 +502,13 @@ export class SubscriptionManagementService {
501502

502503
const {
503504
nextInvoiceDate,
504-
promotionName: nextPromotionName,
505505
subsequentAmount,
506506
subsequentAmountExcludingTax,
507507
subsequentTax,
508508
} = upcomingInvoice;
509509

510+
const nextPromotionName = subscription.discount?.coupon.name ?? null;
511+
510512
const totalExclusiveTax = taxAmounts
511513
.filter((tax) => !tax.inclusive)
512514
.reduce((sum, tax) => sum + tax.amount, 0);
@@ -791,6 +793,7 @@ export class SubscriptionManagementService {
791793
await this.invoiceManager.previewUpcomingSubscription({
792794
customer: stripeCustomer,
793795
subscription,
796+
excludeDiscounts: true,
794797
});
795798

796799
if (!upcomingInvoice) {
@@ -912,6 +915,7 @@ export class SubscriptionManagementService {
912915
await this.invoiceManager.previewUpcomingSubscription({
913916
customer: stripeCustomer,
914917
subscription,
918+
excludeDiscounts: true,
915919
});
916920

917921
if (!upcomingInvoice) {

0 commit comments

Comments
 (0)