From 29810cd5d86ab604c774388f97baf692c7a4cfdd Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:30:11 +0100 Subject: [PATCH 01/18] Draft implementation of the transaction breakdown --- client/data/index.ts | 11 + client/data/timeline/types.d.ts | 63 ++++ .../payment-details/payment-details/index.tsx | 5 + .../transaction-breakdown/index.tsx | 319 ++++++++++++++++++ .../transaction-breakdown/style.scss | 35 ++ .../client/utils/currency/index.js | 26 +- 6 files changed, 454 insertions(+), 5 deletions(-) create mode 100644 client/data/timeline/types.d.ts create mode 100644 client/payment-details/transaction-breakdown/index.tsx create mode 100644 client/payment-details/transaction-breakdown/style.scss diff --git a/client/data/index.ts b/client/data/index.ts index 878ecdc11f6..82e1c72df8b 100644 --- a/client/data/index.ts +++ b/client/data/index.ts @@ -25,3 +25,14 @@ export * from './payment-intents/hooks'; export * from './authorizations/hooks'; export * from './files/hooks'; export * from './payment-activity/hooks'; + +import { TimelineItem } from './timeline/types'; +import { ApiError } from '../types/errors'; + +export declare function useTimeline( + transactionId: string +): { + timeline: Array< TimelineItem >; + timelineError: ApiError | undefined; + isLoading: boolean; +}; diff --git a/client/data/timeline/types.d.ts b/client/data/timeline/types.d.ts new file mode 100644 index 00000000000..c8025c218be --- /dev/null +++ b/client/data/timeline/types.d.ts @@ -0,0 +1,63 @@ +export interface TimelineFeeRate { + type: string; + additional_type?: string; + fee_id: string; + percentage_rate: number; + fixed_rate: number; + currency: string; +} + +export interface TimelineFeeExchangeRate { + from_currency: string; + to_currency: string; + from_amount: number; + to_amount: number; + rate: number; +} + +export interface TimelineFeeRates { + percentage: number; + fixed: number; + fixed_currency: string; + history: Array< TimelineFeeRate >; + fee_exchange_rate?: TimelineFeeExchangeRate; +} + +export interface TimelineTransactionDetails { + customer_currency: string; + customer_amount: number; + customer_amount_captured: number; + customer_fee: number; + store_currency: string; + store_amount: number; + store_amount_captured: number; + store_fee: number; +} + +export interface TimelineDeposit { + id: string; + arrival_date: number; +} + +export interface TimelineItem { + type: string; + datetime: number; + acquirer_reference_number?: string; + acquirer_reference_number_status?: string; + amount?: number; + amount_captured?: number; + amount_refunded?: number; + currency?: string; + deposit?: TimelineDeposit; + dispute_id?: string; + evidence_due_by?: number; + failure_reason?: string; + failure_transaction_id?: string; + fee?: number; + fee_rates?: TimelineFeeRates; + loan_id?: string; + reason?: string; + transaction_details?: TimelineTransactionDetails; + transaction_id?: string; + user_id?: number; +} diff --git a/client/payment-details/payment-details/index.tsx b/client/payment-details/payment-details/index.tsx index cdf568520f2..22120008e9b 100644 --- a/client/payment-details/payment-details/index.tsx +++ b/client/payment-details/payment-details/index.tsx @@ -14,6 +14,7 @@ import ErrorBoundary from '../../components/error-boundary'; import PaymentDetailsSummary from '../summary'; import PaymentDetailsTimeline from '../timeline'; import PaymentDetailsPaymentMethod from '../payment-method'; +import PaymentTransactionBreakdown from '../transaction-breakdown'; import { ApiError } from '../../types/errors'; import { Charge } from '../../types/charges'; import { PaymentIntent } from '../../types/payment-intents'; @@ -72,6 +73,10 @@ const PaymentDetails: React.FC< PaymentDetailsProps > = ( { ) } + + + + = ( { + paymentIntentId, +} ) => { + const { timeline, timelineError, isLoading } = useTimeline( + paymentIntentId + ); + + let captureEvents: TimelineItem[] = []; + + if ( timeline ) { + captureEvents = filter( timeline, function ( item: TimelineItem ) { + return item.type === 'captured'; + } ); + } + + let captureEvent: TimelineItem | undefined; + if ( captureEvents.length > 0 ) { + captureEvent = captureEvents[ 0 ]; + } + + if ( + undefined === captureEvent || + undefined === captureEvent.transaction_details || + undefined === captureEvent.fee_rates + ) { + return
; + } + + const formattedStoreAmount = + formatCurrency( + captureEvent.transaction_details.store_amount, + captureEvent.transaction_details.store_currency + ) + + ' ' + + captureEvent.transaction_details.store_currency; + + const formattedCustomerAmount = + formatCurrency( + captureEvent.transaction_details.customer_amount, + captureEvent.transaction_details.customer_currency, + captureEvent.transaction_details.store_currency + ) + + ' ' + + captureEvent.transaction_details.customer_currency; + + const isMultiCurrency = + captureEvent.transaction_details.store_currency !== + captureEvent.transaction_details.customer_currency; + + const formattedAmount = + formattedStoreAmount + + ( isMultiCurrency ? ` → ${ formattedCustomerAmount }` : '' ); + + const feeExchangeRate = captureEvent.fee_rates.fee_exchange_rate?.rate || 1; + + const conversionRate = isMultiCurrency ? ( + + { ' @ 1 ' } + { captureEvent.transaction_details.store_currency } + { ' → ' } + { Math.round( feeExchangeRate * 1000000 ) / 1000000 } + { ' ' } + { captureEvent.transaction_details.customer_currency } + + ) : ( + '' + ); + + function formatFeeType( + type: string, + additionalType: string | undefined + ): string { + if ( 'total' === type ) { + return __( 'Total transaction fee', 'woocommerce-payments' ); + } + if ( 'base' === type ) { + return __( 'Base fee', 'woocommerce-payments' ); + } + if ( 'additional' === type && 'international' === additionalType ) { + return __( 'International card fee', 'woocommerce-payments' ); + } + if ( 'additional' === type && 'fx' === additionalType ) { + return __( 'Currency conversion fee', 'woocommerce-payments' ); + } + return __( 'Fee', 'woocommerce-payments' ); + } + + function formatFeeRate( + percentage: number, + fixed: number, + currency: string, + storeCurrency: string + ): string { + const formattedPercentage = percentage + ? Math.round( percentage * 10000 ) / 100 + '%' + : ''; + const formattedFixed = fixed + ? formatCurrency( fixed, currency, storeCurrency ) + : ''; + return join( + filter( [ formattedPercentage, formattedFixed ], Boolean ), + ' + ' + ); + } + + function formatFee( + type: string, + additionalType: string | undefined, + percentage: number, + fixed: number, + currency: string, + storeCurrency: string, + amount?: number + ): JSX.Element[] { + const formattedFeeType = formatFeeType( type, additionalType ); + const formattedFeeRate = formatFeeRate( + percentage, + fixed, + currency, + storeCurrency + ); + const formattedFeeAmount = amount + ? ' - ' + formatCurrency( amount, currency, storeCurrency ) + : ''; + + return [ + + + { formattedFeeType } + + + { formattedFeeRate } + + + { formattedFeeAmount } + + , + ]; + } + + function formatFees( event: TimelineItem ): JSX.Element[] { + if ( + undefined === event.fee_rates || + undefined === event.transaction_details + ) { + return []; + } + + const storeCurrency = event.transaction_details.store_currency; + + const fees = []; + + if ( undefined === event.fee_rates.history ) { + fees.push( + formatFee( + 'base', + '', + event.fee_rates.percentage, + event.fee_rates.fixed, + event.fee_rates.fixed_currency, + storeCurrency + ) + ); + } else { + event.fee_rates.history.map( ( fee: TimelineFeeRate ) => + fees.push( + formatFee( + fee.type, + fee.additional_type, + fee.percentage_rate, + fee.fixed_rate, + fee.currency, + storeCurrency + ) + ) + ); + } + + fees.push( + formatFee( + 'total', + '', + event.fee_rates.percentage, + event.fee_rates.fixed, + event.fee_rates.fixed_currency, + storeCurrency, + event.transaction_details.store_fee + ) + ); + + return flatten( fees ); + } + + return captureEvent ? ( + + + + + + + { timelineError instanceof Error ? ( +
+ { __( + 'Error while loading payment details', + 'woocommerce-payments' + ) } +
+ ) : ( + + + + { __( + 'Authorized payment', + 'woocommerce-payments' + ) } + + + + { formattedAmount } + { conversionRate } + + + + + + { __( + 'Transaction fee', + 'woocommerce-payments' + ) } + + + + { formatFees( captureEvent ) } + + + ) } +
+
+ + + { timelineError instanceof Error ? ( +
+ ) : ( + + + { __( 'Net deposit', 'woocommerce-payments' ) } + + + { formatCurrency( + captureEvent.transaction_details + .store_amount_captured - + captureEvent.transaction_details + .store_fee, + captureEvent.transaction_details + .store_currency + ) } + + + ) } + + + + ) : ( + + ); +}; + +export default PaymentTransactionBreakdown; diff --git a/client/payment-details/transaction-breakdown/style.scss b/client/payment-details/transaction-breakdown/style.scss new file mode 100644 index 00000000000..6af055bc196 --- /dev/null +++ b/client/payment-details/transaction-breakdown/style.scss @@ -0,0 +1,35 @@ +/** @format */ + +.wcpay-transaction-breakdown, +.wcpay-transaction-breakdown__footer, +.wcpay-transaction-breakdown div, +.wcpay-transaction-breakdown__footer div { + font-size: 16px; +} + +.wcpay-transaction-breakdown__conversion_rate { + margin-top: 0 !important; + font-size: 12px !important; + color: $wp-gray-40; + text-align: right; + line-height: 16px; +} +.wcpay-transaction-breakdown__fees { + margin-left: 5%; + color: $wp-gray-40; +} +.wcpay-transaction-breakdown__fees .wcpay-transaction-breakdown__fee_name { + width: 35%; +} +.wcpay-transaction-breakdown__fees .wcpay-transaction-breakdown__fee_amount, +.wcpay-transaction-breakdown__fees .wcpay-transaction-breakdown__fee_rate { + width: 30%; + text-align: right; +} +.wcpay-transaction-breakdown__fees + .wcpay-transaction-breakdown__total_fee_info { + font-weight: 600; +} +.wcpay-transaction-breakdown__footer_amount { + font-weight: 600; +} diff --git a/includes/multi-currency/client/utils/currency/index.js b/includes/multi-currency/client/utils/currency/index.js index 8ccf1300a35..1282a2f3c83 100644 --- a/includes/multi-currency/client/utils/currency/index.js +++ b/includes/multi-currency/client/utils/currency/index.js @@ -252,11 +252,11 @@ export const formatExplicitCurrency = ( * @param {Object} to Target currency and amount for exchange rate calculation. * @param {string} to.currency Target currency code. * @param {number} to.amount Target amount. + * @param {number|undefined} rate Exchange rate. * * @return {string?} formatted string like `€1,00 → $1,19: $29.99`. - * - * */ -export const formatFX = ( from, to ) => { + */ +export const formatFX = ( from, to, rate ) => { if ( ! from.currency || ! to.currency ) { return; } @@ -266,13 +266,26 @@ export const formatFX = ( from, to ) => { fromAmount, from.currency, true - ) } → ${ formatExchangeRate( from, to ) }: ${ formatExplicitCurrency( + ) } → ${ formatExchangeRate( from, to, rate ) }: ${ formatExplicitCurrency( Math.abs( to.amount ), to.currency ) }`; }; -function formatExchangeRate( from, to ) { +/** + * Formats exchange rate value string from one currency to another. + * + * @param {Object} from Source currency and amount for exchange rate calculation. + * @param {string} from.currency Source currency code. + * @param {number} from.amount Source amount. + * @param {Object} to Target currency and amount for exchange rate calculation. + * @param {string} to.currency Target currency code. + * @param {number} to.amount Target amount. + * @param {number|undefined} rate Exchange rate. + * + * @return {string?} formatted string like `1,19`. + */ +function formatExchangeRate( from, to, rate ) { const { currencyData } = wcpaySettings; let exchangeRate = @@ -281,6 +294,9 @@ function formatExchangeRate( from, to ) { from.amount !== 0 ? Math.abs( to.amount / from.amount ) : 0; + if ( typeof rate === 'number' ) { + exchangeRate = rate; + } if ( isZeroDecimalCurrency( to.currency ) ) { exchangeRate *= 100; } From 7544293ff5ac4934014fa9d1bdb5057c61c78118 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Fri, 31 Jan 2025 15:20:23 +0100 Subject: [PATCH 02/18] Updates to keep consistency between displayed currencies --- .../transaction-breakdown/index.tsx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index 7f8065dfece..cfbe448bebb 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -78,19 +78,19 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > captureEvent.transaction_details.customer_currency; const formattedAmount = - formattedStoreAmount + - ( isMultiCurrency ? ` → ${ formattedCustomerAmount }` : '' ); + formattedCustomerAmount + + ( isMultiCurrency ? ` → ${ formattedStoreAmount }` : '' ); const feeExchangeRate = captureEvent.fee_rates.fee_exchange_rate?.rate || 1; const conversionRate = isMultiCurrency ? ( { ' @ 1 ' } - { captureEvent.transaction_details.store_currency } + { captureEvent.transaction_details.customer_currency } { ' → ' } - { Math.round( feeExchangeRate * 1000000 ) / 1000000 } + { Math.round( ( 1 / feeExchangeRate ) * 1000000 ) / 1000000 } { ' ' } - { captureEvent.transaction_details.customer_currency } + { captureEvent.transaction_details.store_currency } ) : ( '' @@ -150,7 +150,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > storeCurrency ); const formattedFeeAmount = amount - ? ' - ' + formatCurrency( amount, currency, storeCurrency ) + ? ' - ' + formatCurrency( amount, storeCurrency, storeCurrency ) : ''; return [ @@ -223,8 +223,8 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > 'total', '', event.fee_rates.percentage, - event.fee_rates.fixed, - event.fee_rates.fixed_currency, + event.fee_rates.fixed / feeExchangeRate, + storeCurrency, storeCurrency, event.transaction_details.store_fee ) @@ -247,12 +247,12 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > { timelineError instanceof Error ? ( -
- { __( - 'Error while loading payment details', + [ + __( + 'Error while loading transaction breakdown', 'woocommerce-payments' - ) } -
+ ), + ] ) : ( @@ -290,7 +290,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > { timelineError instanceof Error ? ( -
+ [] ) : ( From 64c70305ba232869b593ce5da44c0d280ec5ed33 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:33:04 +0100 Subject: [PATCH 03/18] Implement suggestions from the review and from the AI analysis --- .../transaction-breakdown/hooks.ts | 53 +++++ .../transaction-breakdown/index.tsx | 195 ++++++------------ .../transaction-breakdown/utils.ts | 59 ++++++ 3 files changed, 177 insertions(+), 130 deletions(-) create mode 100644 client/payment-details/transaction-breakdown/hooks.ts create mode 100644 client/payment-details/transaction-breakdown/utils.ts diff --git a/client/payment-details/transaction-breakdown/hooks.ts b/client/payment-details/transaction-breakdown/hooks.ts new file mode 100644 index 00000000000..0175dc3a8c1 --- /dev/null +++ b/client/payment-details/transaction-breakdown/hooks.ts @@ -0,0 +1,53 @@ +/** + * External dependencies + */ +import { useMemo } from 'react'; + +/** + * Internal dependencies + */ +import { TimelineItem } from 'wcpay/data/timeline/types'; +import { formatCurrency } from 'multi-currency/interface/functions'; + +interface TransactionAmounts { + formattedStoreAmount: string; + formattedCustomerAmount: string; + isMultiCurrency: boolean; + formattedAmount: string; +} + +export const useTransactionAmounts = ( + captureEvent: TimelineItem | undefined +): TransactionAmounts | null => { + return useMemo( () => { + if ( undefined === captureEvent ) { + return null; + } + + const { transaction_details: details } = captureEvent; + if ( ! details ) return null; + + const formattedStoreAmount = `${ formatCurrency( + details.store_amount, + details.store_currency + ) } ${ details.store_currency }`; + + const formattedCustomerAmount = `${ formatCurrency( + details.customer_amount, + details.customer_currency, + details.store_currency + ) } ${ details.customer_currency }`; + + const isMultiCurrency = + details.store_currency !== details.customer_currency; + + return { + formattedStoreAmount, + formattedCustomerAmount, + isMultiCurrency, + formattedAmount: `${ formattedCustomerAmount }${ + isMultiCurrency ? ` → ${ formattedStoreAmount }` : '' + }`, + }; + }, [ captureEvent ] ); +}; diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index cfbe448bebb..e99e199e2ed 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -5,7 +5,7 @@ */ import React from 'react'; import { __ } from '@wordpress/i18n'; -import { filter, flatten, join } from 'lodash'; +import { find } from 'lodash'; /** * Internal dependencies @@ -22,6 +22,8 @@ import { import { TimelineItem, TimelineFeeRate } from 'wcpay/data/timeline/types'; import Loadable, { LoadableBlock } from 'components/loadable'; import { formatCurrency } from 'multi-currency/interface/functions'; +import { formatFeeType, formatFeeRate } from './utils'; +import { useTransactionAmounts } from './hooks'; import './style.scss'; interface PaymentTransactionBreakdownProps { @@ -35,51 +37,22 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > paymentIntentId ); - let captureEvents: TimelineItem[] = []; - - if ( timeline ) { - captureEvents = filter( timeline, function ( item: TimelineItem ) { - return item.type === 'captured'; - } ); - } + const captureEvent: TimelineItem | undefined = find( + timeline, + ( item: TimelineItem ) => item.type === 'captured' + ); - let captureEvent: TimelineItem | undefined; - if ( captureEvents.length > 0 ) { - captureEvent = captureEvents[ 0 ]; - } + const transactionAmounts = useTransactionAmounts( captureEvent ); if ( - undefined === captureEvent || - undefined === captureEvent.transaction_details || - undefined === captureEvent.fee_rates + ! captureEvent?.transaction_details || + ! captureEvent?.fee_rates || + ! transactionAmounts ) { return
; } - const formattedStoreAmount = - formatCurrency( - captureEvent.transaction_details.store_amount, - captureEvent.transaction_details.store_currency - ) + - ' ' + - captureEvent.transaction_details.store_currency; - - const formattedCustomerAmount = - formatCurrency( - captureEvent.transaction_details.customer_amount, - captureEvent.transaction_details.customer_currency, - captureEvent.transaction_details.store_currency - ) + - ' ' + - captureEvent.transaction_details.customer_currency; - - const isMultiCurrency = - captureEvent.transaction_details.store_currency !== - captureEvent.transaction_details.customer_currency; - - const formattedAmount = - formattedCustomerAmount + - ( isMultiCurrency ? ` → ${ formattedStoreAmount }` : '' ); + const { formattedAmount, isMultiCurrency } = transactionAmounts; const feeExchangeRate = captureEvent.fee_rates.fee_exchange_rate?.rate || 1; @@ -96,52 +69,23 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > '' ); - function formatFeeType( - type: string, - additionalType: string | undefined - ): string { - if ( 'total' === type ) { - return __( 'Total transaction fee', 'woocommerce-payments' ); - } - if ( 'base' === type ) { - return __( 'Base fee', 'woocommerce-payments' ); - } - if ( 'additional' === type && 'international' === additionalType ) { - return __( 'International card fee', 'woocommerce-payments' ); - } - if ( 'additional' === type && 'fx' === additionalType ) { - return __( 'Currency conversion fee', 'woocommerce-payments' ); - } - return __( 'Fee', 'woocommerce-payments' ); - } - - function formatFeeRate( - percentage: number, - fixed: number, - currency: string, - storeCurrency: string - ): string { - const formattedPercentage = percentage - ? Math.round( percentage * 10000 ) / 100 + '%' - : ''; - const formattedFixed = fixed - ? formatCurrency( fixed, currency, storeCurrency ) - : ''; - return join( - filter( [ formattedPercentage, formattedFixed ], Boolean ), - ' + ' - ); - } - - function formatFee( - type: string, - additionalType: string | undefined, - percentage: number, - fixed: number, - currency: string, - storeCurrency: string, - amount?: number - ): JSX.Element[] { + const FeeRow: React.FC< { + type: string; + additionalType?: string; + percentage: number; + fixed: number; + currency: string; + storeCurrency: string; + amount?: number; + } > = ( { + type, + additionalType, + percentage, + fixed, + currency, + storeCurrency, + amount, + } ) => { const formattedFeeType = formatFeeType( type, additionalType ); const formattedFeeRate = formatFeeRate( percentage, @@ -150,35 +94,25 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > storeCurrency ); const formattedFeeAmount = amount - ? ' - ' + formatCurrency( amount, storeCurrency, storeCurrency ) + ? ` - ${ formatCurrency( amount, storeCurrency, storeCurrency ) }` : ''; - return [ + return ( - + { formattedFeeType } - + { formattedFeeRate } - + { formattedFeeAmount } - , - ]; - } + + ); + }; function formatFees( event: TimelineItem ): JSX.Element[] { if ( @@ -194,43 +128,44 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > if ( undefined === event.fee_rates.history ) { fees.push( - formatFee( - 'base', - '', - event.fee_rates.percentage, - event.fee_rates.fixed, - event.fee_rates.fixed_currency, - storeCurrency - ) + ); } else { event.fee_rates.history.map( ( fee: TimelineFeeRate ) => fees.push( - formatFee( - fee.type, - fee.additional_type, - fee.percentage_rate, - fee.fixed_rate, - fee.currency, - storeCurrency - ) + ) ); } fees.push( - formatFee( - 'total', - '', - event.fee_rates.percentage, - event.fee_rates.fixed / feeExchangeRate, - storeCurrency, - storeCurrency, - event.transaction_details.store_fee - ) + ); - return flatten( fees ); + return fees; } return captureEvent ? ( diff --git a/client/payment-details/transaction-breakdown/utils.ts b/client/payment-details/transaction-breakdown/utils.ts new file mode 100644 index 00000000000..b229871c163 --- /dev/null +++ b/client/payment-details/transaction-breakdown/utils.ts @@ -0,0 +1,59 @@ +/** + * External dependencies + */ +import { filter, join } from 'lodash'; + +/** + * Internal dependencies + */ +import { __ } from '@wordpress/i18n'; +import { formatCurrency } from 'multi-currency/interface/functions'; + +export const formatFeeType = ( + type: string, + additionalType?: string +): string => { + const feeTypes: Record< string, string | Record< string, string > > = { + total: __( 'Total transaction fee', 'woocommerce-payments' ), + base: __( 'Base fee', 'woocommerce-payments' ), + additional: { + international: __( + 'International card fee', + 'woocommerce-payments' + ), + fx: __( 'Currency conversion fee', 'woocommerce-payments' ), + }, + }; + + if ( type === 'additional' && additionalType ) { + const additionalFees = feeTypes.additional as Record< string, string >; + return ( + additionalFees[ additionalType ] || + __( 'Fee', 'woocommerce-payments' ) + ); + } + + const baseType = feeTypes[ type ]; + return typeof baseType === 'string' + ? baseType + : __( 'Fee', 'woocommerce-payments' ); +}; + +export const formatFeeRate = ( + percentage: number, + fixed: number, + currency: string, + storeCurrency: string +): string => { + const formattedPercentage = percentage + ? `${ ( percentage * 100 ).toFixed( 2 ) }%` + : ''; + const formattedFixed = fixed + ? formatCurrency( fixed, currency, storeCurrency ) + : ''; + + return join( + filter( [ formattedPercentage, formattedFixed ], Boolean ), + ' + ' + ); +}; From 051cac7cb0044173026dc1673a38d34de390eb2b Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:37:49 +0100 Subject: [PATCH 04/18] Return `null` if capture event is not present --- client/payment-details/transaction-breakdown/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index e99e199e2ed..43f0988da8d 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -49,7 +49,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > ! captureEvent?.fee_rates || ! transactionAmounts ) { - return
; + return null; } const { formattedAmount, isMultiCurrency } = transactionAmounts; From 781d90864a9739bbfb4f563dfff67d406fa5f9f6 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:40:00 +0100 Subject: [PATCH 05/18] Add a clarification about capture event --- client/payment-details/transaction-breakdown/index.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index 43f0988da8d..08564496dd5 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -37,6 +37,11 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > paymentIntentId ); + /** + * Right now there is now support for multi-capture in the WooPayments and + * we retrieve information about fees from the first available capture + * event. This should be updated if multi capture becomes reality. + */ const captureEvent: TimelineItem | undefined = find( timeline, ( item: TimelineItem ) => item.type === 'captured' From f47257e5f7b002aaec24ad25b307e06ed57b3211 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Mon, 3 Feb 2025 19:18:20 +0100 Subject: [PATCH 06/18] Component tests and related fixes --- client/data/timeline/types.d.ts | 2 +- .../transaction-breakdown/index.tsx | 127 ++++--- .../transaction-breakdown/tests/hooks.test.ts | 88 +++++ .../tests/index.test.tsx | 310 ++++++++++++++++++ .../transaction-breakdown/tests/utils.test.ts | 66 ++++ .../transaction-breakdown/types.ts | 20 ++ 6 files changed, 541 insertions(+), 72 deletions(-) create mode 100644 client/payment-details/transaction-breakdown/tests/hooks.test.ts create mode 100644 client/payment-details/transaction-breakdown/tests/index.test.tsx create mode 100644 client/payment-details/transaction-breakdown/tests/utils.test.ts create mode 100644 client/payment-details/transaction-breakdown/types.ts diff --git a/client/data/timeline/types.d.ts b/client/data/timeline/types.d.ts index c8025c218be..fdd210b49c5 100644 --- a/client/data/timeline/types.d.ts +++ b/client/data/timeline/types.d.ts @@ -19,7 +19,7 @@ export interface TimelineFeeRates { percentage: number; fixed: number; fixed_currency: string; - history: Array< TimelineFeeRate >; + history?: Array< TimelineFeeRate >; fee_exchange_rate?: TimelineFeeExchangeRate; } diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index 08564496dd5..b6e57703244 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -33,9 +33,7 @@ interface PaymentTransactionBreakdownProps { const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > = ( { paymentIntentId, } ) => { - const { timeline, timelineError, isLoading } = useTimeline( - paymentIntentId - ); + const { timeline, isLoading } = useTimeline( paymentIntentId ); /** * Right now there is now support for multi-capture in the WooPayments and @@ -101,10 +99,11 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > const formattedFeeAmount = amount ? ` - ${ formatCurrency( amount, storeCurrency, storeCurrency ) }` : ''; + const feeType = type + ( additionalType ? `_${ additionalType }` : '' ); return ( { formattedFeeType } @@ -120,10 +119,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > }; function formatFees( event: TimelineItem ): JSX.Element[] { - if ( - undefined === event.fee_rates || - undefined === event.transaction_details - ) { + if ( ! event.fee_rates || ! event.transaction_details ) { return []; } @@ -131,7 +127,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > const fees = []; - if ( undefined === event.fee_rates.history ) { + if ( ! event.fee_rates.history ) { fees.push( /> ); } else { - event.fee_rates.history.map( ( fee: TimelineFeeRate ) => + event.fee_rates.history.map( ( fee: TimelineFeeRate ) => { + const feeType = + fee.type + + ( fee.additional_type ? `_${ fee.additional_type }` : '' ); fees.push( - ) - ); + ); + return null; + } ); } fees.push( @@ -186,68 +186,53 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > - { timelineError instanceof Error ? ( - [ - __( - 'Error while loading transaction breakdown', - 'woocommerce-payments' - ), - ] - ) : ( - - - - { __( - 'Authorized payment', - 'woocommerce-payments' - ) } - - - - { formattedAmount } - { conversionRate } - - - - - - { __( - 'Transaction fee', - 'woocommerce-payments' - ) } - - - - { formatFees( captureEvent ) } - - - ) } - - - - - { timelineError instanceof Error ? ( - [] - ) : ( - + + - { __( 'Net deposit', 'woocommerce-payments' ) } + { __( + 'Authorized payment', + 'woocommerce-payments' + ) } - - { formatCurrency( - captureEvent.transaction_details - .store_amount_captured - - captureEvent.transaction_details - .store_fee, - captureEvent.transaction_details - .store_currency + + + { formattedAmount } + { conversionRate } + + + + + + { __( + 'Transaction fee', + 'woocommerce-payments' ) } - ) } + + { formatFees( captureEvent ) } + + + + + + + + + { __( 'Net deposit', 'woocommerce-payments' ) } + + + { formatCurrency( + captureEvent.transaction_details + .store_amount_captured - + captureEvent.transaction_details.store_fee, + captureEvent.transaction_details.store_currency + ) } + + diff --git a/client/payment-details/transaction-breakdown/tests/hooks.test.ts b/client/payment-details/transaction-breakdown/tests/hooks.test.ts new file mode 100644 index 00000000000..074e9b20ea6 --- /dev/null +++ b/client/payment-details/transaction-breakdown/tests/hooks.test.ts @@ -0,0 +1,88 @@ +/** + * External dependencies + */ +import { renderHook } from '@testing-library/react-hooks'; + +/** + * Internal dependencies + */ +import { useTransactionAmounts } from '../hooks'; +import { formatCurrency } from 'multi-currency/interface/functions'; + +jest.mock( 'multi-currency/interface/functions', () => ( { + formatCurrency: jest.fn(), +} ) ); + +describe( 'useTransactionAmounts', () => { + beforeEach( () => { + ( formatCurrency as jest.Mock ).mockReset(); + } ); + + it( 'returns null when capture event is undefined', () => { + const { result } = renderHook( () => + useTransactionAmounts( undefined ) + ); + expect( result.current ).toBeNull(); + } ); + + it( 'returns null when transaction details are missing', () => { + const { result } = renderHook( () => + useTransactionAmounts( { + type: 'captured', + } as any ) + ); + expect( result.current ).toBeNull(); + } ); + + it( 'formats amounts for same currency transaction', () => { + ( formatCurrency as jest.Mock ).mockReturnValue( '$100.00' ); + + const captureEvent = { + type: 'captured', + transaction_details: { + store_amount: 10000, + store_currency: 'USD', + customer_amount: 10000, + customer_currency: 'USD', + }, + }; + + const { result } = renderHook( () => + useTransactionAmounts( captureEvent as any ) + ); + + expect( result.current ).toEqual( { + formattedStoreAmount: '$100.00 USD', + formattedCustomerAmount: '$100.00 USD', + isMultiCurrency: false, + formattedAmount: '$100.00 USD', + } ); + } ); + + it( 'formats amounts for multi-currency transaction', () => { + ( formatCurrency as jest.Mock ) + .mockReturnValueOnce( '€85.00' ) // store amount + .mockReturnValueOnce( '$100.00' ); // customer amount + + const captureEvent = { + type: 'captured', + transaction_details: { + store_amount: 8500, + store_currency: 'EUR', + customer_amount: 10000, + customer_currency: 'USD', + }, + }; + + const { result } = renderHook( () => + useTransactionAmounts( captureEvent as any ) + ); + + expect( result.current ).toEqual( { + formattedStoreAmount: '€85.00 EUR', + formattedCustomerAmount: '$100.00 USD', + isMultiCurrency: true, + formattedAmount: '$100.00 USD → €85.00 EUR', + } ); + } ); +} ); diff --git a/client/payment-details/transaction-breakdown/tests/index.test.tsx b/client/payment-details/transaction-breakdown/tests/index.test.tsx new file mode 100644 index 00000000000..09907c79500 --- /dev/null +++ b/client/payment-details/transaction-breakdown/tests/index.test.tsx @@ -0,0 +1,310 @@ +/** + * External dependencies + */ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import PaymentTransactionBreakdown from '../'; +import { useTimeline } from 'wcpay/data'; +import { useTransactionAmounts } from '../hooks'; +import { TimelineItem } from 'wcpay/data/timeline/types'; +import { TransactionDetails } from '../types'; + +jest.mock( '@wordpress/i18n', () => ( { + __: jest.fn().mockImplementation( ( str ) => str ), +} ) ); + +jest.mock( 'wcpay/data', () => ( { + useTimeline: jest.fn(), +} ) ); + +jest.mock( '../hooks', () => ( { + useTransactionAmounts: jest.fn(), +} ) ); + +declare const global: { + wcpaySettings: { + zeroDecimalCurrencies: string[]; + currencyData: Record< string, any >; + connect: { + country: string; + }; + }; +}; + +describe( 'PaymentTransactionBreakdown', () => { + beforeEach( () => { + ( useTimeline as jest.Mock ).mockReset(); + ( useTransactionAmounts as jest.Mock ).mockReset(); + global.wcpaySettings = { + zeroDecimalCurrencies: [], + connect: { + country: 'US', + }, + currencyData: { + US: { + code: 'USD', + symbol: '$', + symbolPosition: 'left', + thousandSeparator: ',', + decimalSeparator: '.', + precision: 2, + }, + }, + }; + } ); + + it( 'renders nothing when no capture event is found', () => { + ( useTimeline as jest.Mock ).mockReturnValue( { + timeline: [], + isLoading: false, + } ); + + const { container } = render( + + ); + + expect( container ).toBeEmptyDOMElement(); + } ); + + it( 'renders nothing in loading state', () => { + ( useTimeline as jest.Mock ).mockReturnValue( { + timeline: [], + isLoading: true, + } ); + + const { container } = render( + + ); + + expect( container ).toBeEmptyDOMElement(); + } ); + + it( 'renders empty state on error', () => { + ( useTimeline as jest.Mock ).mockReturnValue( { + timeline: [], + timelineError: new Error( 'Failed to load' ), + isLoading: false, + } ); + + const { container } = render( + + ); + + expect( container ).toBeEmptyDOMElement(); + } ); + + it( 'renders transaction breakdown with single fee without history', () => { + const mockTransactionDetails: TransactionDetails = { + store_amount: 10000, + store_amount_captured: 10000, + store_currency: 'USD', + customer_amount: 10000, + customer_currency: 'USD', + customer_amount_captured: 10000, + customer_fee: 320, + store_fee: 320, + }; + + const mockCaptureEvent: TimelineItem = { + type: 'captured', + datetime: 1717334400, + transaction_details: mockTransactionDetails, + fee_rates: { + percentage: 0.029, + fixed: 30, + fixed_currency: 'USD', + }, + }; + + ( useTimeline as jest.Mock ).mockReturnValue( { + timeline: [ mockCaptureEvent ], + isLoading: false, + } ); + + ( useTransactionAmounts as jest.Mock ).mockReturnValue( { + formattedAmount: '$100.00 USD', + formattedStoreAmount: '$100.00 USD', + formattedCustomerAmount: '$100.00 USD', + isMultiCurrency: false, + } ); + + render( ); + + expect( screen.getByText( 'Base fee' ) ).toBeInTheDocument(); + expect( + screen.getByText( '2.90% + $0.30', { + selector: '.wcpay-transaction-breakdown__base_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'Total transaction fee' ) + ).toBeInTheDocument(); + expect( + screen.getByText( /- \$3.20$/, { + selector: '.wcpay-transaction-breakdown__total_fee_info div', + } ) + ).toBeInTheDocument(); + } ); + + it( 'renders transaction breakdown with multiple fees in history', () => { + const mockTransactionDetails: TransactionDetails = { + store_amount: 10000, + store_amount_captured: 10000, + store_currency: 'USD', + customer_amount: 10000, + customer_currency: 'USD', + customer_amount_captured: 10000, + customer_fee: 520, + store_fee: 520, + }; + + const mockCaptureEvent: TimelineItem = { + type: 'captured', + datetime: 1717334400, + transaction_details: mockTransactionDetails, + fee_rates: { + percentage: 0.049, + fixed: 30, + fixed_currency: 'USD', + history: [ + { + type: 'base', + fee_id: 'base', + percentage_rate: 0.029, + fixed_rate: 30, + currency: 'USD', + }, + { + type: 'additional', + additional_type: 'international', + fee_id: 'international', + percentage_rate: 0.01, + fixed_rate: 0, + currency: 'USD', + }, + { + type: 'additional', + additional_type: 'fx', + fee_id: 'fx', + percentage_rate: 0.01, + fixed_rate: 0, + currency: 'USD', + }, + ], + }, + }; + + ( useTimeline as jest.Mock ).mockReturnValue( { + timeline: [ mockCaptureEvent ], + isLoading: false, + } ); + + ( useTransactionAmounts as jest.Mock ).mockReturnValue( { + formattedAmount: '$100.00 USD', + formattedStoreAmount: '$100.00 USD', + formattedCustomerAmount: '$100.00 USD', + isMultiCurrency: false, + } ); + + render( ); + + expect( screen.getByText( 'Base fee' ) ).toBeInTheDocument(); + expect( + screen.getByText( '2.90% + $0.30', { + selector: '.wcpay-transaction-breakdown__base_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'International card fee' ) + ).toBeInTheDocument(); + expect( + screen.getByText( '1.00%', { + selector: + '.wcpay-transaction-breakdown__additional_international_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'Currency conversion fee' ) + ).toBeInTheDocument(); + expect( + screen.getByText( '1.00%', { + selector: + '.wcpay-transaction-breakdown__additional_fx_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'Total transaction fee' ) + ).toBeInTheDocument(); + expect( + screen.getByText( /- \$5.20$/, { + selector: '.wcpay-transaction-breakdown__total_fee_info div', + } ) + ).toBeInTheDocument(); + } ); + + it( 'renders transaction breakdown with conversion rate for multi-currency payment', () => { + const mockTransactionDetails: TransactionDetails = { + store_amount: 8500, + store_amount_captured: 8500, + store_currency: 'EUR', + customer_amount: 10000, + customer_currency: 'USD', + customer_amount_captured: 10000, + customer_fee: 320, + store_fee: 320, + }; + + const mockCaptureEvent: TimelineItem = { + type: 'captured', + datetime: 1717334400, + transaction_details: mockTransactionDetails, + fee_rates: { + percentage: 0.029, + fixed: 30, + fixed_currency: 'USD', + fee_exchange_rate: { + from_currency: 'USD', + to_currency: 'EUR', + from_amount: 10000, + to_amount: 8500, + rate: 0.85, + }, + }, + }; + + ( useTimeline as jest.Mock ).mockReturnValue( { + timeline: [ mockCaptureEvent ], + isLoading: false, + } ); + + ( useTransactionAmounts as jest.Mock ).mockReturnValue( { + formattedAmount: '$100.00 USD → €85.00 EUR', + formattedStoreAmount: '€85.00 EUR', + formattedCustomerAmount: '$100.00 USD', + isMultiCurrency: true, + } ); + + render( ); + + expect( + screen.getByText( 'Transaction breakdown' ) + ).toBeInTheDocument(); + expect( screen.getByText( 'Authorized payment' ) ).toBeInTheDocument(); + expect( + screen.getByText( '$100.00 USD → €85.00 EUR' ) + ).toBeInTheDocument(); + + const conversionRateText = screen.getByText( 'USD', { + selector: 'div.wcpay-transaction-breakdown__conversion_rate', + exact: false, + } ); + expect( conversionRateText ).toHaveTextContent( + '@ 1 USD → 1.176471 EUR' + ); + } ); +} ); diff --git a/client/payment-details/transaction-breakdown/tests/utils.test.ts b/client/payment-details/transaction-breakdown/tests/utils.test.ts new file mode 100644 index 00000000000..e383d23c847 --- /dev/null +++ b/client/payment-details/transaction-breakdown/tests/utils.test.ts @@ -0,0 +1,66 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import { formatFeeType, formatFeeRate } from '../utils'; +import { formatCurrency } from 'multi-currency/interface/functions'; + +jest.mock( '@wordpress/i18n', () => ( { + __: jest.fn().mockImplementation( ( str ) => str ), +} ) ); + +jest.mock( 'multi-currency/interface/functions', () => ( { + formatCurrency: jest.fn(), +} ) ); + +describe( 'formatFeeType', () => { + it( 'returns total transaction fee text for total type', () => { + expect( formatFeeType( 'total' ) ).toBe( 'Total transaction fee' ); + } ); + + it( 'returns base fee text for base type', () => { + expect( formatFeeType( 'base' ) ).toBe( 'Base fee' ); + } ); + + it( 'returns international card fee text for additional international type', () => { + expect( formatFeeType( 'additional', 'international' ) ).toBe( + 'International card fee' + ); + } ); + + it( 'returns currency conversion fee text for additional fx type', () => { + expect( formatFeeType( 'additional', 'fx' ) ).toBe( + 'Currency conversion fee' + ); + } ); + + it( 'returns generic fee text for unknown type', () => { + expect( formatFeeType( 'unknown' ) ).toBe( 'Fee' ); + } ); +} ); + +describe( 'formatFeeRate', () => { + beforeEach( () => { + ( formatCurrency as jest.Mock ).mockReset(); + } ); + + it( 'formats percentage only', () => { + expect( formatFeeRate( 0.029, 0, 'USD', 'USD' ) ).toBe( '2.90%' ); + } ); + + it( 'formats fixed amount only', () => { + ( formatCurrency as jest.Mock ).mockReturnValue( '$0.30' ); + expect( formatFeeRate( 0, 30, 'USD', 'USD' ) ).toBe( '$0.30' ); + } ); + + it( 'combines percentage and fixed amount', () => { + ( formatCurrency as jest.Mock ).mockReturnValue( '$0.30' ); + expect( formatFeeRate( 0.029, 30, 'USD', 'USD' ) ).toBe( + '2.90% + $0.30' + ); + } ); +} ); diff --git a/client/payment-details/transaction-breakdown/types.ts b/client/payment-details/transaction-breakdown/types.ts new file mode 100644 index 00000000000..605b154fae0 --- /dev/null +++ b/client/payment-details/transaction-breakdown/types.ts @@ -0,0 +1,20 @@ +export interface TransactionDetails { + store_amount: number; + store_currency: string; + customer_amount: number; + customer_currency: string; + store_fee: number; + store_amount_captured: number; + customer_amount_captured: number; + customer_fee: number; +} + +export interface FeeRate { + type: string; + additional_type?: string; + percentage_rate: number; + fixed_rate: number; + currency: string; +} + +// Add other type definitions as needed From 4498a50671fec0147cfc2a0537e20d23be40d365 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Mon, 3 Feb 2025 19:21:09 +0100 Subject: [PATCH 07/18] Changelog entry --- changelog/add-1342-transaction-breakdown-block | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changelog/add-1342-transaction-breakdown-block diff --git a/changelog/add-1342-transaction-breakdown-block b/changelog/add-1342-transaction-breakdown-block new file mode 100644 index 00000000000..49b86e40d39 --- /dev/null +++ b/changelog/add-1342-transaction-breakdown-block @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Transaction Fees breakdown component in the Payment details. From 08540f8abd2ecebdb7f564a48107c7eefc5b7f76 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Tue, 4 Feb 2025 12:01:10 +0100 Subject: [PATCH 08/18] Clarify type definitions with comments --- .../transaction-breakdown/types.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/client/payment-details/transaction-breakdown/types.ts b/client/payment-details/transaction-breakdown/types.ts index 605b154fae0..b9f17b747a9 100644 --- a/client/payment-details/transaction-breakdown/types.ts +++ b/client/payment-details/transaction-breakdown/types.ts @@ -1,20 +1,31 @@ export interface TransactionDetails { + // The amount of the transaction in the store's currency store_amount: number; + // The store's currency store_currency: string; + // The amount of the transaction in the customer's currency customer_amount: number; + // The customer's currency customer_currency: string; + // The fee of the transaction in the store's currency store_fee: number; + // The fee of the transaction in the customer's currency + customer_fee: number; + // The amount of the transaction that was captured in the store's currency store_amount_captured: number; + // The amount of the transaction that was captured in the customer's currency customer_amount_captured: number; - customer_fee: number; } export interface FeeRate { + // The type of fee, e.g. "base", "additional", "discount" type: string; + // The additional type of fee, e.g. "international", "fx" additional_type?: string; + // The percentage rate of the fee, as a share of 1, e.g. 0.029 for 2.9% percentage_rate: number; + // The fixed rate of the fee in the minimum unit of the currency, e.g. 30 for USD 0.30 fixed_rate: number; + // The currency of the fee, e.g. "USD" currency: string; } - -// Add other type definitions as needed From 7f9135cb71c3d00b4d7704d394d18cdb0e36b90c Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:58:47 +0100 Subject: [PATCH 09/18] Update imports in JavaScript tests --- .../payment-details/transaction-breakdown/tests/hooks.test.ts | 1 + .../payment-details/transaction-breakdown/tests/index.test.tsx | 2 +- .../payment-details/transaction-breakdown/tests/utils.test.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/payment-details/transaction-breakdown/tests/hooks.test.ts b/client/payment-details/transaction-breakdown/tests/hooks.test.ts index 074e9b20ea6..3e9e8ba7b22 100644 --- a/client/payment-details/transaction-breakdown/tests/hooks.test.ts +++ b/client/payment-details/transaction-breakdown/tests/hooks.test.ts @@ -2,6 +2,7 @@ * External dependencies */ import { renderHook } from '@testing-library/react-hooks'; +import { jest } from '@jest/globals'; /** * Internal dependencies diff --git a/client/payment-details/transaction-breakdown/tests/index.test.tsx b/client/payment-details/transaction-breakdown/tests/index.test.tsx index 09907c79500..c53d5e7aea9 100644 --- a/client/payment-details/transaction-breakdown/tests/index.test.tsx +++ b/client/payment-details/transaction-breakdown/tests/index.test.tsx @@ -3,7 +3,7 @@ */ import React from 'react'; import { render, screen } from '@testing-library/react'; -import { __ } from '@wordpress/i18n'; +import { jest } from '@jest/globals'; /** * Internal dependencies diff --git a/client/payment-details/transaction-breakdown/tests/utils.test.ts b/client/payment-details/transaction-breakdown/tests/utils.test.ts index e383d23c847..207cc49cadf 100644 --- a/client/payment-details/transaction-breakdown/tests/utils.test.ts +++ b/client/payment-details/transaction-breakdown/tests/utils.test.ts @@ -1,7 +1,7 @@ /** * External dependencies */ -import { __ } from '@wordpress/i18n'; +import { jest } from '@jest/globals'; /** * Internal dependencies From 350c152d0ebf37bb44323b1f52545743c92054dc Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:54:48 +0100 Subject: [PATCH 10/18] Update comments --- .../transaction-breakdown/types.ts | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/client/payment-details/transaction-breakdown/types.ts b/client/payment-details/transaction-breakdown/types.ts index b9f17b747a9..78d50ff454f 100644 --- a/client/payment-details/transaction-breakdown/types.ts +++ b/client/payment-details/transaction-breakdown/types.ts @@ -1,31 +1,39 @@ export interface TransactionDetails { - // The amount of the transaction in the store's currency + /** The amount of the transaction in the store's currency */ store_amount: number; - // The store's currency + /** The store's currency */ store_currency: string; - // The amount of the transaction in the customer's currency + /** The amount of the transaction in the customer's currency */ customer_amount: number; - // The customer's currency + /** The customer's currency */ customer_currency: string; - // The fee of the transaction in the store's currency + /** The fee of the transaction in the store's currency */ store_fee: number; - // The fee of the transaction in the customer's currency + /** The fee of the transaction in the customer's currency */ customer_fee: number; - // The amount of the transaction that was captured in the store's currency + /** + * The amount of the transaction that was captured in the store's currency + */ store_amount_captured: number; - // The amount of the transaction that was captured in the customer's currency + /** + * The amount of the transaction that was captured in the customer's + * currency + */ customer_amount_captured: number; } export interface FeeRate { - // The type of fee, e.g. "base", "additional", "discount" + /** The type of fee, e.g. "base", "additional", "discount" */ type: string; - // The additional type of fee, e.g. "international", "fx" + /** + * The additional type of fee, e.g. "international", "fx". At the moment + * it is used if `type` is "additional", otherwise it is empty. + */ additional_type?: string; - // The percentage rate of the fee, as a share of 1, e.g. 0.029 for 2.9% + /** The percentage rate of the fee, as a share of 1, e.g. 0.029 for 2.9% */ percentage_rate: number; - // The fixed rate of the fee in the minimum unit of the currency, e.g. 30 for USD 0.30 + /** The fixed rate of the fee in the minimum unit of the currency, e.g. 30 for USD 0.30 */ fixed_rate: number; - // The currency of the fee, e.g. "USD" + /** The currency of the fee, e.g. "USD" */ currency: string; } From 7a1920db18249e0e71203325d43382605cba1b7f Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:37:56 +0100 Subject: [PATCH 11/18] Updated test snapshot --- ...ions-page-should-load-without-errors-1.png | Bin 114071 -> 110939 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/e2e-pw/specs/merchant/__snapshots__/merchant-admin-transactions.spec.ts/Admin-transactions-page-should-load-without-errors-1.png b/tests/e2e-pw/specs/merchant/__snapshots__/merchant-admin-transactions.spec.ts/Admin-transactions-page-should-load-without-errors-1.png index 32b65a0a01c4f799a86bc685c8c2f918c27e1a1e..a5988be9d1a1698eaed0ff7b09382630580710a2 100644 GIT binary patch literal 110939 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
    aLK(OyM256 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 ZKKN8wb=mEQGaCGn6q9?FBl7zF{{qm7Kso>b From 06bfc90fa0d551e1b898e4ead0dcb65989948b73 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Tue, 11 Feb 2025 10:42:20 +0100 Subject: [PATCH 12/18] Apply suggestions from code review Co-authored-by: Miguel Gasca --- client/payment-details/transaction-breakdown/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index b6e57703244..c64764561f0 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -36,7 +36,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > const { timeline, isLoading } = useTimeline( paymentIntentId ); /** - * Right now there is now support for multi-capture in the WooPayments and + * Right now there is no support for multi-capture in the WooPayments and * we retrieve information about fees from the first available capture * event. This should be updated if multi capture becomes reality. */ @@ -55,7 +55,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > return null; } - const { formattedAmount, isMultiCurrency } = transactionAmounts; + const { formattedAmount, isMultiCurrency } = useTransactionAmounts( captureEvent ); const feeExchangeRate = captureEvent.fee_rates.fee_exchange_rate?.rate || 1; From 23a859d00bc49ed7ad6d7b4e007ba6e2cd60854c Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:23:37 +0100 Subject: [PATCH 13/18] Restore transactionAmounts assignment to allow for undefined check earlier --- client/payment-details/transaction-breakdown/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index c64764561f0..75f329a9731 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -55,8 +55,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > return null; } - const { formattedAmount, isMultiCurrency } = useTransactionAmounts( captureEvent ); - + const { formattedAmount, isMultiCurrency } = transactionAmounts; const feeExchangeRate = captureEvent.fee_rates.fee_exchange_rate?.rate || 1; const conversionRate = isMultiCurrency ? ( From 433e235190cecbde4be4a9091f07d04f26f01443 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:24:12 +0100 Subject: [PATCH 14/18] Extract FeesBreakdown component and include a handling of the discount fee --- .../fees-breakdown/index.tsx | 126 +++++++++++ .../fees-breakdown/tests/index.test.tsx | 214 ++++++++++++++++++ .../transaction-breakdown/index.tsx | 107 +-------- .../transaction-breakdown/utils.ts | 15 +- 4 files changed, 352 insertions(+), 110 deletions(-) create mode 100644 client/payment-details/transaction-breakdown/fees-breakdown/index.tsx create mode 100644 client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx diff --git a/client/payment-details/transaction-breakdown/fees-breakdown/index.tsx b/client/payment-details/transaction-breakdown/fees-breakdown/index.tsx new file mode 100644 index 00000000000..dc271cee850 --- /dev/null +++ b/client/payment-details/transaction-breakdown/fees-breakdown/index.tsx @@ -0,0 +1,126 @@ +/** @format **/ + +/** + * External dependencies + */ +import React from 'react'; +import { find } from 'lodash'; + +/** Internal dependencies */ +import { formatCurrency } from 'multi-currency/interface/functions'; +import { formatFeeType, formatFeeRate } from '../utils'; +import { TimelineItem, TimelineFeeRate } from 'wcpay/data/timeline/types'; +import { Flex, FlexItem } from '@wordpress/components'; + +const FeesBreakdown: React.FC< { + event: TimelineItem; +} > = ( { event } ) => { + if ( ! event.fee_rates || ! event.transaction_details ) { + return null; + } + + const storeCurrency = event.transaction_details.store_currency; + const feeExchangeRate = event.fee_rates.fee_exchange_rate?.rate || 1; + const discountFee = event.fee_rates.history + ? find( + event.fee_rates.history, + ( fee: TimelineFeeRate ) => fee.type === 'discount' + ) + : undefined; + + const FeeRow: React.FC< { + type: string; + additionalType?: string; + percentage: number; + fixed: number; + currency: string; + amount?: number; + } > = ( { type, additionalType, percentage, fixed, currency, amount } ) => { + if ( 'discount' === type ) { + return null; + } + + if ( 'base' === type && discountFee ) { + percentage = percentage + discountFee.percentage_rate; + fixed = fixed + discountFee.fixed_rate; + } + + const formattedFeeType = formatFeeType( + type, + additionalType, + 'base' === type ? discountFee : undefined + ); + const formattedFeeRate = formatFeeRate( + percentage, + fixed, + currency, + storeCurrency + ); + const formattedFeeAmount = amount + ? ` - ${ formatCurrency( amount, storeCurrency, storeCurrency ) }` + : ''; + const feeType = type + ( additionalType ? `_${ additionalType }` : '' ); + + return ( + + + { formattedFeeType } + + + { formattedFeeRate } + + + { formattedFeeAmount } + + + ); + }; + + const fees = []; + + if ( ! event.fee_rates.history ) { + fees.push( + + ); + } else { + event.fee_rates.history.map( ( fee: TimelineFeeRate ) => { + const feeType = + fee.type + + ( fee.additional_type ? `_${ fee.additional_type }` : '' ); + fees.push( + + ); + return null; + } ); + } + + fees.push( + + ); + + return <>{ fees }; +}; + +export default FeesBreakdown; diff --git a/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx b/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx new file mode 100644 index 00000000000..9da848dff38 --- /dev/null +++ b/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx @@ -0,0 +1,214 @@ +/** + * External dependencies + */ +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +/** Internal dependencies */ +import FeesBreakdown from '../'; +import { TimelineItem } from 'wcpay/data/timeline/types'; + +declare const global: { + wcpaySettings: { + zeroDecimalCurrencies: string[]; + currencyData: Record< string, any >; + connect: { + country: string; + }; + }; +}; + +describe( 'FeesBreakdown', () => { + const baseEvent: TimelineItem = { + type: 'capture', + datetime: 1713100800, + fee_rates: { + percentage: 0.029, + fixed: 30, + fixed_currency: 'USD', + fee_exchange_rate: { + from_currency: 'USD', + to_currency: 'USD', + from_amount: 100, + to_amount: 100, + rate: 1, + }, + }, + transaction_details: { + store_currency: 'USD', + store_fee: 10, + customer_currency: 'USD', + customer_amount: 100, + customer_amount_captured: 100, + customer_fee: 10, + store_amount: 100, + store_amount_captured: 100, + }, + }; + + beforeEach( () => { + global.wcpaySettings = { + zeroDecimalCurrencies: [], + connect: { + country: 'US', + }, + currencyData: { + US: { + code: 'USD', + symbol: '$', + symbolPosition: 'left', + thousandSeparator: ',', + decimalSeparator: '.', + precision: 2, + }, + }, + }; + } ); + + it( 'should render null when fee_rates or transaction_details are missing', () => { + const { container } = render( + + ); + expect( container ).toBeEmptyDOMElement(); + } ); + + it( 'should render base fee when fee_history is undefined', () => { + render( ); + + expect( screen.getByText( 'Base fee' ) ).toBeInTheDocument(); + expect( + screen.getByText( '2.90% + $0.30', { + selector: '.wcpay-transaction-breakdown__total_fee_info div', + } ) + ).toBeInTheDocument(); + } ); + + it( 'should render fees with discount when fee_history contains a discount', () => { + const eventWithDiscount: TimelineItem = { + ...baseEvent, + fee_rates: { + ...baseEvent.fee_rates, + percentage: 0.029, + fixed: 30, + fixed_currency: 'USD', + history: [ + { + type: 'base', + percentage_rate: 0.029, + fixed_rate: 30, + currency: 'USD', + fee_id: 'base', + }, + { + type: 'discount', + percentage_rate: -0.001, + fixed_rate: -5, + currency: 'USD', + fee_id: 'discount', + }, + { + type: 'additional', + additional_type: 'international', + percentage_rate: 0.01, + fixed_rate: 0, + currency: 'USD', + fee_id: 'additional', + }, + ], + }, + }; + + render( ); + + expect( + screen.getByText( 'Base fee (discounted)' ) + ).toBeInTheDocument(); + expect( + screen.getByText( '2.80% + $0.25', { + selector: '.wcpay-transaction-breakdown__base_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'International card fee', { + selector: + '.wcpay-transaction-breakdown__additional_international_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( '1.00%', { + selector: + '.wcpay-transaction-breakdown__additional_international_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'Total transaction fee' ) + ).toBeInTheDocument(); + expect( + screen.getByText( /- \$0.10$/, { + selector: '.wcpay-transaction-breakdown__total_fee_info div', + } ) + ).toBeInTheDocument(); + } ); + + it( 'should render fees without discount when fee_history has no discount', () => { + const eventWithoutDiscount: TimelineItem = { + ...baseEvent, + fee_rates: { + ...baseEvent.fee_rates, + percentage: 0.029, + fixed: 30, + fixed_currency: 'USD', + history: [ + { + type: 'base', + percentage_rate: 0.029, + fixed_rate: 30, + currency: 'USD', + fee_id: 'base', + }, + { + type: 'additional', + additional_type: 'international', + percentage_rate: 0.01, + fixed_rate: 0, + currency: 'USD', + fee_id: 'additional', + }, + ], + }, + }; + + render( ); + + expect( screen.getByText( 'Base fee' ) ).toBeInTheDocument(); + expect( + screen.getByText( 'International card fee' ) + ).toBeInTheDocument(); + expect( + screen.getByText( '2.90% + $0.30', { + selector: '.wcpay-transaction-breakdown__base_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( '1.00%', { + selector: + '.wcpay-transaction-breakdown__additional_international_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'Total transaction fee' ) + ).toBeInTheDocument(); + expect( + screen.getByText( /- \$0.10$/, { + selector: '.wcpay-transaction-breakdown__total_fee_info div', + } ) + ).toBeInTheDocument(); + } ); +} ); diff --git a/client/payment-details/transaction-breakdown/index.tsx b/client/payment-details/transaction-breakdown/index.tsx index 75f329a9731..0ccdc94b5ab 100644 --- a/client/payment-details/transaction-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/index.tsx @@ -19,11 +19,11 @@ import { Flex, FlexItem, } from '@wordpress/components'; -import { TimelineItem, TimelineFeeRate } from 'wcpay/data/timeline/types'; +import { TimelineItem } from 'wcpay/data/timeline/types'; import Loadable, { LoadableBlock } from 'components/loadable'; import { formatCurrency } from 'multi-currency/interface/functions'; -import { formatFeeType, formatFeeRate } from './utils'; import { useTransactionAmounts } from './hooks'; +import FeesBreakdown from './fees-breakdown'; import './style.scss'; interface PaymentTransactionBreakdownProps { @@ -71,107 +71,6 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > '' ); - const FeeRow: React.FC< { - type: string; - additionalType?: string; - percentage: number; - fixed: number; - currency: string; - storeCurrency: string; - amount?: number; - } > = ( { - type, - additionalType, - percentage, - fixed, - currency, - storeCurrency, - amount, - } ) => { - const formattedFeeType = formatFeeType( type, additionalType ); - const formattedFeeRate = formatFeeRate( - percentage, - fixed, - currency, - storeCurrency - ); - const formattedFeeAmount = amount - ? ` - ${ formatCurrency( amount, storeCurrency, storeCurrency ) }` - : ''; - const feeType = type + ( additionalType ? `_${ additionalType }` : '' ); - - return ( - - - { formattedFeeType } - - - { formattedFeeRate } - - - { formattedFeeAmount } - - - ); - }; - - function formatFees( event: TimelineItem ): JSX.Element[] { - if ( ! event.fee_rates || ! event.transaction_details ) { - return []; - } - - const storeCurrency = event.transaction_details.store_currency; - - const fees = []; - - if ( ! event.fee_rates.history ) { - fees.push( - - ); - } else { - event.fee_rates.history.map( ( fee: TimelineFeeRate ) => { - const feeType = - fee.type + - ( fee.additional_type ? `_${ fee.additional_type }` : '' ); - fees.push( - - ); - return null; - } ); - } - - fees.push( - - ); - - return fees; - } - return captureEvent ? ( @@ -212,7 +111,7 @@ const PaymentTransactionBreakdown: React.FC< PaymentTransactionBreakdownProps > className="wcpay-transaction-breakdown__fees" direction="column" > - { formatFees( captureEvent ) } + diff --git a/client/payment-details/transaction-breakdown/utils.ts b/client/payment-details/transaction-breakdown/utils.ts index b229871c163..f215cfdf20e 100644 --- a/client/payment-details/transaction-breakdown/utils.ts +++ b/client/payment-details/transaction-breakdown/utils.ts @@ -8,10 +8,11 @@ import { filter, join } from 'lodash'; */ import { __ } from '@wordpress/i18n'; import { formatCurrency } from 'multi-currency/interface/functions'; - +import { TimelineFeeRate } from 'wcpay/data/timeline/types'; export const formatFeeType = ( type: string, - additionalType?: string + additionalType?: string, + discountFee?: TimelineFeeRate ): string => { const feeTypes: Record< string, string | Record< string, string > > = { total: __( 'Total transaction fee', 'woocommerce-payments' ), @@ -25,18 +26,20 @@ export const formatFeeType = ( }, }; + const suffix = discountFee && type === 'base' ? ' (discounted)' : ''; + if ( type === 'additional' && additionalType ) { const additionalFees = feeTypes.additional as Record< string, string >; return ( - additionalFees[ additionalType ] || - __( 'Fee', 'woocommerce-payments' ) + ( additionalFees[ additionalType ] || + __( 'Fee', 'woocommerce-payments' ) ) + suffix ); } const baseType = feeTypes[ type ]; return typeof baseType === 'string' - ? baseType - : __( 'Fee', 'woocommerce-payments' ); + ? baseType + suffix + : __( 'Fee', 'woocommerce-payments' ) + suffix; }; export const formatFeeRate = ( From 30695d1aa31642344ae0f4014f74d090b575d04c Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:49:11 +0100 Subject: [PATCH 15/18] Improve percentage rates display --- .../fees-breakdown/tests/index.test.tsx | 10 +++++----- .../transaction-breakdown/tests/index.test.tsx | 8 ++++---- .../transaction-breakdown/tests/utils.test.ts | 8 ++++++-- client/payment-details/transaction-breakdown/utils.ts | 2 +- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx b/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx index 9da848dff38..bc01b6a2f8b 100644 --- a/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx +++ b/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx @@ -84,7 +84,7 @@ describe( 'FeesBreakdown', () => { expect( screen.getByText( 'Base fee' ) ).toBeInTheDocument(); expect( - screen.getByText( '2.90% + $0.30', { + screen.getByText( '2.9% + $0.30', { selector: '.wcpay-transaction-breakdown__total_fee_info div', } ) ).toBeInTheDocument(); @@ -131,7 +131,7 @@ describe( 'FeesBreakdown', () => { screen.getByText( 'Base fee (discounted)' ) ).toBeInTheDocument(); expect( - screen.getByText( '2.80% + $0.25', { + screen.getByText( '2.8% + $0.25', { selector: '.wcpay-transaction-breakdown__base_fee_info div', } ) ).toBeInTheDocument(); @@ -142,7 +142,7 @@ describe( 'FeesBreakdown', () => { } ) ).toBeInTheDocument(); expect( - screen.getByText( '1.00%', { + screen.getByText( '1%', { selector: '.wcpay-transaction-breakdown__additional_international_fee_info div', } ) @@ -192,12 +192,12 @@ describe( 'FeesBreakdown', () => { screen.getByText( 'International card fee' ) ).toBeInTheDocument(); expect( - screen.getByText( '2.90% + $0.30', { + screen.getByText( '2.9% + $0.30', { selector: '.wcpay-transaction-breakdown__base_fee_info div', } ) ).toBeInTheDocument(); expect( - screen.getByText( '1.00%', { + screen.getByText( '1%', { selector: '.wcpay-transaction-breakdown__additional_international_fee_info div', } ) diff --git a/client/payment-details/transaction-breakdown/tests/index.test.tsx b/client/payment-details/transaction-breakdown/tests/index.test.tsx index c53d5e7aea9..7dfa290fdf4 100644 --- a/client/payment-details/transaction-breakdown/tests/index.test.tsx +++ b/client/payment-details/transaction-breakdown/tests/index.test.tsx @@ -137,7 +137,7 @@ describe( 'PaymentTransactionBreakdown', () => { expect( screen.getByText( 'Base fee' ) ).toBeInTheDocument(); expect( - screen.getByText( '2.90% + $0.30', { + screen.getByText( '2.9% + $0.30', { selector: '.wcpay-transaction-breakdown__base_fee_info div', } ) ).toBeInTheDocument(); @@ -215,7 +215,7 @@ describe( 'PaymentTransactionBreakdown', () => { expect( screen.getByText( 'Base fee' ) ).toBeInTheDocument(); expect( - screen.getByText( '2.90% + $0.30', { + screen.getByText( '2.9% + $0.30', { selector: '.wcpay-transaction-breakdown__base_fee_info div', } ) ).toBeInTheDocument(); @@ -223,7 +223,7 @@ describe( 'PaymentTransactionBreakdown', () => { screen.getByText( 'International card fee' ) ).toBeInTheDocument(); expect( - screen.getByText( '1.00%', { + screen.getByText( '1%', { selector: '.wcpay-transaction-breakdown__additional_international_fee_info div', } ) @@ -232,7 +232,7 @@ describe( 'PaymentTransactionBreakdown', () => { screen.getByText( 'Currency conversion fee' ) ).toBeInTheDocument(); expect( - screen.getByText( '1.00%', { + screen.getByText( '1%', { selector: '.wcpay-transaction-breakdown__additional_fx_fee_info div', } ) diff --git a/client/payment-details/transaction-breakdown/tests/utils.test.ts b/client/payment-details/transaction-breakdown/tests/utils.test.ts index 207cc49cadf..58e83c1cc42 100644 --- a/client/payment-details/transaction-breakdown/tests/utils.test.ts +++ b/client/payment-details/transaction-breakdown/tests/utils.test.ts @@ -49,7 +49,11 @@ describe( 'formatFeeRate', () => { } ); it( 'formats percentage only', () => { - expect( formatFeeRate( 0.029, 0, 'USD', 'USD' ) ).toBe( '2.90%' ); + expect( formatFeeRate( 0.029, 0, 'USD', 'USD' ) ).toBe( '2.9%' ); + } ); + + it( 'formats percentage only using all decimals', () => { + expect( formatFeeRate( 0.0295, 0, 'USD', 'USD' ) ).toBe( '2.95%' ); } ); it( 'formats fixed amount only', () => { @@ -60,7 +64,7 @@ describe( 'formatFeeRate', () => { it( 'combines percentage and fixed amount', () => { ( formatCurrency as jest.Mock ).mockReturnValue( '$0.30' ); expect( formatFeeRate( 0.029, 30, 'USD', 'USD' ) ).toBe( - '2.90% + $0.30' + '2.9% + $0.30' ); } ); } ); diff --git a/client/payment-details/transaction-breakdown/utils.ts b/client/payment-details/transaction-breakdown/utils.ts index f215cfdf20e..4440a0e20a0 100644 --- a/client/payment-details/transaction-breakdown/utils.ts +++ b/client/payment-details/transaction-breakdown/utils.ts @@ -49,7 +49,7 @@ export const formatFeeRate = ( storeCurrency: string ): string => { const formattedPercentage = percentage - ? `${ ( percentage * 100 ).toFixed( 2 ) }%` + ? `${ Number.parseFloat( ( percentage * 100 ).toFixed( 2 ) ) }%` : ''; const formattedFixed = fixed ? formatCurrency( fixed, currency, storeCurrency ) From e8adf91c09cd56625ce8d8e8aa4ebb581d861aa2 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Fri, 14 Feb 2025 13:21:46 +0100 Subject: [PATCH 16/18] Properly calculate discount on fees, spreading across fees when needed --- .../fees-breakdown/index.tsx | 59 ++++++++++---- .../fees-breakdown/tests/index.test.tsx | 76 ++++++++++++++++--- .../transaction-breakdown/tests/utils.test.ts | 4 + .../transaction-breakdown/utils.ts | 13 ++-- 4 files changed, 124 insertions(+), 28 deletions(-) diff --git a/client/payment-details/transaction-breakdown/fees-breakdown/index.tsx b/client/payment-details/transaction-breakdown/fees-breakdown/index.tsx index dc271cee850..487dc9afa27 100644 --- a/client/payment-details/transaction-breakdown/fees-breakdown/index.tsx +++ b/client/payment-details/transaction-breakdown/fees-breakdown/index.tsx @@ -28,6 +28,11 @@ const FeesBreakdown: React.FC< { ) : undefined; + let remainingPercentageDiscount = Math.abs( + discountFee?.percentage_rate || 0 + ); + let remainingFixedDiscount = Math.abs( discountFee?.fixed_rate || 0 ); + const FeeRow: React.FC< { type: string; additionalType?: string; @@ -35,20 +40,20 @@ const FeesBreakdown: React.FC< { fixed: number; currency: string; amount?: number; - } > = ( { type, additionalType, percentage, fixed, currency, amount } ) => { - if ( 'discount' === type ) { - return null; - } - - if ( 'base' === type && discountFee ) { - percentage = percentage + discountFee.percentage_rate; - fixed = fixed + discountFee.fixed_rate; - } - + isDiscounted?: boolean; + } > = ( { + type, + additionalType, + percentage, + fixed, + currency, + amount, + isDiscounted, + } ) => { const formattedFeeType = formatFeeType( type, additionalType, - 'base' === type ? discountFee : undefined + isDiscounted ); const formattedFeeRate = formatFeeRate( percentage, @@ -92,17 +97,45 @@ const FeesBreakdown: React.FC< { ); } else { event.fee_rates.history.map( ( fee: TimelineFeeRate ) => { + if ( 'discount' === fee.type ) { + return null; + } + + let percentage = fee.percentage_rate; + let fixed = fee.fixed_rate; + let isDiscounted = false; + + if ( remainingPercentageDiscount > 0 ) { + const percentageDiscount = Math.min( + remainingPercentageDiscount, + percentage + ); + percentage = percentage - percentageDiscount; + remainingPercentageDiscount = + remainingPercentageDiscount - percentageDiscount; + isDiscounted = true; + } + + if ( remainingFixedDiscount > 0 ) { + const fixedDiscount = Math.min( remainingFixedDiscount, fixed ); + fixed = fixed - fixedDiscount; + remainingFixedDiscount = remainingFixedDiscount - fixedDiscount; + isDiscounted = true; + } + const feeType = fee.type + ( fee.additional_type ? `_${ fee.additional_type }` : '' ); + fees.push( ); return null; diff --git a/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx b/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx index bc01b6a2f8b..3fbc8a3596b 100644 --- a/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx +++ b/client/payment-details/transaction-breakdown/fees-breakdown/tests/index.test.tsx @@ -106,13 +106,6 @@ describe( 'FeesBreakdown', () => { currency: 'USD', fee_id: 'base', }, - { - type: 'discount', - percentage_rate: -0.001, - fixed_rate: -5, - currency: 'USD', - fee_id: 'discount', - }, { type: 'additional', additional_type: 'international', @@ -121,6 +114,13 @@ describe( 'FeesBreakdown', () => { currency: 'USD', fee_id: 'additional', }, + { + type: 'discount', + percentage_rate: -0.035, + fixed_rate: -25, + currency: 'USD', + fee_id: 'discount', + }, ], }, }; @@ -131,18 +131,18 @@ describe( 'FeesBreakdown', () => { screen.getByText( 'Base fee (discounted)' ) ).toBeInTheDocument(); expect( - screen.getByText( '2.8% + $0.25', { + screen.getByText( '$0.05', { selector: '.wcpay-transaction-breakdown__base_fee_info div', } ) ).toBeInTheDocument(); expect( - screen.getByText( 'International card fee', { + screen.getByText( 'International card fee (discounted)', { selector: '.wcpay-transaction-breakdown__additional_international_fee_info div', } ) ).toBeInTheDocument(); expect( - screen.getByText( '1%', { + screen.getByText( '0.4%', { selector: '.wcpay-transaction-breakdown__additional_international_fee_info div', } ) @@ -211,4 +211,60 @@ describe( 'FeesBreakdown', () => { } ) ).toBeInTheDocument(); } ); + + it( 'should render fee line with 0% when fee is fully discounted', () => { + const eventWithoutDiscount: TimelineItem = { + ...baseEvent, + fee_rates: { + ...baseEvent.fee_rates, + percentage: 0.029, + fixed: 30, + fixed_currency: 'USD', + history: [ + { + type: 'base', + percentage_rate: 0.029, + fixed_rate: 30, + currency: 'USD', + fee_id: 'base', + }, + { + type: 'additional', + additional_type: 'international', + percentage_rate: 0.01, + fixed_rate: 0, + currency: 'USD', + fee_id: 'additional', + }, + { + type: 'discount', + percentage_rate: -0.039, + fixed_rate: -30, + currency: 'USD', + fee_id: 'discount', + }, + ], + }, + }; + + render( ); + + expect( + screen.getByText( 'Base fee (discounted)' ) + ).toBeInTheDocument(); + expect( + screen.getByText( 'International card fee (discounted)' ) + ).toBeInTheDocument(); + expect( + screen.getByText( '0%', { + selector: '.wcpay-transaction-breakdown__base_fee_info div', + } ) + ).toBeInTheDocument(); + expect( + screen.getByText( '0%', { + selector: + '.wcpay-transaction-breakdown__additional_international_fee_info div', + } ) + ).toBeInTheDocument(); + } ); } ); diff --git a/client/payment-details/transaction-breakdown/tests/utils.test.ts b/client/payment-details/transaction-breakdown/tests/utils.test.ts index 58e83c1cc42..0f96fc9f997 100644 --- a/client/payment-details/transaction-breakdown/tests/utils.test.ts +++ b/client/payment-details/transaction-breakdown/tests/utils.test.ts @@ -67,4 +67,8 @@ describe( 'formatFeeRate', () => { '2.9% + $0.30' ); } ); + + it( 'returns 0% when both percentage and fixed are 0', () => { + expect( formatFeeRate( 0, 0, 'USD', 'USD' ) ).toBe( '0%' ); + } ); } ); diff --git a/client/payment-details/transaction-breakdown/utils.ts b/client/payment-details/transaction-breakdown/utils.ts index 4440a0e20a0..d7f573b3735 100644 --- a/client/payment-details/transaction-breakdown/utils.ts +++ b/client/payment-details/transaction-breakdown/utils.ts @@ -9,10 +9,11 @@ import { filter, join } from 'lodash'; import { __ } from '@wordpress/i18n'; import { formatCurrency } from 'multi-currency/interface/functions'; import { TimelineFeeRate } from 'wcpay/data/timeline/types'; + export const formatFeeType = ( type: string, additionalType?: string, - discountFee?: TimelineFeeRate + isDiscounted?: boolean ): string => { const feeTypes: Record< string, string | Record< string, string > > = { total: __( 'Total transaction fee', 'woocommerce-payments' ), @@ -26,7 +27,7 @@ export const formatFeeType = ( }, }; - const suffix = discountFee && type === 'base' ? ' (discounted)' : ''; + const suffix = isDiscounted ? ' (discounted)' : ''; if ( type === 'additional' && additionalType ) { const additionalFees = feeTypes.additional as Record< string, string >; @@ -55,8 +56,10 @@ export const formatFeeRate = ( ? formatCurrency( fixed, currency, storeCurrency ) : ''; - return join( - filter( [ formattedPercentage, formattedFixed ], Boolean ), - ' + ' + return ( + join( + filter( [ formattedPercentage, formattedFixed ], Boolean ), + ' + ' + ) || '0%' ); }; From 4af77f6eb7c62df1a625a7cf6cb68481c4b239e0 Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Tue, 25 Feb 2025 14:36:21 +0100 Subject: [PATCH 17/18] Remove superfluous dependency on `jest` --- client/payment-details/transaction-breakdown/tests/hooks.test.ts | 1 - .../payment-details/transaction-breakdown/tests/index.test.tsx | 1 - client/payment-details/transaction-breakdown/tests/utils.test.ts | 1 - 3 files changed, 3 deletions(-) diff --git a/client/payment-details/transaction-breakdown/tests/hooks.test.ts b/client/payment-details/transaction-breakdown/tests/hooks.test.ts index 3e9e8ba7b22..074e9b20ea6 100644 --- a/client/payment-details/transaction-breakdown/tests/hooks.test.ts +++ b/client/payment-details/transaction-breakdown/tests/hooks.test.ts @@ -2,7 +2,6 @@ * External dependencies */ import { renderHook } from '@testing-library/react-hooks'; -import { jest } from '@jest/globals'; /** * Internal dependencies diff --git a/client/payment-details/transaction-breakdown/tests/index.test.tsx b/client/payment-details/transaction-breakdown/tests/index.test.tsx index 7dfa290fdf4..13e0dd5d20b 100644 --- a/client/payment-details/transaction-breakdown/tests/index.test.tsx +++ b/client/payment-details/transaction-breakdown/tests/index.test.tsx @@ -3,7 +3,6 @@ */ import React from 'react'; import { render, screen } from '@testing-library/react'; -import { jest } from '@jest/globals'; /** * Internal dependencies diff --git a/client/payment-details/transaction-breakdown/tests/utils.test.ts b/client/payment-details/transaction-breakdown/tests/utils.test.ts index 0f96fc9f997..e84bee7f712 100644 --- a/client/payment-details/transaction-breakdown/tests/utils.test.ts +++ b/client/payment-details/transaction-breakdown/tests/utils.test.ts @@ -1,7 +1,6 @@ /** * External dependencies */ -import { jest } from '@jest/globals'; /** * Internal dependencies From c32819dd6dfa8cce3caa9c504918a4fc3dc7f65b Mon Sep 17 00:00:00 2001 From: Valery Sukhomlinov <683297+dmvrtx@users.noreply.github.com> Date: Wed, 26 Feb 2025 20:00:29 +0100 Subject: [PATCH 18/18] Remove unused import --- client/payment-details/transaction-breakdown/utils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/client/payment-details/transaction-breakdown/utils.ts b/client/payment-details/transaction-breakdown/utils.ts index d7f573b3735..eed70a7646c 100644 --- a/client/payment-details/transaction-breakdown/utils.ts +++ b/client/payment-details/transaction-breakdown/utils.ts @@ -8,7 +8,6 @@ import { filter, join } from 'lodash'; */ import { __ } from '@wordpress/i18n'; import { formatCurrency } from 'multi-currency/interface/functions'; -import { TimelineFeeRate } from 'wcpay/data/timeline/types'; export const formatFeeType = ( type: string,