From faad097915e4623113f7e70619e29178c97d7ff5 Mon Sep 17 00:00:00 2001 From: Jaanus Sellin Date: Fri, 17 Oct 2025 15:09:52 +0300 Subject: [PATCH] feat: overages should be rouned down to nearest integer (#10826) --- .../BillingInvoiceUsageRow.tsx | 2 +- .../calculateEstimateTotals.test.ts | 22 +++++++++++++++++++ .../BillingInvoice/calculateEstimateTotals.ts | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx index a7ca07b51e..2557edf7c5 100644 --- a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx +++ b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx @@ -14,7 +14,7 @@ const hasValidUsageData = (consumption?: number, limit?: number): boolean => { const calculateOverage = (consumption?: number, limit?: number): number => { return hasValidUsageData(consumption, limit) - ? Math.max(0, consumption! - limit!) + ? Math.floor(Math.max(0, consumption! - limit!)) : 0; }; diff --git a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.test.ts b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.test.ts index f9d214acbd..cad47b7a57 100644 --- a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.test.ts +++ b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.test.ts @@ -274,5 +274,27 @@ describe('calculateEstimateTotals', () => { totalAmount: 110, }); }); + + it('rounds down overages to integers', () => { + const usageLines = [ + createUsageLine(150.7, 100, 2), + createUsageLine(200.3, 150, 1.5), + ]; + const result = calculateEstimateTotals( + 'estimate', + 0, + 0, + 0, + 10, + [], + usageLines, + ); + + expect(result).toEqual({ + subtotal: 175, + taxAmount: 17.5, + totalAmount: 192.5, + }); + }); }); }); diff --git a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.ts b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.ts index c0b131560c..829cd57834 100644 --- a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.ts +++ b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/calculateEstimateTotals.ts @@ -25,7 +25,7 @@ export const calculateEstimateTotals = ( const usageLinesTotal = usageLines.reduce((sum, line) => { const overage = line.consumption && line.limit - ? Math.max(0, line.consumption - line.limit) + ? Math.floor(Math.max(0, line.consumption - line.limit)) : 0; return sum + overage * (line.unitPrice || 0); }, 0);